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}