FastHash: class provides fast look ups at the expense of memory (at least 128k per object). Its designed primarily for those hashes where majority of lookups are unsuccessful (ie object is not present) Status of this work is EXPERIMENTAL, do not make any untested assumptions. History: 15/12/06 Added range check in GetXY sometime in 2005: initial imlpementation
Inheritance: IDisposable
Esempio n. 1
0
		/// <summary>
		/// Inits mini-entities mode: only "nbsp" will be converted into space, all other entities 
		/// will be left as is
		/// </summary>
		internal void InitMiniEntities()
		{
			oEntities=new FastHash();

			oEntities.Add("nbsp",32);
			bMiniEntities=true;
		}
Esempio n. 2
0
		private void Dispose(bool bDisposing)
		{
			if(!bDisposed)
			{
				bDisposed=true;

				if(oEntities!=null)
				{
					oEntities.Dispose();
					oEntities=null;
				}
			}

			
		}
Esempio n. 3
0
		internal HTMLentities()
		{
			oEntities=InitEntities(ref iMinEntityLen,ref iMaxEntityLen,out sEntityReverseLookup);	
			bMiniEntities=false;
		}
Esempio n. 4
0
		/// <summary>
		/// Initialises list of entities
		/// </summary>
		private static FastHash InitEntities(ref int iMinEntityLen,ref int iMaxEntityLen,out string[] sEntityReverseLookup)
		{
			FastHash 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;
		}
Esempio n. 5
0
		static HTMLentities()
		{
			oAllEntities=InitEntities(ref iAllMinEntityLen,ref iAllMaxEntityLen,out sEntityReverseLookup);
		}