/// <summary> /// Inits mini-entities mode: only "nbsp" will be converted into space, all other entities /// will be left as is /// </summary> internal void InitMiniEntities() { this.oEntities = new FastHash(); this.oEntities.Add("nbsp", 32); this.bMiniEntities = true; }
private void Dispose(bool bDisposing) { if (!this.bDisposed) { this.bDisposed = true; if (this.oEntities != null) { this.oEntities.Dispose(); this.oEntities = null; } } }
internal HtmlEntities() { this.oEntities = InitEntities(ref this.iMinEntityLen, ref this.iMaxEntityLen, out sEntityReverseLookup); this.bMiniEntities = false; }
/// <summary> /// Initialises list of entities /// </summary> private static FastHash InitEntities( ref int iMinEntityLen, ref int iMaxEntityLen, out string[] sEntityReverseLookup) { var oEntities = new FastHash(); // FIXIT: we will treat non-breakable space... as space!?! // perhaps it would be better to have separate return types for entities? oEntities.Add("nbsp", 32); //oEntities.Add("nbsp",160); oEntities.Add("iexcl", 161); oEntities.Add("cent", 162); oEntities.Add("pound", 163); oEntities.Add("curren", 164); oEntities.Add("yen", 165); oEntities.Add("brvbar", 166); oEntities.Add("sect", 167); oEntities.Add("uml", 168); oEntities.Add("copy", 169); oEntities.Add("ordf", 170); oEntities.Add("laquo", 171); oEntities.Add("not", 172); oEntities.Add("shy", 173); oEntities.Add("reg", 174); oEntities.Add("macr", 175); oEntities.Add("deg", 176); oEntities.Add("plusmn", 177); oEntities.Add("sup2", 178); oEntities.Add("sup3", 179); oEntities.Add("acute", 180); oEntities.Add("micro", 181); oEntities.Add("para", 182); oEntities.Add("middot", 183); oEntities.Add("cedil", 184); oEntities.Add("sup1", 185); oEntities.Add("ordm", 186); oEntities.Add("raquo", 187); oEntities.Add("frac14", 188); oEntities.Add("frac12", 189); oEntities.Add("frac34", 190); oEntities.Add("iquest", 191); oEntities.Add("Agrave", 192); oEntities.Add("Aacute", 193); oEntities.Add("Acirc", 194); oEntities.Add("Atilde", 195); oEntities.Add("Auml", 196); oEntities.Add("Aring", 197); oEntities.Add("AElig", 198); oEntities.Add("Ccedil", 199); oEntities.Add("Egrave", 200); oEntities.Add("Eacute", 201); oEntities.Add("Ecirc", 202); oEntities.Add("Euml", 203); oEntities.Add("Igrave", 204); oEntities.Add("Iacute", 205); oEntities.Add("Icirc", 206); oEntities.Add("Iuml", 207); oEntities.Add("ETH", 208); oEntities.Add("Ntilde", 209); oEntities.Add("Ograve", 210); oEntities.Add("Oacute", 211); oEntities.Add("Ocirc", 212); oEntities.Add("Otilde", 213); oEntities.Add("Ouml", 214); oEntities.Add("times", 215); oEntities.Add("Oslash", 216); oEntities.Add("Ugrave", 217); oEntities.Add("Uacute", 218); oEntities.Add("Ucirc", 219); oEntities.Add("Uuml", 220); oEntities.Add("Yacute", 221); oEntities.Add("THORN", 222); oEntities.Add("szlig", 223); oEntities.Add("agrave", 224); oEntities.Add("aacute", 225); oEntities.Add("acirc", 226); oEntities.Add("atilde", 227); oEntities.Add("auml", 228); oEntities.Add("aring", 229); oEntities.Add("aelig", 230); oEntities.Add("ccedil", 231); oEntities.Add("egrave", 232); oEntities.Add("eacute", 233); oEntities.Add("ecirc", 234); oEntities.Add("euml", 235); oEntities.Add("igrave", 236); oEntities.Add("iacute", 237); oEntities.Add("icirc", 238); oEntities.Add("iuml", 239); oEntities.Add("eth", 240); oEntities.Add("ntilde", 241); oEntities.Add("ograve", 242); oEntities.Add("oacute", 243); oEntities.Add("ocirc", 244); oEntities.Add("otilde", 245); oEntities.Add("ouml", 246); oEntities.Add("divide", 247); oEntities.Add("oslash", 248); oEntities.Add("ugrave", 249); oEntities.Add("uacute", 250); oEntities.Add("ucirc", 251); oEntities.Add("uuml", 252); oEntities.Add("yacute", 253); oEntities.Add("thorn", 254); oEntities.Add("yuml", 255); oEntities.Add("quot", 34); // NOTE: this is a not a proper entity but a fairly common mistake - & is important symbol // and we don't want to lose it even if webmaster used upper case instead of lower oEntities.Add("AMP", 38); oEntities.Add("REG", 174); oEntities.Add("amp", 38); oEntities.Add("reg", 174); oEntities.Add("lt", 60); oEntities.Add("gt", 62); // ' - apparently does not work in IE oEntities.Add("apos", 39); // unicode supported by default if (true) { oEntities.Add("OElig", 338); oEntities.Add("oelig", 339); oEntities.Add("Scaron", 352); oEntities.Add("scaron", 353); oEntities.Add("Yuml", 376); oEntities.Add("circ", 710); oEntities.Add("tilde", 732); oEntities.Add("ensp", 8194); oEntities.Add("emsp", 8195); oEntities.Add("thinsp", 8201); oEntities.Add("zwnj", 8204); oEntities.Add("zwj", 8205); oEntities.Add("lrm", 8206); oEntities.Add("rlm", 8207); oEntities.Add("ndash", 8211); oEntities.Add("mdash", 8212); oEntities.Add("lsquo", 8216); oEntities.Add("rsquo", 8217); oEntities.Add("sbquo", 8218); oEntities.Add("ldquo", 8220); oEntities.Add("rdquo", 8221); oEntities.Add("bdquo", 8222); oEntities.Add("dagger", 8224); oEntities.Add("Dagger", 8225); oEntities.Add("permil", 8240); oEntities.Add("lsaquo", 8249); oEntities.Add("rsaquo", 8250); oEntities.Add("euro", 8364); oEntities.Add("fnof", 402); oEntities.Add("Alpha", 913); oEntities.Add("Beta", 914); oEntities.Add("Gamma", 915); oEntities.Add("Delta", 916); oEntities.Add("Epsilon", 917); oEntities.Add("Zeta", 918); oEntities.Add("Eta", 919); oEntities.Add("Theta", 920); oEntities.Add("Iota", 921); oEntities.Add("Kappa", 922); oEntities.Add("Lambda", 923); oEntities.Add("Mu", 924); oEntities.Add("Nu", 925); oEntities.Add("Xi", 926); oEntities.Add("Omicron", 927); oEntities.Add("Pi", 928); oEntities.Add("Rho", 929); oEntities.Add("Sigma", 931); oEntities.Add("Tau", 932); oEntities.Add("Upsilon", 933); oEntities.Add("Phi", 934); oEntities.Add("Chi", 935); oEntities.Add("Psi", 936); oEntities.Add("Omega", 937); oEntities.Add("alpha", 945); oEntities.Add("beta", 946); oEntities.Add("gamma", 947); oEntities.Add("delta", 948); oEntities.Add("epsilon", 949); oEntities.Add("zeta", 950); oEntities.Add("eta", 951); oEntities.Add("theta", 952); oEntities.Add("iota", 953); oEntities.Add("kappa", 954); oEntities.Add("lambda", 955); oEntities.Add("mu", 956); oEntities.Add("nu", 957); oEntities.Add("xi", 958); oEntities.Add("omicron", 959); oEntities.Add("pi", 960); oEntities.Add("rho", 961); oEntities.Add("sigmaf", 962); oEntities.Add("sigma", 963); oEntities.Add("tau", 964); oEntities.Add("upsilon", 965); oEntities.Add("phi", 966); oEntities.Add("chi", 967); oEntities.Add("psi", 968); oEntities.Add("omega", 969); oEntities.Add("thetasym", 977); oEntities.Add("upsih", 978); oEntities.Add("piv", 982); oEntities.Add("bull", 8226); oEntities.Add("hellip", 8230); oEntities.Add("prime", 8242); oEntities.Add("Prime", 8243); oEntities.Add("oline", 8254); oEntities.Add("frasl", 8260); oEntities.Add("weierp", 8472); oEntities.Add("image", 8465); oEntities.Add("real", 8476); oEntities.Add("trade", 8482); oEntities.Add("alefsym", 8501); oEntities.Add("larr", 8592); oEntities.Add("uarr", 8593); oEntities.Add("rarr", 8594); oEntities.Add("darr", 8595); oEntities.Add("harr", 8596); oEntities.Add("crarr", 8629); oEntities.Add("lArr", 8656); oEntities.Add("uArr", 8657); oEntities.Add("rArr", 8658); oEntities.Add("dArr", 8659); oEntities.Add("hArr", 8660); oEntities.Add("forall", 8704); oEntities.Add("part", 8706); oEntities.Add("exist", 8707); oEntities.Add("empty", 8709); oEntities.Add("nabla", 8711); oEntities.Add("isin", 8712); oEntities.Add("notin", 8713); oEntities.Add("ni", 8715); oEntities.Add("prod", 8719); oEntities.Add("sum", 8721); oEntities.Add("minus", 8722); oEntities.Add("lowast", 8727); oEntities.Add("radic", 8730); oEntities.Add("prop", 8733); oEntities.Add("infin", 8734); oEntities.Add("ang", 8736); oEntities.Add("and", 8743); oEntities.Add("or", 8744); oEntities.Add("cap", 8745); oEntities.Add("cup", 8746); oEntities.Add("int", 8747); oEntities.Add("there4", 8756); oEntities.Add("sim", 8764); oEntities.Add("cong", 8773); oEntities.Add("asymp", 8776); oEntities.Add("ne", 8800); oEntities.Add("equiv", 8801); oEntities.Add("le", 8804); oEntities.Add("ge", 8805); oEntities.Add("sub", 8834); oEntities.Add("sup", 8835); oEntities.Add("nsub", 8836); oEntities.Add("sube", 8838); oEntities.Add("supe", 8839); oEntities.Add("oplus", 8853); oEntities.Add("otimes", 8855); oEntities.Add("perp", 8869); oEntities.Add("sdot", 8901); oEntities.Add("lceil", 8968); oEntities.Add("rceil", 8969); oEntities.Add("lfloor", 8970); oEntities.Add("rfloor", 8971); oEntities.Add("lang", 9001); oEntities.Add("rang", 9002); oEntities.Add("loz", 9674); oEntities.Add("spades", 9824); oEntities.Add("clubs", 9827); oEntities.Add("hearts", 9829); oEntities.Add("diams", 9830); } sEntityReverseLookup = new string[10000]; // calculate min/max lenght of known entities foreach (string sKey in oEntities.Keys) { if (sKey.Length < iMinEntityLen || iMinEntityLen == 0) { iMinEntityLen = sKey.Length; } if (sKey.Length > iMaxEntityLen || iMaxEntityLen == 0) { iMaxEntityLen = sKey.Length; } // remember key at given offset if (sKey != "AMP" && sKey != "REG") { sEntityReverseLookup[(int)oEntities[sKey]] = sKey; } } // we don't want to change spaces sEntityReverseLookup[32] = null; return oEntities; }
static HtmlEntities() { oAllEntities = InitEntities(ref iAllMinEntityLen, ref iAllMaxEntityLen, out sEntityReverseLookup); }