KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > common > parsers > html > Entities


1 /*
2  * Copyright 2004 Blandware (http://www.blandware.com)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package com.blandware.atleap.common.parsers.html;
17
18 import java.util.Hashtable JavaDoc;
19
20 /**
21  * <p>Entities for HTMLParser</p>
22  * <p><a HREF="Entities.java.htm"><i>View Source</i></a></p>
23  * <p>This code is taken from Apache lucene demo</p>
24  * <p/>
25  *
26  * @author Andrey Grebnev <a HREF="mailto:andrey.grebnev@blandware.com">&lt;andrey.grebnev@blandware.com&gt;</a>
27  * @version $Revision: 1.2 $ $Date: 2005/08/02 14:53:29 $
28  */

29 public class Entities {
30     static final Hashtable JavaDoc decoder = new Hashtable JavaDoc(300);
31     static final String JavaDoc[] encoder = new String JavaDoc[0x100];
32
33     static final String JavaDoc decode(String JavaDoc entity) {
34         if ( entity.charAt(entity.length() - 1) == ';' ) // remove trailing semicolon
35
{
36             entity = entity.substring(0, entity.length() - 1);
37         }
38         if ( entity.charAt(1) == '#' ) {
39             int start = 2;
40             int radix = 10;
41             if ( entity.charAt(2) == 'X' || entity.charAt(2) == 'x' ) {
42                 start++;
43                 radix = 16;
44             }
45             Character JavaDoc c =
46                     new Character JavaDoc((char) Integer.parseInt(entity.substring(start), radix));
47             return c.toString();
48         } else {
49             String JavaDoc s = (String JavaDoc) decoder.get(entity);
50             if ( s != null ) {
51                 return s;
52             } else {
53                 return "";
54             }
55         }
56     }
57
58     /**
59      * Encodes all special symbols with HTML entities
60      *
61      * @param s string to encode
62      * @return encoded string
63      */

64     public static final String JavaDoc encode(String JavaDoc s) {
65         int length = s.length();
66         StringBuffer JavaDoc buffer = new StringBuffer JavaDoc(length * 2);
67         for ( int i = 0; i < length; i++ ) {
68             char c = s.charAt(i);
69             int j = (int) c;
70             if ( j < 0x100 && encoder[j] != null ) {
71                 buffer.append(encoder[j]); // have a named encoding
72
buffer.append(';');
73             } else if ( j < 0x80 ) {
74                 buffer.append(c); // use ASCII value
75
} else {
76                 buffer.append("&#"); // use numeric encoding
77
buffer.append((int) c);
78                 buffer.append(';');
79             }
80         }
81         return buffer.toString();
82     }
83
84     static final void add(String JavaDoc entity, int value) {
85         decoder.put(entity, (new Character JavaDoc((char) value)).toString());
86         if ( value < 0x100 ) {
87             encoder[value] = entity;
88         }
89     }
90
91     static {
92         add("&nbsp", 160);
93         add("&iexcl", 161);
94         add("&cent", 162);
95         add("&pound", 163);
96         add("&curren", 164);
97         add("&yen", 165);
98         add("&brvbar", 166);
99         add("&sect", 167);
100         add("&uml", 168);
101         add("&copy", 169);
102         add("&ordf", 170);
103         add("&laquo", 171);
104         add("&not", 172);
105         add("&shy", 173);
106         add("&reg", 174);
107         add("&macr", 175);
108         add("&deg", 176);
109         add("&plusmn", 177);
110         add("&sup2", 178);
111         add("&sup3", 179);
112         add("&acute", 180);
113         add("&micro", 181);
114         add("&para", 182);
115         add("&middot", 183);
116         add("&cedil", 184);
117         add("&sup1", 185);
118         add("&ordm", 186);
119         add("&raquo", 187);
120         add("&frac14", 188);
121         add("&frac12", 189);
122         add("&frac34", 190);
123         add("&iquest", 191);
124         add("&Agrave", 192);
125         add("&Aacute", 193);
126         add("&Acirc", 194);
127         add("&Atilde", 195);
128         add("&Auml", 196);
129         add("&Aring", 197);
130         add("&AElig", 198);
131         add("&Ccedil", 199);
132         add("&Egrave", 200);
133         add("&Eacute", 201);
134         add("&Ecirc", 202);
135         add("&Euml", 203);
136         add("&Igrave", 204);
137         add("&Iacute", 205);
138         add("&Icirc", 206);
139         add("&Iuml", 207);
140         add("&ETH", 208);
141         add("&Ntilde", 209);
142         add("&Ograve", 210);
143         add("&Oacute", 211);
144         add("&Ocirc", 212);
145         add("&Otilde", 213);
146         add("&Ouml", 214);
147         add("&times", 215);
148         add("&Oslash", 216);
149         add("&Ugrave", 217);
150         add("&Uacute", 218);
151         add("&Ucirc", 219);
152         add("&Uuml", 220);
153         add("&Yacute", 221);
154         add("&THORN", 222);
155         add("&szlig", 223);
156         add("&agrave", 224);
157         add("&aacute", 225);
158         add("&acirc", 226);
159         add("&atilde", 227);
160         add("&auml", 228);
161         add("&aring", 229);
162         add("&aelig", 230);
163         add("&ccedil", 231);
164         add("&egrave", 232);
165         add("&eacute", 233);
166         add("&ecirc", 234);
167         add("&euml", 235);
168         add("&igrave", 236);
169         add("&iacute", 237);
170         add("&icirc", 238);
171         add("&iuml", 239);
172         add("&eth", 240);
173         add("&ntilde", 241);
174         add("&ograve", 242);
175         add("&oacute", 243);
176         add("&ocirc", 244);
177         add("&otilde", 245);
178         add("&ouml", 246);
179         add("&divide", 247);
180         add("&oslash", 248);
181         add("&ugrave", 249);
182         add("&uacute", 250);
183         add("&ucirc", 251);
184         add("&uuml", 252);
185         add("&yacute", 253);
186         add("&thorn", 254);
187         add("&yuml", 255);
188         add("&fnof", 402);
189         add("&Alpha", 913);
190         add("&Beta", 914);
191         add("&Gamma", 915);
192         add("&Delta", 916);
193         add("&Epsilon", 917);
194         add("&Zeta", 918);
195         add("&Eta", 919);
196         add("&Theta", 920);
197         add("&Iota", 921);
198         add("&Kappa", 922);
199         add("&Lambda", 923);
200         add("&Mu", 924);
201         add("&Nu", 925);
202         add("&Xi", 926);
203         add("&Omicron", 927);
204         add("&Pi", 928);
205         add("&Rho", 929);
206         add("&Sigma", 931);
207         add("&Tau", 932);
208         add("&Upsilon", 933);
209         add("&Phi", 934);
210         add("&Chi", 935);
211         add("&Psi", 936);
212         add("&Omega", 937);
213         add("&alpha", 945);
214         add("&beta", 946);
215         add("&gamma", 947);
216         add("&delta", 948);
217         add("&epsilon", 949);
218         add("&zeta", 950);
219         add("&eta", 951);
220         add("&theta", 952);
221         add("&iota", 953);
222         add("&kappa", 954);
223         add("&lambda", 955);
224         add("&mu", 956);
225         add("&nu", 957);
226         add("&xi", 958);
227         add("&omicron", 959);
228         add("&pi", 960);
229         add("&rho", 961);
230         add("&sigmaf", 962);
231         add("&sigma", 963);
232         add("&tau", 964);
233         add("&upsilon", 965);
234         add("&phi", 966);
235         add("&chi", 967);
236         add("&psi", 968);
237         add("&omega", 969);
238         add("&thetasym", 977);
239         add("&upsih", 978);
240         add("&piv", 982);
241         add("&bull", 8226);
242         add("&hellip", 8230);
243         add("&prime", 8242);
244         add("&Prime", 8243);
245         add("&oline", 8254);
246         add("&frasl", 8260);
247         add("&weierp", 8472);
248         add("&image", 8465);
249         add("&real", 8476);
250         add("&trade", 8482);
251         add("&alefsym", 8501);
252         add("&larr", 8592);
253         add("&uarr", 8593);
254         add("&rarr", 8594);
255         add("&darr", 8595);
256         add("&harr", 8596);
257         add("&crarr", 8629);
258         add("&lArr", 8656);
259         add("&uArr", 8657);
260         add("&rArr", 8658);
261         add("&dArr", 8659);
262         add("&hArr", 8660);
263         add("&forall", 8704);
264         add("&part", 8706);
265         add("&exist", 8707);
266         add("&empty", 8709);
267         add("&nabla", 8711);
268         add("&isin", 8712);
269         add("&notin", 8713);
270         add("&ni", 8715);
271         add("&prod", 8719);
272         add("&sum", 8721);
273         add("&minus", 8722);
274         add("&lowast", 8727);
275         add("&radic", 8730);
276         add("&prop", 8733);
277         add("&infin", 8734);
278         add("&ang", 8736);
279         add("&and", 8743);
280         add("&or", 8744);
281         add("&cap", 8745);
282         add("&cup", 8746);
283         add("&int", 8747);
284         add("&there4", 8756);
285         add("&sim", 8764);
286         add("&cong", 8773);
287         add("&asymp", 8776);
288         add("&ne", 8800);
289         add("&equiv", 8801);
290         add("&le", 8804);
291         add("&ge", 8805);
292         add("&sub", 8834);
293         add("&sup", 8835);
294         add("&nsub", 8836);
295         add("&sube", 8838);
296         add("&supe", 8839);
297         add("&oplus", 8853);
298         add("&otimes", 8855);
299         add("&perp", 8869);
300         add("&sdot", 8901);
301         add("&lceil", 8968);
302         add("&rceil", 8969);
303         add("&lfloor", 8970);
304         add("&rfloor", 8971);
305         add("&lang", 9001);
306         add("&rang", 9002);
307         add("&loz", 9674);
308         add("&spades", 9824);
309         add("&clubs", 9827);
310         add("&hearts", 9829);
311         add("&diams", 9830);
312         add("&quot", 34);
313         add("&amp", 38);
314         add("&lt", 60);
315         add("&gt", 62);
316         add("&OElig", 338);
317         add("&oelig", 339);
318         add("&Scaron", 352);
319         add("&scaron", 353);
320         add("&Yuml", 376);
321         add("&circ", 710);
322         add("&tilde", 732);
323         add("&ensp", 8194);
324         add("&emsp", 8195);
325         add("&thinsp", 8201);
326         add("&zwnj", 8204);
327         add("&zwj", 8205);
328         add("&lrm", 8206);
329         add("&rlm", 8207);
330         add("&ndash", 8211);
331         add("&mdash", 8212);
332         add("&lsquo", 8216);
333         add("&rsquo", 8217);
334         add("&sbquo", 8218);
335         add("&ldquo", 8220);
336         add("&rdquo", 8221);
337         add("&bdquo", 8222);
338         add("&dagger", 8224);
339         add("&Dagger", 8225);
340         add("&permil", 8240);
341         add("&lsaquo", 8249);
342         add("&rsaquo", 8250);
343         add("&euro", 8364);
344
345     }
346 }
347
Popular Tags