Author: toad
Date: 2006-11-09 19:06:24 +0000 (Thu, 09 Nov 2006)
New Revision: 10843

Modified:
   trunk/freenet/src/freenet/support/HTMLEncoder.java
Log:
Apply UniquePerson's patch to HTMLEncoder. Should be a significant speedup to 
filtering HTML.

Modified: trunk/freenet/src/freenet/support/HTMLEncoder.java
===================================================================
--- trunk/freenet/src/freenet/support/HTMLEncoder.java  2006-11-09 18:55:46 UTC 
(rev 10842)
+++ trunk/freenet/src/freenet/support/HTMLEncoder.java  2006-11-09 19:06:24 UTC 
(rev 10843)
@@ -1,14 +1,16 @@
 package freenet.support;

 import java.util.HashMap;
+import java.util.Iterator;

 /**
  * Originally from com.websiteasp.ox pasckage.
  * 
  * @author avian (Yves Lempereur)
+ * @author Unique Person at w3nO30p4p9L81xKTXbCaQBOvUww (via Frost)
  */
 public class HTMLEncoder {
-       public final static HashMap charTable;
+       public final static CharTable charTable;

        public static String encode(String s) {
                int n = s.length();
@@ -17,268 +19,322 @@
                        char c = s.charAt(i);
                        if(Character.isLetterOrDigit(c)){ //only special 
characters need checking
                                sb.append(c);
-                       } else if(charTable.containsKey(new Character(c))){
-                               sb.append('&').append((String) 
charTable.get(new Character(c))).append(';');
-                       }else
+                       } else if(charTable.containsKey(c)){
+                sb.append('&');
+                sb.append(charTable.get(c));
+                sb.append(';');
+                       } else{
                                sb.append(c);
                }
+               }
                return sb.toString();
        }

        static {
-               charTable = new HashMap();
-               charTable.put(new Character((char)34), "quot");
-               charTable.put(new Character((char)38), "amp");
-               charTable.put(new Character((char)39), "#39");
-               charTable.put(new Character((char)60), "lt");
-               charTable.put(new Character((char)62), "gt");
-               charTable.put(new Character((char)160), "nbsp");
-               charTable.put(new Character((char)161), "iexcl");
-               charTable.put(new Character((char)162), "cent");
-               charTable.put(new Character((char)163), "pound");
-               charTable.put(new Character((char)164), "curren");
-               charTable.put(new Character((char)165), "yen");
-               charTable.put(new Character((char)166), "brvbar");
-               charTable.put(new Character((char)167), "sect");
-               charTable.put(new Character((char)168), "uml");
-               charTable.put(new Character((char)169), "copy");
-               charTable.put(new Character((char)170), "ordf");
-               charTable.put(new Character((char)171), "laquo");
-               charTable.put(new Character((char)172), "not");
-               charTable.put(new Character((char)173), "shy");
-               charTable.put(new Character((char)174), "reg");
-               charTable.put(new Character((char)175), "macr");
-               charTable.put(new Character((char)176), "deg");
-               charTable.put(new Character((char)177), "plusmn");
-               charTable.put(new Character((char)178), "sup2");
-               charTable.put(new Character((char)179), "sup3");
-               charTable.put(new Character((char)180), "acute");
-               charTable.put(new Character((char)181), "micro");
-               charTable.put(new Character((char)182), "para");
-               charTable.put(new Character((char)183), "middot");
-               charTable.put(new Character((char)184), "cedil");
-               charTable.put(new Character((char)185), "sup1");
-               charTable.put(new Character((char)186), "ordm");
-               charTable.put(new Character((char)187), "raquo");
-               charTable.put(new Character((char)188), "frac14");
-               charTable.put(new Character((char)189), "frac12");
-               charTable.put(new Character((char)190), "frac34");
-               charTable.put(new Character((char)191), "iquest");
-               charTable.put(new Character((char)192), "Agrave");
-               charTable.put(new Character((char)193), "Aacute");
-               charTable.put(new Character((char)194), "Acirc");
-               charTable.put(new Character((char)195), "Atilde");
-               charTable.put(new Character((char)196), "Auml");
-               charTable.put(new Character((char)197), "Aring");
-               charTable.put(new Character((char)198), "AElig");
-               charTable.put(new Character((char)199), "Ccedil");
-               charTable.put(new Character((char)200), "Egrave");
-               charTable.put(new Character((char)201), "Eacute");
-               charTable.put(new Character((char)202), "Ecirc");
-               charTable.put(new Character((char)203), "Euml");
-               charTable.put(new Character((char)204), "Igrave");
-               charTable.put(new Character((char)205), "Iacute");
-               charTable.put(new Character((char)206), "Icirc");
-               charTable.put(new Character((char)207), "Iuml");
-               charTable.put(new Character((char)208), "ETH");
-               charTable.put(new Character((char)209), "Ntilde");
-               charTable.put(new Character((char)210), "Ograve");
-               charTable.put(new Character((char)211), "Oacute");
-               charTable.put(new Character((char)212), "Ocirc");
-               charTable.put(new Character((char)213), "Otilde");
-               charTable.put(new Character((char)214), "Ouml");
-               charTable.put(new Character((char)215), "times");
-               charTable.put(new Character((char)216), "Oslash");
-               charTable.put(new Character((char)217), "Ugrave");
-               charTable.put(new Character((char)218), "Uacute");
-               charTable.put(new Character((char)219), "Ucirc");
-               charTable.put(new Character((char)220), "Uuml");
-               charTable.put(new Character((char)221), "Yacute");
-               charTable.put(new Character((char)222), "THORN");
-               charTable.put(new Character((char)223), "szlig");
-               charTable.put(new Character((char)224), "agrave");
-               charTable.put(new Character((char)225), "aacute");
-               charTable.put(new Character((char)226), "acirc");
-               charTable.put(new Character((char)227), "atilde");
-               charTable.put(new Character((char)228), "auml");
-               charTable.put(new Character((char)229), "aring");
-               charTable.put(new Character((char)230), "aelig");
-               charTable.put(new Character((char)231), "ccedil");
-               charTable.put(new Character((char)232), "egrave");
-               charTable.put(new Character((char)233), "eacute");
-               charTable.put(new Character((char)234), "ecirc");
-               charTable.put(new Character((char)235), "euml");
-               charTable.put(new Character((char)236), "igrave");
-               charTable.put(new Character((char)237), "iacute");
-               charTable.put(new Character((char)238), "icirc");
-               charTable.put(new Character((char)239), "iuml");
-               charTable.put(new Character((char)240), "eth");
-               charTable.put(new Character((char)241), "ntilde");
-               charTable.put(new Character((char)242), "ograve");
-               charTable.put(new Character((char)243), "oacute");
-               charTable.put(new Character((char)244), "ocirc");
-               charTable.put(new Character((char)245), "otilde");
-               charTable.put(new Character((char)246), "ouml");
-               charTable.put(new Character((char)247), "divide");
-               charTable.put(new Character((char)248), "oslash");
-               charTable.put(new Character((char)249), "ugrave");
-               charTable.put(new Character((char)250), "uacute");
-               charTable.put(new Character((char)251), "ucirc");
-               charTable.put(new Character((char)252), "uuml");
-               charTable.put(new Character((char)253), "yacute");
-               charTable.put(new Character((char)254), "thorn");
-               charTable.put(new Character((char)255), "yuml");
-               charTable.put(new Character((char)338), "OElig");
-               charTable.put(new Character((char)339), "oelig");
-               charTable.put(new Character((char)352), "Scaron");
-               charTable.put(new Character((char)353), "scaron");
-               charTable.put(new Character((char)376), "Yuml");
-               charTable.put(new Character((char)402), "fnof");
-               charTable.put(new Character((char)710), "circ");
-               charTable.put(new Character((char)732), "tilde");
-               charTable.put(new Character((char)913), "Alpha");
-               charTable.put(new Character((char)914), "Beta");
-               charTable.put(new Character((char)915), "Gamma");
-               charTable.put(new Character((char)916), "Delta");
-               charTable.put(new Character((char)917), "Epsilon");
-               charTable.put(new Character((char)918), "Zeta");
-               charTable.put(new Character((char)919), "Eta");
-               charTable.put(new Character((char)920), "Theta");
-               charTable.put(new Character((char)921), "Iota");
-               charTable.put(new Character((char)922), "Kappa");
-               charTable.put(new Character((char)923), "Lambda");
-               charTable.put(new Character((char)924), "Mu");
-               charTable.put(new Character((char)925), "Nu");
-               charTable.put(new Character((char)926), "Xi");
-               charTable.put(new Character((char)927), "Omicron");
-               charTable.put(new Character((char)928), "Pi");
-               charTable.put(new Character((char)929), "Rho");
-               charTable.put(new Character((char)931), "Sigma");
-               charTable.put(new Character((char)932), "Tau");
-               charTable.put(new Character((char)933), "Upsilon");
-               charTable.put(new Character((char)934), "Phi");
-               charTable.put(new Character((char)935), "Chi");
-               charTable.put(new Character((char)936), "Psi");
-               charTable.put(new Character((char)937), "Omega");
-               charTable.put(new Character((char)945), "alpha");
-               charTable.put(new Character((char)946), "beta");
-               charTable.put(new Character((char)947), "gamma");
-               charTable.put(new Character((char)948), "delta");
-               charTable.put(new Character((char)949), "epsilon");
-               charTable.put(new Character((char)950), "zeta");
-               charTable.put(new Character((char)951), "eta");
-               charTable.put(new Character((char)952), "theta");
-               charTable.put(new Character((char)953), "iota");
-               charTable.put(new Character((char)954), "kappa");
-               charTable.put(new Character((char)955), "lambda");
-               charTable.put(new Character((char)956), "mu");
-               charTable.put(new Character((char)957), "nu");
-               charTable.put(new Character((char)958), "xi");
-               charTable.put(new Character((char)959), "omicron");
-               charTable.put(new Character((char)960), "pi");
-               charTable.put(new Character((char)961), "rho");
-               charTable.put(new Character((char)962), "sigmaf");
-               charTable.put(new Character((char)963), "sigma");
-               charTable.put(new Character((char)964), "tau");
-               charTable.put(new Character((char)965), "upsilon");
-               charTable.put(new Character((char)966), "phi");
-               charTable.put(new Character((char)967), "chi");
-               charTable.put(new Character((char)968), "psi");
-               charTable.put(new Character((char)969), "omega");
-               charTable.put(new Character((char)977), "thetasym");
-               charTable.put(new Character((char)978), "upsih");
-               charTable.put(new Character((char)982), "piv");
-               charTable.put(new Character((char)8194), "ensp");
-               charTable.put(new Character((char)8195), "emsp");
-               charTable.put(new Character((char)8201), "thinsp");
-               charTable.put(new Character((char)8204), "zwnj");
-               charTable.put(new Character((char)8205), "zwj");
-               charTable.put(new Character((char)8206), "lrm");
-               charTable.put(new Character((char)8207), "rlm");
-               charTable.put(new Character((char)8211), "ndash");
-               charTable.put(new Character((char)8212), "mdash");
-               charTable.put(new Character((char)8216), "lsquo");
-               charTable.put(new Character((char)8217), "rsquo");
-               charTable.put(new Character((char)8218), "sbquo");
-               charTable.put(new Character((char)8220), "ldquo");
-               charTable.put(new Character((char)8221), "rdquo");
-               charTable.put(new Character((char)8222), "bdquo");
-               charTable.put(new Character((char)8224), "dagger");
-               charTable.put(new Character((char)8225), "Dagger");
-               charTable.put(new Character((char)8226), "bull");
-               charTable.put(new Character((char)8230), "hellip");
-               charTable.put(new Character((char)8240), "permil");
-               charTable.put(new Character((char)8242), "prime");
-               charTable.put(new Character((char)8243), "Prime");
-               charTable.put(new Character((char)8249), "lsaquo");
-               charTable.put(new Character((char)8250), "rsaquo");
-               charTable.put(new Character((char)8254), "oline");
-               charTable.put(new Character((char)8260), "frasl");
-               charTable.put(new Character((char)8364), "euro");
-               charTable.put(new Character((char)8465), "image");
-               charTable.put(new Character((char)8472), "weierp");
-               charTable.put(new Character((char)8476), "real");
-               charTable.put(new Character((char)8482), "trade");
-               charTable.put(new Character((char)8501), "alefsym");
-               charTable.put(new Character((char)8592), "larr");
-               charTable.put(new Character((char)8593), "uarr");
-               charTable.put(new Character((char)8594), "rarr");
-               charTable.put(new Character((char)8595), "darr");
-               charTable.put(new Character((char)8596), "harr");
-               charTable.put(new Character((char)8629), "crarr");
-               charTable.put(new Character((char)8656), "lArr");
-               charTable.put(new Character((char)8657), "uArr");
-               charTable.put(new Character((char)8658), "rArr");
-               charTable.put(new Character((char)8659), "dArr");
-               charTable.put(new Character((char)8660), "hArr");
-               charTable.put(new Character((char)8704), "forall");
-               charTable.put(new Character((char)8706), "part");
-               charTable.put(new Character((char)8707), "exist");
-               charTable.put(new Character((char)8709), "empty");
-               charTable.put(new Character((char)8711), "nabla");
-               charTable.put(new Character((char)8712), "isin");
-               charTable.put(new Character((char)8713), "notin");
-               charTable.put(new Character((char)8715), "ni");
-               charTable.put(new Character((char)8719), "prod");
-               charTable.put(new Character((char)8721), "sum");
-               charTable.put(new Character((char)8722), "minus");
-               charTable.put(new Character((char)8727), "lowast");
-               charTable.put(new Character((char)8730), "radic");
-               charTable.put(new Character((char)8733), "prop");
-               charTable.put(new Character((char)8734), "infin");
-               charTable.put(new Character((char)8736), "ang");
-               charTable.put(new Character((char)8743), "and");
-               charTable.put(new Character((char)8744), "or");
-               charTable.put(new Character((char)8745), "cap");
-               charTable.put(new Character((char)8746), "cup");
-               charTable.put(new Character((char)8747), "int");
-               charTable.put(new Character((char)8756), "there4");
-               charTable.put(new Character((char)8764), "sim");
-               charTable.put(new Character((char)8773), "cong");
-               charTable.put(new Character((char)8776), "asymp");
-               charTable.put(new Character((char)8800), "ne");
-               charTable.put(new Character((char)8801), "equiv");
-               charTable.put(new Character((char)8804), "le");
-               charTable.put(new Character((char)8805), "ge");
-               charTable.put(new Character((char)8834), "sub");
-               charTable.put(new Character((char)8835), "sup");
-               charTable.put(new Character((char)8836), "nsub");
-               charTable.put(new Character((char)8838), "sube");
-               charTable.put(new Character((char)8839), "supe");
-               charTable.put(new Character((char)8853), "oplus");
-               charTable.put(new Character((char)8855), "otimes");
-               charTable.put(new Character((char)8869), "perp");
-               charTable.put(new Character((char)8901), "sdot");
-               charTable.put(new Character((char)8968), "lceil");
-               charTable.put(new Character((char)8969), "rceil");
-               charTable.put(new Character((char)8970), "lfloor");
-               charTable.put(new Character((char)8971), "rfloor");
-               charTable.put(new Character((char)9001), "lang");
-               charTable.put(new Character((char)9002), "rang");
-               charTable.put(new Character((char)9674), "loz");
-               charTable.put(new Character((char)9824), "spades");
-               charTable.put(new Character((char)9827), "clubs");
-               charTable.put(new Character((char)9829), "hearts");
-               charTable.put(new Character((char)9830), "diams");
+               HashMap temp = new HashMap();
+               temp.put(new Character((char)34), "quot");
+               temp.put(new Character((char)38), "amp");
+               temp.put(new Character((char)39), "#39");
+               temp.put(new Character((char)60), "lt");
+               temp.put(new Character((char)62), "gt");
+               temp.put(new Character((char)160), "nbsp");
+               temp.put(new Character((char)161), "iexcl");
+               temp.put(new Character((char)162), "cent");
+               temp.put(new Character((char)163), "pound");
+               temp.put(new Character((char)164), "curren");
+               temp.put(new Character((char)165), "yen");
+               temp.put(new Character((char)166), "brvbar");
+               temp.put(new Character((char)167), "sect");
+               temp.put(new Character((char)168), "uml");
+               temp.put(new Character((char)169), "copy");
+               temp.put(new Character((char)170), "ordf");
+               temp.put(new Character((char)171), "laquo");
+               temp.put(new Character((char)172), "not");
+               temp.put(new Character((char)173), "shy");
+               temp.put(new Character((char)174), "reg");
+               temp.put(new Character((char)175), "macr");
+               temp.put(new Character((char)176), "deg");
+               temp.put(new Character((char)177), "plusmn");
+               temp.put(new Character((char)178), "sup2");
+               temp.put(new Character((char)179), "sup3");
+               temp.put(new Character((char)180), "acute");
+               temp.put(new Character((char)181), "micro");
+               temp.put(new Character((char)182), "para");
+               temp.put(new Character((char)183), "middot");
+               temp.put(new Character((char)184), "cedil");
+               temp.put(new Character((char)185), "sup1");
+               temp.put(new Character((char)186), "ordm");
+               temp.put(new Character((char)187), "raquo");
+               temp.put(new Character((char)188), "frac14");
+               temp.put(new Character((char)189), "frac12");
+               temp.put(new Character((char)190), "frac34");
+               temp.put(new Character((char)191), "iquest");
+               temp.put(new Character((char)192), "Agrave");
+               temp.put(new Character((char)193), "Aacute");
+               temp.put(new Character((char)194), "Acirc");
+               temp.put(new Character((char)195), "Atilde");
+               temp.put(new Character((char)196), "Auml");
+               temp.put(new Character((char)197), "Aring");
+               temp.put(new Character((char)198), "AElig");
+               temp.put(new Character((char)199), "Ccedil");
+               temp.put(new Character((char)200), "Egrave");
+               temp.put(new Character((char)201), "Eacute");
+               temp.put(new Character((char)202), "Ecirc");
+               temp.put(new Character((char)203), "Euml");
+               temp.put(new Character((char)204), "Igrave");
+               temp.put(new Character((char)205), "Iacute");
+               temp.put(new Character((char)206), "Icirc");
+               temp.put(new Character((char)207), "Iuml");
+               temp.put(new Character((char)208), "ETH");
+               temp.put(new Character((char)209), "Ntilde");
+               temp.put(new Character((char)210), "Ograve");
+               temp.put(new Character((char)211), "Oacute");
+               temp.put(new Character((char)212), "Ocirc");
+               temp.put(new Character((char)213), "Otilde");
+               temp.put(new Character((char)214), "Ouml");
+               temp.put(new Character((char)215), "times");
+               temp.put(new Character((char)216), "Oslash");
+               temp.put(new Character((char)217), "Ugrave");
+               temp.put(new Character((char)218), "Uacute");
+               temp.put(new Character((char)219), "Ucirc");
+               temp.put(new Character((char)220), "Uuml");
+               temp.put(new Character((char)221), "Yacute");
+               temp.put(new Character((char)222), "THORN");
+               temp.put(new Character((char)223), "szlig");
+               temp.put(new Character((char)224), "agrave");
+               temp.put(new Character((char)225), "aacute");
+               temp.put(new Character((char)226), "acirc");
+               temp.put(new Character((char)227), "atilde");
+               temp.put(new Character((char)228), "auml");
+               temp.put(new Character((char)229), "aring");
+               temp.put(new Character((char)230), "aelig");
+               temp.put(new Character((char)231), "ccedil");
+               temp.put(new Character((char)232), "egrave");
+               temp.put(new Character((char)233), "eacute");
+               temp.put(new Character((char)234), "ecirc");
+               temp.put(new Character((char)235), "euml");
+               temp.put(new Character((char)236), "igrave");
+               temp.put(new Character((char)237), "iacute");
+               temp.put(new Character((char)238), "icirc");
+               temp.put(new Character((char)239), "iuml");
+               temp.put(new Character((char)240), "eth");
+               temp.put(new Character((char)241), "ntilde");
+               temp.put(new Character((char)242), "ograve");
+               temp.put(new Character((char)243), "oacute");
+               temp.put(new Character((char)244), "ocirc");
+               temp.put(new Character((char)245), "otilde");
+               temp.put(new Character((char)246), "ouml");
+               temp.put(new Character((char)247), "divide");
+               temp.put(new Character((char)248), "oslash");
+               temp.put(new Character((char)249), "ugrave");
+               temp.put(new Character((char)250), "uacute");
+               temp.put(new Character((char)251), "ucirc");
+               temp.put(new Character((char)252), "uuml");
+               temp.put(new Character((char)253), "yacute");
+               temp.put(new Character((char)254), "thorn");
+               temp.put(new Character((char)255), "yuml");
+               temp.put(new Character((char)338), "OElig");
+               temp.put(new Character((char)339), "oelig");
+               temp.put(new Character((char)352), "Scaron");
+               temp.put(new Character((char)353), "scaron");
+               temp.put(new Character((char)376), "Yuml");
+               temp.put(new Character((char)402), "fnof");
+               temp.put(new Character((char)710), "circ");
+               temp.put(new Character((char)732), "tilde");
+               temp.put(new Character((char)913), "Alpha");
+               temp.put(new Character((char)914), "Beta");
+               temp.put(new Character((char)915), "Gamma");
+               temp.put(new Character((char)916), "Delta");
+               temp.put(new Character((char)917), "Epsilon");
+               temp.put(new Character((char)918), "Zeta");
+               temp.put(new Character((char)919), "Eta");
+               temp.put(new Character((char)920), "Theta");
+               temp.put(new Character((char)921), "Iota");
+               temp.put(new Character((char)922), "Kappa");
+               temp.put(new Character((char)923), "Lambda");
+               temp.put(new Character((char)924), "Mu");
+               temp.put(new Character((char)925), "Nu");
+               temp.put(new Character((char)926), "Xi");
+               temp.put(new Character((char)927), "Omicron");
+               temp.put(new Character((char)928), "Pi");
+               temp.put(new Character((char)929), "Rho");
+               temp.put(new Character((char)931), "Sigma");
+               temp.put(new Character((char)932), "Tau");
+               temp.put(new Character((char)933), "Upsilon");
+               temp.put(new Character((char)934), "Phi");
+               temp.put(new Character((char)935), "Chi");
+               temp.put(new Character((char)936), "Psi");
+               temp.put(new Character((char)937), "Omega");
+               temp.put(new Character((char)945), "alpha");
+               temp.put(new Character((char)946), "beta");
+               temp.put(new Character((char)947), "gamma");
+               temp.put(new Character((char)948), "delta");
+               temp.put(new Character((char)949), "epsilon");
+               temp.put(new Character((char)950), "zeta");
+               temp.put(new Character((char)951), "eta");
+               temp.put(new Character((char)952), "theta");
+               temp.put(new Character((char)953), "iota");
+               temp.put(new Character((char)954), "kappa");
+               temp.put(new Character((char)955), "lambda");
+               temp.put(new Character((char)956), "mu");
+               temp.put(new Character((char)957), "nu");
+               temp.put(new Character((char)958), "xi");
+               temp.put(new Character((char)959), "omicron");
+               temp.put(new Character((char)960), "pi");
+               temp.put(new Character((char)961), "rho");
+               temp.put(new Character((char)962), "sigmaf");
+               temp.put(new Character((char)963), "sigma");
+               temp.put(new Character((char)964), "tau");
+               temp.put(new Character((char)965), "upsilon");
+               temp.put(new Character((char)966), "phi");
+               temp.put(new Character((char)967), "chi");
+               temp.put(new Character((char)968), "psi");
+               temp.put(new Character((char)969), "omega");
+               temp.put(new Character((char)977), "thetasym");
+               temp.put(new Character((char)978), "upsih");
+               temp.put(new Character((char)982), "piv");
+               temp.put(new Character((char)8194), "ensp");
+               temp.put(new Character((char)8195), "emsp");
+               temp.put(new Character((char)8201), "thinsp");
+               temp.put(new Character((char)8204), "zwnj");
+               temp.put(new Character((char)8205), "zwj");
+               temp.put(new Character((char)8206), "lrm");
+               temp.put(new Character((char)8207), "rlm");
+               temp.put(new Character((char)8211), "ndash");
+               temp.put(new Character((char)8212), "mdash");
+               temp.put(new Character((char)8216), "lsquo");
+               temp.put(new Character((char)8217), "rsquo");
+               temp.put(new Character((char)8218), "sbquo");
+               temp.put(new Character((char)8220), "ldquo");
+               temp.put(new Character((char)8221), "rdquo");
+               temp.put(new Character((char)8222), "bdquo");
+               temp.put(new Character((char)8224), "dagger");
+               temp.put(new Character((char)8225), "Dagger");
+               temp.put(new Character((char)8226), "bull");
+               temp.put(new Character((char)8230), "hellip");
+               temp.put(new Character((char)8240), "permil");
+               temp.put(new Character((char)8242), "prime");
+               temp.put(new Character((char)8243), "Prime");
+               temp.put(new Character((char)8249), "lsaquo");
+               temp.put(new Character((char)8250), "rsaquo");
+               temp.put(new Character((char)8254), "oline");
+               temp.put(new Character((char)8260), "frasl");
+               temp.put(new Character((char)8364), "euro");
+               temp.put(new Character((char)8465), "image");
+               temp.put(new Character((char)8472), "weierp");
+               temp.put(new Character((char)8476), "real");
+               temp.put(new Character((char)8482), "trade");
+               temp.put(new Character((char)8501), "alefsym");
+               temp.put(new Character((char)8592), "larr");
+               temp.put(new Character((char)8593), "uarr");
+               temp.put(new Character((char)8594), "rarr");
+               temp.put(new Character((char)8595), "darr");
+               temp.put(new Character((char)8596), "harr");
+               temp.put(new Character((char)8629), "crarr");
+               temp.put(new Character((char)8656), "lArr");
+               temp.put(new Character((char)8657), "uArr");
+               temp.put(new Character((char)8658), "rArr");
+               temp.put(new Character((char)8659), "dArr");
+               temp.put(new Character((char)8660), "hArr");
+               temp.put(new Character((char)8704), "forall");
+               temp.put(new Character((char)8706), "part");
+               temp.put(new Character((char)8707), "exist");
+               temp.put(new Character((char)8709), "empty");
+               temp.put(new Character((char)8711), "nabla");
+               temp.put(new Character((char)8712), "isin");
+               temp.put(new Character((char)8713), "notin");
+               temp.put(new Character((char)8715), "ni");
+               temp.put(new Character((char)8719), "prod");
+               temp.put(new Character((char)8721), "sum");
+               temp.put(new Character((char)8722), "minus");
+               temp.put(new Character((char)8727), "lowast");
+               temp.put(new Character((char)8730), "radic");
+               temp.put(new Character((char)8733), "prop");
+               temp.put(new Character((char)8734), "infin");
+               temp.put(new Character((char)8736), "ang");
+               temp.put(new Character((char)8743), "and");
+               temp.put(new Character((char)8744), "or");
+               temp.put(new Character((char)8745), "cap");
+               temp.put(new Character((char)8746), "cup");
+               temp.put(new Character((char)8747), "int");
+               temp.put(new Character((char)8756), "there4");
+               temp.put(new Character((char)8764), "sim");
+               temp.put(new Character((char)8773), "cong");
+               temp.put(new Character((char)8776), "asymp");
+               temp.put(new Character((char)8800), "ne");
+               temp.put(new Character((char)8801), "equiv");
+               temp.put(new Character((char)8804), "le");
+               temp.put(new Character((char)8805), "ge");
+               temp.put(new Character((char)8834), "sub");
+               temp.put(new Character((char)8835), "sup");
+               temp.put(new Character((char)8836), "nsub");
+               temp.put(new Character((char)8838), "sube");
+               temp.put(new Character((char)8839), "supe");
+               temp.put(new Character((char)8853), "oplus");
+               temp.put(new Character((char)8855), "otimes");
+               temp.put(new Character((char)8869), "perp");
+               temp.put(new Character((char)8901), "sdot");
+               temp.put(new Character((char)8968), "lceil");
+               temp.put(new Character((char)8969), "rceil");
+               temp.put(new Character((char)8970), "lfloor");
+               temp.put(new Character((char)8971), "rfloor");
+               temp.put(new Character((char)9001), "lang");
+               temp.put(new Character((char)9002), "rang");
+               temp.put(new Character((char)9674), "loz");
+               temp.put(new Character((char)9824), "spades");
+               temp.put(new Character((char)9827), "clubs");
+               temp.put(new Character((char)9829), "hearts");
+               temp.put(new Character((char)9830), "diams");
+               charTable = new CharTable(temp);
        }
