00001 package org.apache.lucene.demo.html;
00002
00020 import java.util.HashMap;
00021 import java.util.Map;
00022
00023 public class Entities {
00024 static final Map<String, String> decoder = new HashMap<String, String>(300);
00025 static final String[] encoder = new String[0x100];
00026
00027 public static final String decode(String entity) {
00028 if (entity.charAt(entity.length()-1) == ';')
00029 entity = entity.substring(0, entity.length()-1);
00030 if (entity.charAt(1) == '#') {
00031 int start = 2;
00032 int radix = 10;
00033 if (entity.charAt(2) == 'X' || entity.charAt(2) == 'x') {
00034 start++;
00035 radix = 16;
00036 }
00037 Character c =
00038 new Character((char)Integer.parseInt(entity.substring(start), radix));
00039 return c.toString();
00040 } else {
00041 String s = (String)decoder.get(entity);
00042 if (s != null)
00043 return s;
00044 else return "";
00045 }
00046 }
00047
00048 public static final String encode(String s) {
00049 int length = s.length();
00050 StringBuffer buffer = new StringBuffer(length * 2);
00051 for (int i = 0; i < length; i++) {
00052 char c = s.charAt(i);
00053 int j = (int)c;
00054 if (j < 0x100 && encoder[j] != null) {
00055 buffer.append(encoder[j]);
00056 buffer.append(';');
00057 } else if (j < 0x80) {
00058 buffer.append(c);
00059 } else {
00060 buffer.append("&#");
00061 buffer.append((int)c);
00062 buffer.append(';');
00063 }
00064 }
00065 return buffer.toString();
00066 }
00067
00068 static final void add(String entity, int value) {
00069 decoder.put(entity, (new Character((char)value)).toString());
00070 if (value < 0x100)
00071 encoder[value] = entity;
00072 }
00073
00074 static {
00075 add(" ", 160);
00076 add("¡", 161);
00077 add("¢", 162);
00078 add("£", 163);
00079 add("¤", 164);
00080 add("¥", 165);
00081 add("¦", 166);
00082 add("§", 167);
00083 add("¨", 168);
00084 add("©", 169);
00085 add("ª", 170);
00086 add("«", 171);
00087 add("¬", 172);
00088 add("­", 173);
00089 add("®", 174);
00090 add("¯", 175);
00091 add("°", 176);
00092 add("±", 177);
00093 add("²", 178);
00094 add("³", 179);
00095 add("´", 180);
00096 add("µ", 181);
00097 add("¶", 182);
00098 add("·", 183);
00099 add("¸", 184);
00100 add("¹", 185);
00101 add("º", 186);
00102 add("»", 187);
00103 add("¼", 188);
00104 add("½", 189);
00105 add("¾", 190);
00106 add("¿", 191);
00107 add("À", 192);
00108 add("Á", 193);
00109 add("Â", 194);
00110 add("Ã", 195);
00111 add("Ä", 196);
00112 add("Å", 197);
00113 add("Æ", 198);
00114 add("Ç", 199);
00115 add("È", 200);
00116 add("É", 201);
00117 add("Ê", 202);
00118 add("Ë", 203);
00119 add("Ì", 204);
00120 add("Í", 205);
00121 add("Î", 206);
00122 add("Ï", 207);
00123 add("Ð", 208);
00124 add("Ñ", 209);
00125 add("Ò", 210);
00126 add("Ó", 211);
00127 add("Ô", 212);
00128 add("Õ", 213);
00129 add("Ö", 214);
00130 add("×", 215);
00131 add("Ø", 216);
00132 add("Ù", 217);
00133 add("Ú", 218);
00134 add("Û", 219);
00135 add("Ü", 220);
00136 add("Ý", 221);
00137 add("Þ", 222);
00138 add("ß", 223);
00139 add("à", 224);
00140 add("á", 225);
00141 add("â", 226);
00142 add("ã", 227);
00143 add("ä", 228);
00144 add("å", 229);
00145 add("æ", 230);
00146 add("ç", 231);
00147 add("è", 232);
00148 add("é", 233);
00149 add("ê", 234);
00150 add("ë", 235);
00151 add("ì", 236);
00152 add("í", 237);
00153 add("î", 238);
00154 add("ï", 239);
00155 add("ð", 240);
00156 add("ñ", 241);
00157 add("ò", 242);
00158 add("ó", 243);
00159 add("ô", 244);
00160 add("õ", 245);
00161 add("ö", 246);
00162 add("÷", 247);
00163 add("ø", 248);
00164 add("ù", 249);
00165 add("ú", 250);
00166 add("û", 251);
00167 add("ü", 252);
00168 add("ý", 253);
00169 add("þ", 254);
00170 add("ÿ", 255);
00171 add("&fnof", 402);
00172 add("&Alpha", 913);
00173 add("&Beta", 914);
00174 add("&Gamma", 915);
00175 add("&Delta", 916);
00176 add("&Epsilon",917);
00177 add("&Zeta", 918);
00178 add("&Eta", 919);
00179 add("&Theta", 920);
00180 add("&Iota", 921);
00181 add("&Kappa", 922);
00182 add("&Lambda", 923);
00183 add("&Mu", 924);
00184 add("&Nu", 925);
00185 add("&Xi", 926);
00186 add("&Omicron",927);
00187 add("&Pi", 928);
00188 add("&Rho", 929);
00189 add("&Sigma", 931);
00190 add("&Tau", 932);
00191 add("&Upsilon",933);
00192 add("&Phi", 934);
00193 add("&Chi", 935);
00194 add("&Psi", 936);
00195 add("&Omega", 937);
00196 add("&alpha", 945);
00197 add("&beta", 946);
00198 add("&gamma", 947);
00199 add("&delta", 948);
00200 add("&epsilon",949);
00201 add("&zeta", 950);
00202 add("&eta", 951);
00203 add("&theta", 952);
00204 add("&iota", 953);
00205 add("&kappa", 954);
00206 add("&lambda", 955);
00207 add("&mu", 956);
00208 add("&nu", 957);
00209 add("&xi", 958);
00210 add("&omicron",959);
00211 add("&pi", 960);
00212 add("&rho", 961);
00213 add("&sigmaf", 962);
00214 add("&sigma", 963);
00215 add("&tau", 964);
00216 add("&upsilon",965);
00217 add("&phi", 966);
00218 add("&chi", 967);
00219 add("&psi", 968);
00220 add("&omega", 969);
00221 add("&thetasym",977);
00222 add("&upsih", 978);
00223 add("&piv", 982);
00224 add("&bull", 8226);
00225 add("&hellip", 8230);
00226 add("&prime", 8242);
00227 add("&Prime", 8243);
00228 add("&oline", 8254);
00229 add("&frasl", 8260);
00230 add("&weierp", 8472);
00231 add("&image", 8465);
00232 add("&real", 8476);
00233 add("&trade", 8482);
00234 add("&alefsym",8501);
00235 add("&larr", 8592);
00236 add("&uarr", 8593);
00237 add("&rarr", 8594);
00238 add("&darr", 8595);
00239 add("&harr", 8596);
00240 add("&crarr", 8629);
00241 add("&lArr", 8656);
00242 add("&uArr", 8657);
00243 add("&rArr", 8658);
00244 add("&dArr", 8659);
00245 add("&hArr", 8660);
00246 add("&forall", 8704);
00247 add("&part", 8706);
00248 add("&exist", 8707);
00249 add("&empty", 8709);
00250 add("&nabla", 8711);
00251 add("&isin", 8712);
00252 add("¬in", 8713);
00253 add("&ni", 8715);
00254 add("&prod", 8719);
00255 add("&sum", 8721);
00256 add("&minus", 8722);
00257 add("&lowast", 8727);
00258 add("&radic", 8730);
00259 add("&prop", 8733);
00260 add("&infin", 8734);
00261 add("&ang", 8736);
00262 add("&and", 8743);
00263 add("&or", 8744);
00264 add("&cap", 8745);
00265 add("&cup", 8746);
00266 add("&int", 8747);
00267 add("&there4", 8756);
00268 add("&sim", 8764);
00269 add("&cong", 8773);
00270 add("&asymp", 8776);
00271 add("&ne", 8800);
00272 add("&equiv", 8801);
00273 add("&le", 8804);
00274 add("&ge", 8805);
00275 add("&sub", 8834);
00276 add("&sup", 8835);
00277 add("&nsub", 8836);
00278 add("&sube", 8838);
00279 add("&supe", 8839);
00280 add("&oplus", 8853);
00281 add("&otimes", 8855);
00282 add("&perp", 8869);
00283 add("&sdot", 8901);
00284 add("&lceil", 8968);
00285 add("&rceil", 8969);
00286 add("&lfloor", 8970);
00287 add("&rfloor", 8971);
00288 add("&lang", 9001);
00289 add("&rang", 9002);
00290 add("&loz", 9674);
00291 add("&spades", 9824);
00292 add("&clubs", 9827);
00293 add("&hearts", 9829);
00294 add("&diams", 9830);
00295 add(""", 34);
00296 add("&", 38);
00297 add("<", 60);
00298 add(">", 62);
00299 add("&OElig", 338);
00300 add("&oelig", 339);
00301 add("&Scaron", 352);
00302 add("&scaron", 353);
00303 add("&Yuml", 376);
00304 add("&circ", 710);
00305 add("&tilde", 732);
00306 add("&ensp", 8194);
00307 add("&emsp", 8195);
00308 add("&thinsp", 8201);
00309 add("&zwnj", 8204);
00310 add("&zwj", 8205);
00311 add("&lrm", 8206);
00312 add("&rlm", 8207);
00313 add("&ndash", 8211);
00314 add("&mdash", 8212);
00315 add("&lsquo", 8216);
00316 add("&rsquo", 8217);
00317 add("&sbquo", 8218);
00318 add("&ldquo", 8220);
00319 add("&rdquo", 8221);
00320 add("&bdquo", 8222);
00321 add("&dagger", 8224);
00322 add("&Dagger", 8225);
00323 add("&permil", 8240);
00324 add("&lsaquo", 8249);
00325 add("&rsaquo", 8250);
00326 add("&euro", 8364);
00327
00328 }
00329 }