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;
+ }
+ }
}