package org.apache.lucene.demo.html; /** * Copyright 2004, 2015 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.util.*; public class Entities { static final Hashtable<String, String> decoder = new Hashtable<>(300); static final String[] encoder = new String[0x100]; static final String decode(String entity) { if (entity.charAt(entity.length()-1) == ';') // remove trailing semicolon entity = entity.substring(0, entity.length()-1); if (entity.charAt(1) == '#') { int start = 2; int radix = 10; if (entity.charAt(2) == 'X' || entity.charAt(2) == 'x') { start++; radix = 16; } Character c = new Character((char)Integer.parseInt(entity.substring(start), radix)); return c.toString(); } else { String s = decoder.get(entity); if (s != null) return s; else return ""; //$NON-NLS-1$ } } public static final String encode(String s) { int length = s.length(); StringBuffer buffer = new StringBuffer(length * 2); for (int i = 0; i < length; i++) { char c = s.charAt(i); int j = c; if (j < 0x100 && encoder[j] != null) { buffer.append(encoder[j]); // have a named encoding buffer.append(';'); } else if (j < 0x80) { buffer.append(c); // use ASCII value } else { buffer.append("&#"); // use numeric encoding //$NON-NLS-1$ buffer.append((int)c); buffer.append(';'); } } return buffer.toString(); } static final void add(String entity, int value) { decoder.put(entity, (new Character((char)value)).toString()); if (value < 0x100) encoder[value] = entity; } static { add(" ", 160); //$NON-NLS-1$ add("¡", 161); //$NON-NLS-1$ add("¢", 162); //$NON-NLS-1$ add("£", 163); //$NON-NLS-1$ add("¤", 164); //$NON-NLS-1$ add("¥", 165); //$NON-NLS-1$ add("¦", 166); //$NON-NLS-1$ add("§", 167); //$NON-NLS-1$ add("¨", 168); //$NON-NLS-1$ add("©", 169); //$NON-NLS-1$ add("ª", 170); //$NON-NLS-1$ add("«", 171); //$NON-NLS-1$ add("¬", 172); //$NON-NLS-1$ add("­", 173); //$NON-NLS-1$ add("®", 174); //$NON-NLS-1$ add("¯", 175); //$NON-NLS-1$ add("°", 176); //$NON-NLS-1$ add("±", 177); //$NON-NLS-1$ add("²", 178); //$NON-NLS-1$ add("³", 179); //$NON-NLS-1$ add("´", 180); //$NON-NLS-1$ add("µ", 181); //$NON-NLS-1$ add("¶", 182); //$NON-NLS-1$ add("·", 183); //$NON-NLS-1$ add("¸", 184); //$NON-NLS-1$ add("¹", 185); //$NON-NLS-1$ add("º", 186); //$NON-NLS-1$ add("»", 187); //$NON-NLS-1$ add("¼", 188); //$NON-NLS-1$ add("½", 189); //$NON-NLS-1$ add("¾", 190); //$NON-NLS-1$ add("¿", 191); //$NON-NLS-1$ add("À", 192); //$NON-NLS-1$ add("Á", 193); //$NON-NLS-1$ add("Â", 194); //$NON-NLS-1$ add("Ã", 195); //$NON-NLS-1$ add("Ä", 196); //$NON-NLS-1$ add("Å", 197); //$NON-NLS-1$ add("Æ", 198); //$NON-NLS-1$ add("Ç", 199); //$NON-NLS-1$ add("È", 200); //$NON-NLS-1$ add("É", 201); //$NON-NLS-1$ add("Ê", 202); //$NON-NLS-1$ add("Ë", 203); //$NON-NLS-1$ add("Ì", 204); //$NON-NLS-1$ add("Í", 205); //$NON-NLS-1$ add("Î", 206); //$NON-NLS-1$ add("Ï", 207); //$NON-NLS-1$ add("Ð", 208); //$NON-NLS-1$ add("Ñ", 209); //$NON-NLS-1$ add("Ò", 210); //$NON-NLS-1$ add("Ó", 211); //$NON-NLS-1$ add("Ô", 212); //$NON-NLS-1$ add("Õ", 213); //$NON-NLS-1$ add("Ö", 214); //$NON-NLS-1$ add("×", 215); //$NON-NLS-1$ add("Ø", 216); //$NON-NLS-1$ add("Ù", 217); //$NON-NLS-1$ add("Ú", 218); //$NON-NLS-1$ add("Û", 219); //$NON-NLS-1$ add("Ü", 220); //$NON-NLS-1$ add("Ý", 221); //$NON-NLS-1$ add("Þ", 222); //$NON-NLS-1$ add("ß", 223); //$NON-NLS-1$ add("à", 224); //$NON-NLS-1$ add("á", 225); //$NON-NLS-1$ add("â", 226); //$NON-NLS-1$ add("ã", 227); //$NON-NLS-1$ add("ä", 228); //$NON-NLS-1$ add("å", 229); //$NON-NLS-1$ add("æ", 230); //$NON-NLS-1$ add("ç", 231); //$NON-NLS-1$ add("è", 232); //$NON-NLS-1$ add("é", 233); //$NON-NLS-1$ add("ê", 234); //$NON-NLS-1$ add("ë", 235); //$NON-NLS-1$ add("ì", 236); //$NON-NLS-1$ add("í", 237); //$NON-NLS-1$ add("î", 238); //$NON-NLS-1$ add("ï", 239); //$NON-NLS-1$ add("ð", 240); //$NON-NLS-1$ add("ñ", 241); //$NON-NLS-1$ add("ò", 242); //$NON-NLS-1$ add("ó", 243); //$NON-NLS-1$ add("ô", 244); //$NON-NLS-1$ add("õ", 245); //$NON-NLS-1$ add("ö", 246); //$NON-NLS-1$ add("÷", 247); //$NON-NLS-1$ add("ø", 248); //$NON-NLS-1$ add("ù", 249); //$NON-NLS-1$ add("ú", 250); //$NON-NLS-1$ add("û", 251); //$NON-NLS-1$ add("ü", 252); //$NON-NLS-1$ add("ý", 253); //$NON-NLS-1$ add("þ", 254); //$NON-NLS-1$ add("ÿ", 255); //$NON-NLS-1$ add("&fnof", 402); //$NON-NLS-1$ add("&Alpha", 913); //$NON-NLS-1$ add("&Beta", 914); //$NON-NLS-1$ add("&Gamma", 915); //$NON-NLS-1$ add("&Delta", 916); //$NON-NLS-1$ add("&Epsilon",917); //$NON-NLS-1$ add("&Zeta", 918); //$NON-NLS-1$ add("&Eta", 919); //$NON-NLS-1$ add("&Theta", 920); //$NON-NLS-1$ add("&Iota", 921); //$NON-NLS-1$ add("&Kappa", 922); //$NON-NLS-1$ add("&Lambda", 923); //$NON-NLS-1$ add("&Mu", 924); //$NON-NLS-1$ add("&Nu", 925); //$NON-NLS-1$ add("&Xi", 926); //$NON-NLS-1$ add("&Omicron",927); //$NON-NLS-1$ add("&Pi", 928); //$NON-NLS-1$ add("&Rho", 929); //$NON-NLS-1$ add("&Sigma", 931); //$NON-NLS-1$ add("&Tau", 932); //$NON-NLS-1$ add("&Upsilon",933); //$NON-NLS-1$ add("&Phi", 934); //$NON-NLS-1$ add("&Chi", 935); //$NON-NLS-1$ add("&Psi", 936); //$NON-NLS-1$ add("&Omega", 937); //$NON-NLS-1$ add("&alpha", 945); //$NON-NLS-1$ add("&beta", 946); //$NON-NLS-1$ add("&gamma", 947); //$NON-NLS-1$ add("&delta", 948); //$NON-NLS-1$ add("&epsilon",949); //$NON-NLS-1$ add("&zeta", 950); //$NON-NLS-1$ add("&eta", 951); //$NON-NLS-1$ add("&theta", 952); //$NON-NLS-1$ add("&iota", 953); //$NON-NLS-1$ add("&kappa", 954); //$NON-NLS-1$ add("&lambda", 955); //$NON-NLS-1$ add("&mu", 956); //$NON-NLS-1$ add("&nu", 957); //$NON-NLS-1$ add("&xi", 958); //$NON-NLS-1$ add("&omicron",959); //$NON-NLS-1$ add("&pi", 960); //$NON-NLS-1$ add("&rho", 961); //$NON-NLS-1$ add("&sigmaf", 962); //$NON-NLS-1$ add("&sigma", 963); //$NON-NLS-1$ add("&tau", 964); //$NON-NLS-1$ add("&upsilon",965); //$NON-NLS-1$ add("&phi", 966); //$NON-NLS-1$ add("&chi", 967); //$NON-NLS-1$ add("&psi", 968); //$NON-NLS-1$ add("&omega", 969); //$NON-NLS-1$ add("&thetasym",977); //$NON-NLS-1$ add("&upsih", 978); //$NON-NLS-1$ add("&piv", 982); //$NON-NLS-1$ add("&bull", 8226); //$NON-NLS-1$ add("&hellip", 8230); //$NON-NLS-1$ add("&prime", 8242); //$NON-NLS-1$ add("&Prime", 8243); //$NON-NLS-1$ add("&oline", 8254); //$NON-NLS-1$ add("&frasl", 8260); //$NON-NLS-1$ add("&weierp", 8472); //$NON-NLS-1$ add("&image", 8465); //$NON-NLS-1$ add("&real", 8476); //$NON-NLS-1$ add("&trade", 8482); //$NON-NLS-1$ add("&alefsym",8501); //$NON-NLS-1$ add("&larr", 8592); //$NON-NLS-1$ add("&uarr", 8593); //$NON-NLS-1$ add("&rarr", 8594); //$NON-NLS-1$ add("&darr", 8595); //$NON-NLS-1$ add("&harr", 8596); //$NON-NLS-1$ add("&crarr", 8629); //$NON-NLS-1$ add("&lArr", 8656); //$NON-NLS-1$ add("&uArr", 8657); //$NON-NLS-1$ add("&rArr", 8658); //$NON-NLS-1$ add("&dArr", 8659); //$NON-NLS-1$ add("&hArr", 8660); //$NON-NLS-1$ add("&forall", 8704); //$NON-NLS-1$ add("&part", 8706); //$NON-NLS-1$ add("&exist", 8707); //$NON-NLS-1$ add("&empty", 8709); //$NON-NLS-1$ add("&nabla", 8711); //$NON-NLS-1$ add("&isin", 8712); //$NON-NLS-1$ add("¬in", 8713); //$NON-NLS-1$ add("&ni", 8715); //$NON-NLS-1$ add("&prod", 8719); //$NON-NLS-1$ add("&sum", 8721); //$NON-NLS-1$ add("&minus", 8722); //$NON-NLS-1$ add("&lowast", 8727); //$NON-NLS-1$ add("&radic", 8730); //$NON-NLS-1$ add("&prop", 8733); //$NON-NLS-1$ add("&infin", 8734); //$NON-NLS-1$ add("&ang", 8736); //$NON-NLS-1$ add("&and", 8743); //$NON-NLS-1$ add("&or", 8744); //$NON-NLS-1$ add("&cap", 8745); //$NON-NLS-1$ add("&cup", 8746); //$NON-NLS-1$ add("&int", 8747); //$NON-NLS-1$ add("&there4", 8756); //$NON-NLS-1$ add("&sim", 8764); //$NON-NLS-1$ add("&cong", 8773); //$NON-NLS-1$ add("&asymp", 8776); //$NON-NLS-1$ add("&ne", 8800); //$NON-NLS-1$ add("&equiv", 8801); //$NON-NLS-1$ add("&le", 8804); //$NON-NLS-1$ add("&ge", 8805); //$NON-NLS-1$ add("&sub", 8834); //$NON-NLS-1$ add("&sup", 8835); //$NON-NLS-1$ add("&nsub", 8836); //$NON-NLS-1$ add("&sube", 8838); //$NON-NLS-1$ add("&supe", 8839); //$NON-NLS-1$ add("&oplus", 8853); //$NON-NLS-1$ add("&otimes", 8855); //$NON-NLS-1$ add("&perp", 8869); //$NON-NLS-1$ add("&sdot", 8901); //$NON-NLS-1$ add("&lceil", 8968); //$NON-NLS-1$ add("&rceil", 8969); //$NON-NLS-1$ add("&lfloor", 8970); //$NON-NLS-1$ add("&rfloor", 8971); //$NON-NLS-1$ add("&lang", 9001); //$NON-NLS-1$ add("&rang", 9002); //$NON-NLS-1$ add("&loz", 9674); //$NON-NLS-1$ add("&spades", 9824); //$NON-NLS-1$ add("&clubs", 9827); //$NON-NLS-1$ add("&hearts", 9829); //$NON-NLS-1$ add("&diams", 9830); //$NON-NLS-1$ add(""", 34); //$NON-NLS-1$ add("&", 38); //$NON-NLS-1$ add("<", 60); //$NON-NLS-1$ add(">", 62); //$NON-NLS-1$ add("&OElig", 338); //$NON-NLS-1$ add("&oelig", 339); //$NON-NLS-1$ add("&Scaron", 352); //$NON-NLS-1$ add("&scaron", 353); //$NON-NLS-1$ add("&Yuml", 376); //$NON-NLS-1$ add("&circ", 710); //$NON-NLS-1$ add("&tilde", 732); //$NON-NLS-1$ add("&ensp", 8194); //$NON-NLS-1$ add("&emsp", 8195); //$NON-NLS-1$ add("&thinsp", 8201); //$NON-NLS-1$ add("&zwnj", 8204); //$NON-NLS-1$ add("&zwj", 8205); //$NON-NLS-1$ add("&lrm", 8206); //$NON-NLS-1$ add("&rlm", 8207); //$NON-NLS-1$ add("&ndash", 8211); //$NON-NLS-1$ add("&mdash", 8212); //$NON-NLS-1$ add("&lsquo", 8216); //$NON-NLS-1$ add("&rsquo", 8217); //$NON-NLS-1$ add("&sbquo", 8218); //$NON-NLS-1$ add("&ldquo", 8220); //$NON-NLS-1$ add("&rdquo", 8221); //$NON-NLS-1$ add("&bdquo", 8222); //$NON-NLS-1$ add("&dagger", 8224); //$NON-NLS-1$ add("&Dagger", 8225); //$NON-NLS-1$ add("&permil", 8240); //$NON-NLS-1$ add("&lsaquo", 8249); //$NON-NLS-1$ add("&rsaquo", 8250); //$NON-NLS-1$ add("&euro", 8364); //$NON-NLS-1$ } }