2 * @(#)EntityTable.java 1.11 2000/08/16
12 * (c) 1998-2000 (W3C) MIT, INRIA, Keio University
13 * See Tidy.java for the copyright notice.
14 * Derived from <a href="http://www.w3.org/People/Raggett/tidy">
15 * HTML Tidy Release 4 Aug 2000</a>
17 * @author Dave Raggett <dsr@w3.org>
18 * @author Andy Quick <ac.quick@sympatico.ca> (translation to Java)
19 * @version 1.0, 1999/05/22
20 * @version 1.0.1, 1999/05/29
21 * @version 1.1, 1999/06/18 Java Bean
22 * @version 1.2, 1999/07/10 Tidy Release 7 Jul 1999
23 * @version 1.3, 1999/07/30 Tidy Release 26 Jul 1999
24 * @version 1.4, 1999/09/04 DOM support
25 * @version 1.5, 1999/10/23 Tidy Release 27 Sep 1999
26 * @version 1.6, 1999/11/01 Tidy Release 22 Oct 1999
27 * @version 1.7, 1999/12/06 Tidy Release 30 Nov 1999
28 * @version 1.8, 2000/01/22 Tidy Release 13 Jan 2000
29 * @version 1.9, 2000/06/03 Tidy Release 30 Apr 2000
30 * @version 1.10, 2000/07/22 Tidy Release 8 Jul 2000
31 * @version 1.11, 2000/08/16 Tidy Release 4 Aug 2000
34 import java.util.Hashtable;
35 import java.util.Enumeration;
37 public class EntityTable {
43 public Entity lookup( String name )
45 return (Entity)entityHashtable.get( name );
48 public Entity install( String name, short code )
50 Entity ent = lookup( name );
52 ent = new Entity( name, code );
53 entityHashtable.put( name, ent );
60 public Entity install( Entity ent )
62 return (Entity)entityHashtable.put( ent.name, ent );
65 /* entity starting with "&" returns zero on error */
66 public short entityCode( String name )
70 if (name.length() <= 1)
73 /* numeric entitity: name = "&#" followed by number */
74 if ( name.charAt(1) == '#' ) {
75 c = 0; /* zero on missing/bad number */
77 /* 'x' prefix denotes hexadecimal number format */
79 if (name.length() >= 4 && name.charAt(2) == 'x') {
80 c = Integer.parseInt( name.substring(3), 16 );
81 } else if (name.length() >= 3) {
82 c = Integer.parseInt( name.substring(2) );
85 catch ( NumberFormatException e ) {}
90 /* Named entity: name ="&" followed by a name */
91 Entity ent = lookup( name.substring(1) );
96 return 0; /* zero signifies unknown entity name */
99 public String entityName( short code )
103 Enumeration en = entityHashtable.elements();
104 while ( en.hasMoreElements() ) {
105 ent = (Entity)en.nextElement();
106 if ( ent.code == code ) {
114 private Hashtable entityHashtable = new Hashtable();
116 private static EntityTable defaultEntityTable = null;
118 private static Entity[] entities = {
120 new Entity( "nbsp", 160 ),
121 new Entity( "iexcl", 161 ),
122 new Entity( "cent", 162 ),
123 new Entity( "pound", 163 ),
124 new Entity( "curren", 164 ),
125 new Entity( "yen", 165 ),
126 new Entity( "brvbar", 166 ),
127 new Entity( "sect", 167 ),
128 new Entity( "uml", 168 ),
129 new Entity( "copy", 169 ),
130 new Entity( "ordf", 170 ),
131 new Entity( "laquo", 171 ),
132 new Entity( "not", 172 ),
133 new Entity( "shy", 173 ),
134 new Entity( "reg", 174 ),
135 new Entity( "macr", 175 ),
136 new Entity( "deg", 176 ),
137 new Entity( "plusmn", 177 ),
138 new Entity( "sup2", 178 ),
139 new Entity( "sup3", 179 ),
140 new Entity( "acute", 180 ),
141 new Entity( "micro", 181 ),
142 new Entity( "para", 182 ),
143 new Entity( "middot", 183 ),
144 new Entity( "cedil", 184 ),
145 new Entity( "sup1", 185 ),
146 new Entity( "ordm", 186 ),
147 new Entity( "raquo", 187 ),
148 new Entity( "frac14", 188 ),
149 new Entity( "frac12", 189 ),
150 new Entity( "frac34", 190 ),
151 new Entity( "iquest", 191 ),
152 new Entity( "Agrave", 192 ),
153 new Entity( "Aacute", 193 ),
154 new Entity( "Acirc", 194 ),
155 new Entity( "Atilde", 195 ),
156 new Entity( "Auml", 196 ),
157 new Entity( "Aring", 197 ),
158 new Entity( "AElig", 198 ),
159 new Entity( "Ccedil", 199 ),
160 new Entity( "Egrave", 200 ),
161 new Entity( "Eacute", 201 ),
162 new Entity( "Ecirc", 202 ),
163 new Entity( "Euml", 203 ),
164 new Entity( "Igrave", 204 ),
165 new Entity( "Iacute", 205 ),
166 new Entity( "Icirc", 206 ),
167 new Entity( "Iuml", 207 ),
168 new Entity( "ETH", 208 ),
169 new Entity( "Ntilde", 209 ),
170 new Entity( "Ograve", 210 ),
171 new Entity( "Oacute", 211 ),
172 new Entity( "Ocirc", 212 ),
173 new Entity( "Otilde", 213 ),
174 new Entity( "Ouml", 214 ),
175 new Entity( "times", 215 ),
176 new Entity( "Oslash", 216 ),
177 new Entity( "Ugrave", 217 ),
178 new Entity( "Uacute", 218 ),
179 new Entity( "Ucirc", 219 ),
180 new Entity( "Uuml", 220 ),
181 new Entity( "Yacute", 221 ),
182 new Entity( "THORN", 222 ),
183 new Entity( "szlig", 223 ),
184 new Entity( "agrave", 224 ),
185 new Entity( "aacute", 225 ),
186 new Entity( "acirc", 226 ),
187 new Entity( "atilde", 227 ),
188 new Entity( "auml", 228 ),
189 new Entity( "aring", 229 ),
190 new Entity( "aelig", 230 ),
191 new Entity( "ccedil", 231 ),
192 new Entity( "egrave", 232 ),
193 new Entity( "eacute", 233 ),
194 new Entity( "ecirc", 234 ),
195 new Entity( "euml", 235 ),
196 new Entity( "igrave", 236 ),
197 new Entity( "iacute", 237 ),
198 new Entity( "icirc", 238 ),
199 new Entity( "iuml", 239 ),
200 new Entity( "eth", 240 ),
201 new Entity( "ntilde", 241 ),
202 new Entity( "ograve", 242 ),
203 new Entity( "oacute", 243 ),
204 new Entity( "ocirc", 244 ),
205 new Entity( "otilde", 245 ),
206 new Entity( "ouml", 246 ),
207 new Entity( "divide", 247 ),
208 new Entity( "oslash", 248 ),
209 new Entity( "ugrave", 249 ),
210 new Entity( "uacute", 250 ),
211 new Entity( "ucirc", 251 ),
212 new Entity( "uuml", 252 ),
213 new Entity( "yacute", 253 ),
214 new Entity( "thorn", 254 ),
215 new Entity( "yuml", 255 ),
216 new Entity( "fnof", 402 ),
217 new Entity( "Alpha", 913 ),
218 new Entity( "Beta", 914 ),
219 new Entity( "Gamma", 915 ),
220 new Entity( "Delta", 916 ),
221 new Entity( "Epsilon", 917 ),
222 new Entity( "Zeta", 918 ),
223 new Entity( "Eta", 919 ),
224 new Entity( "Theta", 920 ),
225 new Entity( "Iota", 921 ),
226 new Entity( "Kappa", 922 ),
227 new Entity( "Lambda", 923 ),
228 new Entity( "Mu", 924 ),
229 new Entity( "Nu", 925 ),
230 new Entity( "Xi", 926 ),
231 new Entity( "Omicron", 927 ),
232 new Entity( "Pi", 928 ),
233 new Entity( "Rho", 929 ),
234 new Entity( "Sigma", 931 ),
235 new Entity( "Tau", 932 ),
236 new Entity( "Upsilon", 933 ),
237 new Entity( "Phi", 934 ),
238 new Entity( "Chi", 935 ),
239 new Entity( "Psi", 936 ),
240 new Entity( "Omega", 937 ),
241 new Entity( "alpha", 945 ),
242 new Entity( "beta", 946 ),
243 new Entity( "gamma", 947 ),
244 new Entity( "delta", 948 ),
245 new Entity( "epsilon", 949 ),
246 new Entity( "zeta", 950 ),
247 new Entity( "eta", 951 ),
248 new Entity( "theta", 952 ),
249 new Entity( "iota", 953 ),
250 new Entity( "kappa", 954 ),
251 new Entity( "lambda", 955 ),
252 new Entity( "mu", 956 ),
253 new Entity( "nu", 957 ),
254 new Entity( "xi", 958 ),
255 new Entity( "omicron", 959 ),
256 new Entity( "pi", 960 ),
257 new Entity( "rho", 961 ),
258 new Entity( "sigmaf", 962 ),
259 new Entity( "sigma", 963 ),
260 new Entity( "tau", 964 ),
261 new Entity( "upsilon", 965 ),
262 new Entity( "phi", 966 ),
263 new Entity( "chi", 967 ),
264 new Entity( "psi", 968 ),
265 new Entity( "omega", 969 ),
266 new Entity( "thetasym", 977 ),
267 new Entity( "upsih", 978 ),
268 new Entity( "piv", 982 ),
269 new Entity( "bull", 8226 ),
270 new Entity( "hellip", 8230 ),
271 new Entity( "prime", 8242 ),
272 new Entity( "Prime", 8243 ),
273 new Entity( "oline", 8254 ),
274 new Entity( "frasl", 8260 ),
275 new Entity( "weierp", 8472 ),
276 new Entity( "image", 8465 ),
277 new Entity( "real", 8476 ),
278 new Entity( "trade", 8482 ),
279 new Entity( "alefsym", 8501 ),
280 new Entity( "larr", 8592 ),
281 new Entity( "uarr", 8593 ),
282 new Entity( "rarr", 8594 ),
283 new Entity( "darr", 8595 ),
284 new Entity( "harr", 8596 ),
285 new Entity( "crarr", 8629 ),
286 new Entity( "lArr", 8656 ),
287 new Entity( "uArr", 8657 ),
288 new Entity( "rArr", 8658 ),
289 new Entity( "dArr", 8659 ),
290 new Entity( "hArr", 8660 ),
291 new Entity( "forall", 8704 ),
292 new Entity( "part", 8706 ),
293 new Entity( "exist", 8707 ),
294 new Entity( "empty", 8709 ),
295 new Entity( "nabla", 8711 ),
296 new Entity( "isin", 8712 ),
297 new Entity( "notin", 8713 ),
298 new Entity( "ni", 8715 ),
299 new Entity( "prod", 8719 ),
300 new Entity( "sum", 8721 ),
301 new Entity( "minus", 8722 ),
302 new Entity( "lowast", 8727 ),
303 new Entity( "radic", 8730 ),
304 new Entity( "prop", 8733 ),
305 new Entity( "infin", 8734 ),
306 new Entity( "ang", 8736 ),
307 new Entity( "and", 8743 ),
308 new Entity( "or", 8744 ),
309 new Entity( "cap", 8745 ),
310 new Entity( "cup", 8746 ),
311 new Entity( "int", 8747 ),
312 new Entity( "there4", 8756 ),
313 new Entity( "sim", 8764 ),
314 new Entity( "cong", 8773 ),
315 new Entity( "asymp", 8776 ),
316 new Entity( "ne", 8800 ),
317 new Entity( "equiv", 8801 ),
318 new Entity( "le", 8804 ),
319 new Entity( "ge", 8805 ),
320 new Entity( "sub", 8834 ),
321 new Entity( "sup", 8835 ),
322 new Entity( "nsub", 8836 ),
323 new Entity( "sube", 8838 ),
324 new Entity( "supe", 8839 ),
325 new Entity( "oplus", 8853 ),
326 new Entity( "otimes", 8855 ),
327 new Entity( "perp", 8869 ),
328 new Entity( "sdot", 8901 ),
329 new Entity( "lceil", 8968 ),
330 new Entity( "rceil", 8969 ),
331 new Entity( "lfloor", 8970 ),
332 new Entity( "rfloor", 8971 ),
333 new Entity( "lang", 9001 ),
334 new Entity( "rang", 9002 ),
335 new Entity( "loz", 9674 ),
336 new Entity( "spades", 9824 ),
337 new Entity( "clubs", 9827 ),
338 new Entity( "hearts", 9829 ),
339 new Entity( "diams", 9830 ),
340 new Entity( "quot", 34 ),
341 new Entity( "amp", 38 ),
342 new Entity( "lt", 60 ),
343 new Entity( "gt", 62 ),
344 new Entity( "OElig", 338 ),
345 new Entity( "oelig", 339 ),
346 new Entity( "Scaron", 352 ),
347 new Entity( "scaron", 353 ),
348 new Entity( "Yuml", 376 ),
349 new Entity( "circ", 710 ),
350 new Entity( "tilde", 732 ),
351 new Entity( "ensp", 8194 ),
352 new Entity( "emsp", 8195 ),
353 new Entity( "thinsp", 8201 ),
354 new Entity( "zwnj", 8204 ),
355 new Entity( "zwj", 8205 ),
356 new Entity( "lrm", 8206 ),
357 new Entity( "rlm", 8207 ),
358 new Entity( "ndash", 8211 ),
359 new Entity( "mdash", 8212 ),
360 new Entity( "lsquo", 8216 ),
361 new Entity( "rsquo", 8217 ),
362 new Entity( "sbquo", 8218 ),
363 new Entity( "ldquo", 8220 ),
364 new Entity( "rdquo", 8221 ),
365 new Entity( "bdquo", 8222 ),
366 new Entity( "dagger", 8224 ),
367 new Entity( "Dagger", 8225 ),
368 new Entity( "permil", 8240 ),
369 new Entity( "lsaquo", 8249 ),
370 new Entity( "rsaquo", 8250 ),
371 new Entity( "euro", 8364 )
375 public static EntityTable getDefaultEntityTable()
377 if ( defaultEntityTable == null ) {
378 defaultEntityTable = new EntityTable();
379 for ( int i = 0; i < entities.length; i++ ) {
380 defaultEntityTable.install( entities[i] );
383 return defaultEntityTable;