001/*
002 * $Id: EntitiesToSymbol.java 4784 2011-03-15 08:33:00Z blowagie $
003 *
004 * This file is part of the iText (R) project.
005 * Copyright (c) 1998-2011 1T3XT BVBA
006 * Authors: Bruno Lowagie, Paulo Soares, et al.
007 *
008 * This program is free software; you can redistribute it and/or modify
009 * it under the terms of the GNU Affero General Public License version 3
010 * as published by the Free Software Foundation with the addition of the
011 * following permission added to Section 15 as permitted in Section 7(a):
012 * FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY 1T3XT,
013 * 1T3XT DISCLAIMS THE WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
014 *
015 * This program is distributed in the hope that it will be useful, but
016 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
017 * or FITNESS FOR A PARTICULAR PURPOSE.
018 * See the GNU Affero General Public License for more details.
019 * You should have received a copy of the GNU Affero General Public License
020 * along with this program; if not, see http://www.gnu.org/licenses or write to
021 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
022 * Boston, MA, 02110-1301 USA, or download the license from the following URL:
023 * http://itextpdf.com/terms-of-use/
024 *
025 * The interactive user interfaces in modified source and object code versions
026 * of this program must display Appropriate Legal Notices, as required under
027 * Section 5 of the GNU Affero General Public License.
028 *
029 * In accordance with Section 7(b) of the GNU Affero General Public License,
030 * a covered work must retain the producer line in every PDF that is created
031 * or manipulated using iText.
032 *
033 * You can be released from the requirements of the license by purchasing
034 * a commercial license. Buying such a license is mandatory as soon as you
035 * develop commercial activities involving the iText software without
036 * disclosing the source code of your own applications.
037 * These activities include: offering paid services to customers as an ASP,
038 * serving PDFs on the fly in a web application, shipping iText with a closed
039 * source product.
040 *
041 * For more information, please contact iText Software Corp. at this
042 * address: sales@itextpdf.com
043 */
044package com.itextpdf.text.xml.simpleparser;
045
046import java.util.HashMap;
047import java.util.Map;
048
049import com.itextpdf.text.Chunk;
050import com.itextpdf.text.Font;
051import com.itextpdf.text.Font.FontFamily;
052
053/**
054 * This class contains entities that can be used in an entity tag.
055 */
056
057public class EntitiesToSymbol {
058
059    /**
060     * This is a map that contains all possible id values of the entity tag
061     * that can be translated to a character in font Symbol.
062     */
063    private static final Map<String, Character> MAP;
064
065    static {
066        MAP = new HashMap<String, Character>();
067        MAP.put("169", Character.valueOf((char)227));
068        MAP.put("172", Character.valueOf((char)216));
069        MAP.put("174", Character.valueOf((char)210));
070        MAP.put("177", Character.valueOf((char)177));
071        MAP.put("215", Character.valueOf((char)180));
072        MAP.put("247", Character.valueOf((char)184));
073        MAP.put("8230", Character.valueOf((char)188));
074        MAP.put("8242", Character.valueOf((char)162));
075        MAP.put("8243", Character.valueOf((char)178));
076        MAP.put("8260", Character.valueOf((char)164));
077        MAP.put("8364", Character.valueOf((char)240));
078        MAP.put("8465", Character.valueOf((char)193));
079        MAP.put("8472", Character.valueOf((char)195));
080        MAP.put("8476", Character.valueOf((char)194));
081        MAP.put("8482", Character.valueOf((char)212));
082        MAP.put("8501", Character.valueOf((char)192));
083        MAP.put("8592", Character.valueOf((char)172));
084        MAP.put("8593", Character.valueOf((char)173));
085        MAP.put("8594", Character.valueOf((char)174));
086        MAP.put("8595", Character.valueOf((char)175));
087        MAP.put("8596", Character.valueOf((char)171));
088        MAP.put("8629", Character.valueOf((char)191));
089        MAP.put("8656", Character.valueOf((char)220));
090        MAP.put("8657", Character.valueOf((char)221));
091        MAP.put("8658", Character.valueOf((char)222));
092        MAP.put("8659", Character.valueOf((char)223));
093        MAP.put("8660", Character.valueOf((char)219));
094        MAP.put("8704", Character.valueOf((char)34));
095        MAP.put("8706", Character.valueOf((char)182));
096        MAP.put("8707", Character.valueOf((char)36));
097        MAP.put("8709", Character.valueOf((char)198));
098        MAP.put("8711", Character.valueOf((char)209));
099        MAP.put("8712", Character.valueOf((char)206));
100        MAP.put("8713", Character.valueOf((char)207));
101        MAP.put("8717", Character.valueOf((char)39));
102        MAP.put("8719", Character.valueOf((char)213));
103        MAP.put("8721", Character.valueOf((char)229));
104        MAP.put("8722", Character.valueOf((char)45));
105        MAP.put("8727", Character.valueOf((char)42));
106        MAP.put("8729", Character.valueOf((char)183));
107        MAP.put("8730", Character.valueOf((char)214));
108        MAP.put("8733", Character.valueOf((char)181));
109        MAP.put("8734", Character.valueOf((char)165));
110        MAP.put("8736", Character.valueOf((char)208));
111        MAP.put("8743", Character.valueOf((char)217));
112        MAP.put("8744", Character.valueOf((char)218));
113        MAP.put("8745", Character.valueOf((char)199));
114        MAP.put("8746", Character.valueOf((char)200));
115        MAP.put("8747", Character.valueOf((char)242));
116        MAP.put("8756", Character.valueOf((char)92));
117        MAP.put("8764", Character.valueOf((char)126));
118        MAP.put("8773", Character.valueOf((char)64));
119        MAP.put("8776", Character.valueOf((char)187));
120        MAP.put("8800", Character.valueOf((char)185));
121        MAP.put("8801", Character.valueOf((char)186));
122        MAP.put("8804", Character.valueOf((char)163));
123        MAP.put("8805", Character.valueOf((char)179));
124        MAP.put("8834", Character.valueOf((char)204));
125        MAP.put("8835", Character.valueOf((char)201));
126        MAP.put("8836", Character.valueOf((char)203));
127        MAP.put("8838", Character.valueOf((char)205));
128        MAP.put("8839", Character.valueOf((char)202));
129        MAP.put("8853", Character.valueOf((char)197));
130        MAP.put("8855", Character.valueOf((char)196));
131        MAP.put("8869", Character.valueOf((char)94));
132        MAP.put("8901", Character.valueOf((char)215));
133        MAP.put("8992", Character.valueOf((char)243));
134        MAP.put("8993", Character.valueOf((char)245));
135        MAP.put("9001", Character.valueOf((char)225));
136        MAP.put("9002", Character.valueOf((char)241));
137        MAP.put("913", Character.valueOf((char)65));
138        MAP.put("914", Character.valueOf((char)66));
139        MAP.put("915", Character.valueOf((char)71));
140        MAP.put("916", Character.valueOf((char)68));
141        MAP.put("917", Character.valueOf((char)69));
142        MAP.put("918", Character.valueOf((char)90));
143        MAP.put("919", Character.valueOf((char)72));
144        MAP.put("920", Character.valueOf((char)81));
145        MAP.put("921", Character.valueOf((char)73));
146        MAP.put("922", Character.valueOf((char)75));
147        MAP.put("923", Character.valueOf((char)76));
148        MAP.put("924", Character.valueOf((char)77));
149        MAP.put("925", Character.valueOf((char)78));
150        MAP.put("926", Character.valueOf((char)88));
151        MAP.put("927", Character.valueOf((char)79));
152        MAP.put("928", Character.valueOf((char)80));
153        MAP.put("929", Character.valueOf((char)82));
154        MAP.put("931", Character.valueOf((char)83));
155        MAP.put("932", Character.valueOf((char)84));
156        MAP.put("933", Character.valueOf((char)85));
157        MAP.put("934", Character.valueOf((char)70));
158        MAP.put("935", Character.valueOf((char)67));
159        MAP.put("936", Character.valueOf((char)89));
160        MAP.put("937", Character.valueOf((char)87));
161        MAP.put("945", Character.valueOf((char)97));
162        MAP.put("946", Character.valueOf((char)98));
163        MAP.put("947", Character.valueOf((char)103));
164        MAP.put("948", Character.valueOf((char)100));
165        MAP.put("949", Character.valueOf((char)101));
166        MAP.put("950", Character.valueOf((char)122));
167        MAP.put("951", Character.valueOf((char)104));
168        MAP.put("952", Character.valueOf((char)113));
169        MAP.put("953", Character.valueOf((char)105));
170        MAP.put("954", Character.valueOf((char)107));
171        MAP.put("955", Character.valueOf((char)108));
172        MAP.put("956", Character.valueOf((char)109));
173        MAP.put("957", Character.valueOf((char)110));
174        MAP.put("958", Character.valueOf((char)120));
175        MAP.put("959", Character.valueOf((char)111));
176        MAP.put("960", Character.valueOf((char)112));
177        MAP.put("961", Character.valueOf((char)114));
178        MAP.put("962", Character.valueOf((char)86));
179        MAP.put("963", Character.valueOf((char)115));
180        MAP.put("964", Character.valueOf((char)116));
181        MAP.put("965", Character.valueOf((char)117));
182        MAP.put("966", Character.valueOf((char)102));
183        MAP.put("967", Character.valueOf((char)99));
184        MAP.put("9674", Character.valueOf((char)224));
185        MAP.put("968", Character.valueOf((char)121));
186        MAP.put("969", Character.valueOf((char)119));
187        MAP.put("977", Character.valueOf((char)74));
188        MAP.put("978", Character.valueOf((char)161));
189        MAP.put("981", Character.valueOf((char)106));
190        MAP.put("982", Character.valueOf((char)118));
191        MAP.put("9824", Character.valueOf((char)170));
192        MAP.put("9827", Character.valueOf((char)167));
193        MAP.put("9829", Character.valueOf((char)169));
194        MAP.put("9830", Character.valueOf((char)168));
195        MAP.put("Alpha", Character.valueOf((char)65));
196        MAP.put("Beta", Character.valueOf((char)66));
197        MAP.put("Chi", Character.valueOf((char)67));
198        MAP.put("Delta", Character.valueOf((char)68));
199        MAP.put("Epsilon", Character.valueOf((char)69));
200        MAP.put("Eta", Character.valueOf((char)72));
201        MAP.put("Gamma", Character.valueOf((char)71));
202        MAP.put("Iota", Character.valueOf((char)73));
203        MAP.put("Kappa", Character.valueOf((char)75));
204        MAP.put("Lambda", Character.valueOf((char)76));
205        MAP.put("Mu", Character.valueOf((char)77));
206        MAP.put("Nu", Character.valueOf((char)78));
207        MAP.put("Omega", Character.valueOf((char)87));
208        MAP.put("Omicron", Character.valueOf((char)79));
209        MAP.put("Phi", Character.valueOf((char)70));
210        MAP.put("Pi", Character.valueOf((char)80));
211        MAP.put("Prime", Character.valueOf((char)178));
212        MAP.put("Psi", Character.valueOf((char)89));
213        MAP.put("Rho", Character.valueOf((char)82));
214        MAP.put("Sigma", Character.valueOf((char)83));
215        MAP.put("Tau", Character.valueOf((char)84));
216        MAP.put("Theta", Character.valueOf((char)81));
217        MAP.put("Upsilon", Character.valueOf((char)85));
218        MAP.put("Xi", Character.valueOf((char)88));
219        MAP.put("Zeta", Character.valueOf((char)90));
220        MAP.put("alefsym", Character.valueOf((char)192));
221        MAP.put("alpha", Character.valueOf((char)97));
222        MAP.put("and", Character.valueOf((char)217));
223        MAP.put("ang", Character.valueOf((char)208));
224        MAP.put("asymp", Character.valueOf((char)187));
225        MAP.put("beta", Character.valueOf((char)98));
226        MAP.put("cap", Character.valueOf((char)199));
227        MAP.put("chi", Character.valueOf((char)99));
228        MAP.put("clubs", Character.valueOf((char)167));
229        MAP.put("cong", Character.valueOf((char)64));
230        MAP.put("copy", Character.valueOf((char)211));
231        MAP.put("crarr", Character.valueOf((char)191));
232        MAP.put("cup", Character.valueOf((char)200));
233        MAP.put("dArr", Character.valueOf((char)223));
234        MAP.put("darr", Character.valueOf((char)175));
235        MAP.put("delta", Character.valueOf((char)100));
236        MAP.put("diams", Character.valueOf((char)168));
237        MAP.put("divide", Character.valueOf((char)184));
238        MAP.put("empty", Character.valueOf((char)198));
239        MAP.put("epsilon", Character.valueOf((char)101));
240        MAP.put("equiv", Character.valueOf((char)186));
241        MAP.put("eta", Character.valueOf((char)104));
242        MAP.put("euro", Character.valueOf((char)240));
243        MAP.put("exist", Character.valueOf((char)36));
244        MAP.put("forall", Character.valueOf((char)34));
245        MAP.put("frasl", Character.valueOf((char)164));
246        MAP.put("gamma", Character.valueOf((char)103));
247        MAP.put("ge", Character.valueOf((char)179));
248        MAP.put("hArr", Character.valueOf((char)219));
249        MAP.put("harr", Character.valueOf((char)171));
250        MAP.put("hearts", Character.valueOf((char)169));
251        MAP.put("hellip", Character.valueOf((char)188));
252        MAP.put("horizontal arrow extender", Character.valueOf((char)190));
253        MAP.put("image", Character.valueOf((char)193));
254        MAP.put("infin", Character.valueOf((char)165));
255        MAP.put("int", Character.valueOf((char)242));
256        MAP.put("iota", Character.valueOf((char)105));
257        MAP.put("isin", Character.valueOf((char)206));
258        MAP.put("kappa", Character.valueOf((char)107));
259        MAP.put("lArr", Character.valueOf((char)220));
260        MAP.put("lambda", Character.valueOf((char)108));
261        MAP.put("lang", Character.valueOf((char)225));
262        MAP.put("large brace extender", Character.valueOf((char)239));
263        MAP.put("large integral extender", Character.valueOf((char)244));
264        MAP.put("large left brace (bottom)", Character.valueOf((char)238));
265        MAP.put("large left brace (middle)", Character.valueOf((char)237));
266        MAP.put("large left brace (top)", Character.valueOf((char)236));
267        MAP.put("large left bracket (bottom)", Character.valueOf((char)235));
268        MAP.put("large left bracket (extender)", Character.valueOf((char)234));
269        MAP.put("large left bracket (top)", Character.valueOf((char)233));
270        MAP.put("large left parenthesis (bottom)", Character.valueOf((char)232));
271        MAP.put("large left parenthesis (extender)", Character.valueOf((char)231));
272        MAP.put("large left parenthesis (top)", Character.valueOf((char)230));
273        MAP.put("large right brace (bottom)", Character.valueOf((char)254));
274        MAP.put("large right brace (middle)", Character.valueOf((char)253));
275        MAP.put("large right brace (top)", Character.valueOf((char)252));
276        MAP.put("large right bracket (bottom)", Character.valueOf((char)251));
277        MAP.put("large right bracket (extender)", Character.valueOf((char)250));
278        MAP.put("large right bracket (top)", Character.valueOf((char)249));
279        MAP.put("large right parenthesis (bottom)", Character.valueOf((char)248));
280        MAP.put("large right parenthesis (extender)", Character.valueOf((char)247));
281        MAP.put("large right parenthesis (top)", Character.valueOf((char)246));
282        MAP.put("larr", Character.valueOf((char)172));
283        MAP.put("le", Character.valueOf((char)163));
284        MAP.put("lowast", Character.valueOf((char)42));
285        MAP.put("loz", Character.valueOf((char)224));
286        MAP.put("minus", Character.valueOf((char)45));
287        MAP.put("mu", Character.valueOf((char)109));
288        MAP.put("nabla", Character.valueOf((char)209));
289        MAP.put("ne", Character.valueOf((char)185));
290        MAP.put("not", Character.valueOf((char)216));
291        MAP.put("notin", Character.valueOf((char)207));
292        MAP.put("nsub", Character.valueOf((char)203));
293        MAP.put("nu", Character.valueOf((char)110));
294        MAP.put("omega", Character.valueOf((char)119));
295        MAP.put("omicron", Character.valueOf((char)111));
296        MAP.put("oplus", Character.valueOf((char)197));
297        MAP.put("or", Character.valueOf((char)218));
298        MAP.put("otimes", Character.valueOf((char)196));
299        MAP.put("part", Character.valueOf((char)182));
300        MAP.put("perp", Character.valueOf((char)94));
301        MAP.put("phi", Character.valueOf((char)102));
302        MAP.put("pi", Character.valueOf((char)112));
303        MAP.put("piv", Character.valueOf((char)118));
304        MAP.put("plusmn", Character.valueOf((char)177));
305        MAP.put("prime", Character.valueOf((char)162));
306        MAP.put("prod", Character.valueOf((char)213));
307        MAP.put("prop", Character.valueOf((char)181));
308        MAP.put("psi", Character.valueOf((char)121));
309        MAP.put("rArr", Character.valueOf((char)222));
310        MAP.put("radic", Character.valueOf((char)214));
311        MAP.put("radical extender", Character.valueOf((char)96));
312        MAP.put("rang", Character.valueOf((char)241));
313        MAP.put("rarr", Character.valueOf((char)174));
314        MAP.put("real", Character.valueOf((char)194));
315        MAP.put("reg", Character.valueOf((char)210));
316        MAP.put("rho", Character.valueOf((char)114));
317        MAP.put("sdot", Character.valueOf((char)215));
318        MAP.put("sigma", Character.valueOf((char)115));
319        MAP.put("sigmaf", Character.valueOf((char)86));
320        MAP.put("sim", Character.valueOf((char)126));
321        MAP.put("spades", Character.valueOf((char)170));
322        MAP.put("sub", Character.valueOf((char)204));
323        MAP.put("sube", Character.valueOf((char)205));
324        MAP.put("sum", Character.valueOf((char)229));
325        MAP.put("sup", Character.valueOf((char)201));
326        MAP.put("supe", Character.valueOf((char)202));
327        MAP.put("tau", Character.valueOf((char)116));
328        MAP.put("there4", Character.valueOf((char)92));
329        MAP.put("theta", Character.valueOf((char)113));
330        MAP.put("thetasym", Character.valueOf((char)74));
331        MAP.put("times", Character.valueOf((char)180));
332        MAP.put("trade", Character.valueOf((char)212));
333        MAP.put("uArr", Character.valueOf((char)221));
334        MAP.put("uarr", Character.valueOf((char)173));
335        MAP.put("upsih", Character.valueOf((char)161));
336        MAP.put("upsilon", Character.valueOf((char)117));
337        MAP.put("vertical arrow extender", Character.valueOf((char)189));
338        MAP.put("weierp", Character.valueOf((char)195));
339        MAP.put("xi", Character.valueOf((char)120));
340        MAP.put("zeta", Character.valueOf((char)122));
341    }
342
343    /**
344     * Gets a chunk with a symbol character.
345     * @param e a symbol value (see Entities class: alfa is greek alfa,...)
346     * @param font the font if the symbol isn't found (otherwise Font.SYMBOL)
347     * @return a Chunk
348     */
349    public static Chunk get(final String e, final Font font) {
350        char s = getCorrespondingSymbol(e);
351        if (s == (char)0) {
352            try {
353                return new Chunk(String.valueOf((char)Integer.parseInt(e)), font);
354            }
355            catch(Exception exception) {
356                return new Chunk(e, font);
357            }
358        }
359        Font symbol = new Font(FontFamily.SYMBOL, font.getSize(), font.getStyle(), font.getColor());
360        return new Chunk(String.valueOf(s), symbol);
361    }
362
363    /**
364     * Looks for the corresponding symbol in the font Symbol.
365     *
366     * @param   name    the name of the entity
367     * @return  the corresponding character in font Symbol
368     */
369    public static char getCorrespondingSymbol(final String name) {
370        Character symbol = MAP.get(name);
371        if (symbol == null) {
372            return (char)0;
373        }
374        return symbol.charValue();
375    }
376}