001: package vqwiki.utils.lucene;
002:
003: /* ====================================================================
004: * The Apache Software License, Version 1.1
005: *
006: * Copyright (c) 2001 The Apache Software Foundation. All rights
007: * reserved.
008: *
009: * Redistribution and use in source and binary forms, with or without
010: * modification, are permitted provided that the following conditions
011: * are met:
012: *
013: * 1. Redistributions of source code must retain the above copyright
014: * notice, this list of conditions and the following disclaimer.
015: *
016: * 2. Redistributions in binary form must reproduce the above copyright
017: * notice, this list of conditions and the following disclaimer in
018: * the documentation and/or other materials provided with the
019: * distribution.
020: *
021: * 3. The end-user documentation included with the redistribution,
022: * if any, must include the following acknowledgment:
023: * "This product includes software developed by the
024: * Apache Software Foundation (http://www.apache.org/)."
025: * Alternately, this acknowledgment may appear in the software itself,
026: * if and wherever such third-party acknowledgments normally appear.
027: *
028: * 4. The names "Apache" and "Apache Software Foundation" and
029: * "Apache Lucene" must not be used to endorse or promote products
030: * derived from this software without prior written permission. For
031: * written permission, please contact apache@apache.org.
032: *
033: * 5. Products derived from this software may not be called "Apache",
034: * "Apache Lucene", nor may "Apache" appear in their name, without
035: * prior written permission of the Apache Software Foundation.
036: *
037: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
038: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
039: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
040: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
041: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
042: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
043: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
044: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
045: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
046: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
047: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
048: * SUCH DAMAGE.
049: * ====================================================================
050: *
051: * This software consists of voluntary contributions made by many
052: * individuals on behalf of the Apache Software Foundation. For more
053: * information on the Apache Software Foundation, please see
054: * <http://www.apache.org/>.
055: */
056:
057: import java.util.Hashtable;
058:
059: /**
060: * TODO: Document this class.
061: *
062: * @version $Id: Entities.java 234 2003-04-15 23:11:06Z garethc $
063: */
064: public class Entities {
065: /**
066: * TODO: Document this field.
067: */
068: final static Hashtable decoder = new Hashtable(300);
069: /**
070: * TODO: Document this field.
071: */
072: final static String[] encoder = new String[0x100];
073:
074: static {
075: add(" ", 160);
076: add("¡", 161);
077: add("¢", 162);
078: add("£", 163);
079: add("¤", 164);
080: add("¥", 165);
081: add("¦", 166);
082: add("§", 167);
083: add("¨", 168);
084: add("©", 169);
085: add("ª", 170);
086: add("«", 171);
087: add("¬", 172);
088: add("­", 173);
089: add("®", 174);
090: add("¯", 175);
091: add("°", 176);
092: add("±", 177);
093: add("²", 178);
094: add("³", 179);
095: add("´", 180);
096: add("µ", 181);
097: add("¶", 182);
098: add("·", 183);
099: add("¸", 184);
100: add("¹", 185);
101: add("º", 186);
102: add("»", 187);
103: add("¼", 188);
104: add("½", 189);
105: add("¾", 190);
106: add("¿", 191);
107: add("À", 192);
108: add("Á", 193);
109: add("Â", 194);
110: add("Ã", 195);
111: add("Ä", 196);
112: add("Å", 197);
113: add("Æ", 198);
114: add("Ç", 199);
115: add("È", 200);
116: add("É", 201);
117: add("Ê", 202);
118: add("Ë", 203);
119: add("Ì", 204);
120: add("Í", 205);
121: add("Î", 206);
122: add("Ï", 207);
123: add("Ð", 208);
124: add("Ñ", 209);
125: add("Ò", 210);
126: add("Ó", 211);
127: add("Ô", 212);
128: add("Õ", 213);
129: add("Ö", 214);
130: add("×", 215);
131: add("Ø", 216);
132: add("Ù", 217);
133: add("Ú", 218);
134: add("Û", 219);
135: add("Ü", 220);
136: add("Ý", 221);
137: add("Þ", 222);
138: add("ß", 223);
139: add("à", 224);
140: add("á", 225);
141: add("â", 226);
142: add("ã", 227);
143: add("ä", 228);
144: add("å", 229);
145: add("æ", 230);
146: add("ç", 231);
147: add("è", 232);
148: add("é", 233);
149: add("ê", 234);
150: add("ë", 235);
151: add("ì", 236);
152: add("í", 237);
153: add("î", 238);
154: add("ï", 239);
155: add("ð", 240);
156: add("ñ", 241);
157: add("ò", 242);
158: add("ó", 243);
159: add("ô", 244);
160: add("õ", 245);
161: add("ö", 246);
162: add("÷", 247);
163: add("ø", 248);
164: add("ù", 249);
165: add("ú", 250);
166: add("û", 251);
167: add("ü", 252);
168: add("ý", 253);
169: add("þ", 254);
170: add("ÿ", 255);
171: add("&fnof", 402);
172: add("&Alpha", 913);
173: add("&Beta", 914);
174: add("&Gamma", 915);
175: add("&Delta", 916);
176: add("&Epsilon", 917);
177: add("&Zeta", 918);
178: add("&Eta", 919);
179: add("&Theta", 920);
180: add("&Iota", 921);
181: add("&Kappa", 922);
182: add("&Lambda", 923);
183: add("&Mu", 924);
184: add("&Nu", 925);
185: add("&Xi", 926);
186: add("&Omicron", 927);
187: add("&Pi", 928);
188: add("&Rho", 929);
189: add("&Sigma", 931);
190: add("&Tau", 932);
191: add("&Upsilon", 933);
192: add("&Phi", 934);
193: add("&Chi", 935);
194: add("&Psi", 936);
195: add("&Omega", 937);
196: add("&alpha", 945);
197: add("&beta", 946);
198: add("&gamma", 947);
199: add("&delta", 948);
200: add("&epsilon", 949);
201: add("&zeta", 950);
202: add("&eta", 951);
203: add("&theta", 952);
204: add("&iota", 953);
205: add("&kappa", 954);
206: add("&lambda", 955);
207: add("&mu", 956);
208: add("&nu", 957);
209: add("&xi", 958);
210: add("&omicron", 959);
211: add("&pi", 960);
212: add("&rho", 961);
213: add("&sigmaf", 962);
214: add("&sigma", 963);
215: add("&tau", 964);
216: add("&upsilon", 965);
217: add("&phi", 966);
218: add("&chi", 967);
219: add("&psi", 968);
220: add("&omega", 969);
221: add("&thetasym", 977);
222: add("&upsih", 978);
223: add("&piv", 982);
224: add("&bull", 8226);
225: add("&hellip", 8230);
226: add("&prime", 8242);
227: add("&Prime", 8243);
228: add("&oline", 8254);
229: add("&frasl", 8260);
230: add("&weierp", 8472);
231: add("&image", 8465);
232: add("&real", 8476);
233: add("&trade", 8482);
234: add("&alefsym", 8501);
235: add("&larr", 8592);
236: add("&uarr", 8593);
237: add("&rarr", 8594);
238: add("&darr", 8595);
239: add("&harr", 8596);
240: add("&crarr", 8629);
241: add("&lArr", 8656);
242: add("&uArr", 8657);
243: add("&rArr", 8658);
244: add("&dArr", 8659);
245: add("&hArr", 8660);
246: add("&forall", 8704);
247: add("&part", 8706);
248: add("&exist", 8707);
249: add("&empty", 8709);
250: add("&nabla", 8711);
251: add("&isin", 8712);
252: add("¬in", 8713);
253: add("&ni", 8715);
254: add("&prod", 8719);
255: add("&sum", 8721);
256: add("&minus", 8722);
257: add("&lowast", 8727);
258: add("&radic", 8730);
259: add("&prop", 8733);
260: add("&infin", 8734);
261: add("&ang", 8736);
262: add("&and", 8743);
263: add("&or", 8744);
264: add("&cap", 8745);
265: add("&cup", 8746);
266: add("&int", 8747);
267: add("&there4", 8756);
268: add("&sim", 8764);
269: add("&cong", 8773);
270: add("&asymp", 8776);
271: add("&ne", 8800);
272: add("&equiv", 8801);
273: add("&le", 8804);
274: add("&ge", 8805);
275: add("&sub", 8834);
276: add("&sup", 8835);
277: add("&nsub", 8836);
278: add("&sube", 8838);
279: add("&supe", 8839);
280: add("&oplus", 8853);
281: add("&otimes", 8855);
282: add("&perp", 8869);
283: add("&sdot", 8901);
284: add("&lceil", 8968);
285: add("&rceil", 8969);
286: add("&lfloor", 8970);
287: add("&rfloor", 8971);
288: add("&lang", 9001);
289: add("&rang", 9002);
290: add("&loz", 9674);
291: add("&spades", 9824);
292: add("&clubs", 9827);
293: add("&hearts", 9829);
294: add("&diams", 9830);
295: add(""", 34);
296: add("&", 38);
297: add("<", 60);
298: add(">", 62);
299: add("&OElig", 338);
300: add("&oelig", 339);
301: add("&Scaron", 352);
302: add("&scaron", 353);
303: add("&Yuml", 376);
304: add("&circ", 710);
305: add("&tilde", 732);
306: add("&ensp", 8194);
307: add("&emsp", 8195);
308: add("&thinsp", 8201);
309: add("&zwnj", 8204);
310: add("&zwj", 8205);
311: add("&lrm", 8206);
312: add("&rlm", 8207);
313: add("&ndash", 8211);
314: add("&mdash", 8212);
315: add("&lsquo", 8216);
316: add("&rsquo", 8217);
317: add("&sbquo", 8218);
318: add("&ldquo", 8220);
319: add("&rdquo", 8221);
320: add("&bdquo", 8222);
321: add("&dagger", 8224);
322: add("&Dagger", 8225);
323: add("&permil", 8240);
324: add("&lsaquo", 8249);
325: add("&rsaquo", 8250);
326: add("&euro", 8364);
327:
328: }
329:
330: /**
331: * TODO: Document this method.
332: *
333: * @param entity TODO: Document this parameter.
334: * @param value TODO: Document this parameter.
335: */
336: final static void add(String entity, int value) {
337: decoder.put(entity, (new Character((char) value)).toString());
338: if (value < 0x100) {
339: encoder[value] = entity;
340: }
341: }
342:
343: /**
344: * TODO: Document this method.
345: *
346: * @param entity TODO: Document this parameter.
347: * @return TODO: Document the result.
348: */
349: final static String decode(String entity) {
350: if (entity.charAt(entity.length() - 1) == ';') {
351: // remove trailing semicolon
352: entity = entity.substring(0, entity.length() - 1);
353: }
354: if (entity.charAt(1) == '#') {
355: int start = 2;
356: int radix = 10;
357: if (entity.charAt(2) == 'X' || entity.charAt(2) == 'x') {
358: start++;
359: radix = 16;
360: }
361: Character c = new Character((char) Integer.parseInt(entity
362: .substring(start), radix));
363: return c.toString();
364: } else {
365: String s = (String) decoder.get(entity);
366: if (s != null) {
367: return s;
368: } else {
369: return "";
370: }
371: }
372: }
373:
374: /**
375: * TODO: Document this method.
376: *
377: * @param s TODO: Document this parameter.
378: * @return TODO: Document the result.
379: */
380: public final static String encode(String s) {
381: int length = s.length();
382: StringBuffer buffer = new StringBuffer(length * 2);
383: for (int i = 0; i < length; i++) {
384: char c = s.charAt(i);
385: int j = (int) c;
386: if (j < 0x100 && encoder[j] != null) {
387: buffer.append(encoder[j]);
388: // have a named encoding
389: buffer.append(';');
390: } else if (j < 0x80) {
391: buffer.append(c);
392: // use ASCII value
393: } else {
394: buffer.append("&#");
395: // use numeric encoding
396: buffer.append((int) c);
397: buffer.append(';');
398: }
399: }
400: return buffer.toString();
401: }
402: }
|