+       
+       private final static class CharTable{
+               private char[] chars;
+               private String[] strings;
+               private int modulo = 0;
+               
+               public CharTable(HashMap map){
+                       int[] keys = new int[map.size()]; 
+                       int keyIndex = 0;
+                       
+                       for(Iterator it = map.keySet().iterator();it.hasNext(); 
keyIndex++){
+                               keys[keyIndex] = (int) 
((Character)it.next()).charValue();
+                       }
+                               
+                       int[] collisionTable = new int[Character.MAX_VALUE]; 
//using integers instead of booleans (no cleanup)
+                       boolean ok=false;
+                       while (!ok) {
+                           ++modulo; //try a higher modulo
+                           ok = true;
+                           for (int i = 0; ok && i < keys.length; ++i){
+                               keyIndex = keys[i]%modulo; //try this modulo
+                               if (collisionTable[keyIndex] == modulo){ //is 
this value already used
+                                       ok = false;
+                               }
+                               else{
+                                       collisionTable[keyIndex] = modulo;
+                                       }
+                           }
+                       }
+                       //System.out.println("The modulo is:" + modulo); //was 
The modulo is:1474
+                       
+                       chars = new char[modulo];
+                       strings = new String[modulo];
+                       Character character;
+                       for(Iterator it = map.keySet().iterator();it.hasNext(); 
keyIndex++){
+                               character = ((Character)it.next());
+                               keyIndex = character.charValue()%modulo;
+                               chars[keyIndex] = character.charValue();
+                               strings[keyIndex] = (String) map.get(character);
+                       }
+               }
+               
+               public boolean containsKey(char key){
+                       return chars[key%modulo] == key;
+               }
+               
+               public String get(char key){
+                       return chars[key%modulo] == key? 
strings[key%modulo]:null;
+               }
+       }
 }


Reply via email to