2 using System.Collections.Generic;
\r
3 using System.Globalization;
\r
7 namespace NT2chCtrl.html
\r
11 static bool mInit = false;
\r
12 public static void init()
\r
16 HTMLEscapeTable.init();
\r
20 public static char parseHTMLDecimalHexEscape(String source, int offset, out int retVal)
\r
22 StringBuilder wrk = new StringBuilder(16);
\r
27 byte[] bVal = new byte[2];
\r
29 for (int j = offset; j < source.Length; j++)
\r
34 if (wrk.Length > 0 && ((fHEX && wrk.Length <= 4) || !fHEX && wrk.Length <= 5))
\r
36 //DebugUtil.log("convert hex escape: 0x" + wrk);
\r
37 //c = (char)Integer.parseInt(wrk, 16);
\r
41 int nVal = int.Parse(wrk.ToString(), fHEX ? NumberStyles.HexNumber : NumberStyles.Integer);
\r
42 bVal[0] = (byte)(nVal & 0x000000ff);
\r
43 bVal[1] = (byte)((nVal >> 8) & 0x000000ff);
\r
44 MemoryStream ms = new MemoryStream(bVal, false);
\r
45 //Encoding enc = Encoding.GetEncoding(NTAppState.HOST_2CH_ENCODING);
\r
46 StreamReader sr = new StreamReader(ms);
\r
47 c = (char)sr.Read();
\r
59 else if ('x' == c || 'X' == c)
\r
69 switch (HtmlParser.getCharToken(c))
\r
71 case HtmlParser.CHAR_TOKEN.NUMBER:
\r
72 wrk.Append(c);// = wrk + c;
\r
74 case HtmlParser.CHAR_TOKEN.ALPHA:
\r
80 wrk.Append(c);// = wrk + c;
\r
94 class HttpEscapeTree
\r
98 public List<HttpEscapeTree> mTree = new List<HttpEscapeTree>();
\r
99 public HttpEscapeTree(char c) { mC = c; mCode = '\0'; }
\r
104 public class HTMLEscapeTable
\r
106 static HttpEscapeTree mTopTree = null;
\r
107 //private static ArrayList<HTMLEscape> mHtmlEscape = new ArrayList<HTMLEscape>();
\r
108 private String mEscape;
\r
109 private char mCode;
\r
110 //private ArrayList<HTMLEscapeTable> mTree = new ArrayList<HTMLEscapeTable>();
\r
112 HTMLEscapeTable(String escape, char code)
\r
118 //static int counter = 0;
\r
120 public static char getCodeFromEscape(String escape, int index, out int returnLength)
\r
122 return findTree(mTopTree, escape, index, out returnLength);
\r
125 static char findTree(HttpEscapeTree parent, String escape, int index, out int returnLength)
\r
128 if (escape.Length == index)
\r
134 char c = escape[index];
\r
136 for (int i = 0; i < parent.mTree.Count; i++)
\r
138 HttpEscapeTree current = parent.mTree[i];
\r
139 if (current.mC == c)
\r
144 returnLength = index;
\r
145 return current.mCode;
\r
147 return findTree(current, escape, index, out returnLength);
\r
151 return '\0';// No match code available
\r
155 public static void init()
\r
157 //Making escape-code tree
\r
158 mTopTree = new HttpEscapeTree((char)0x00);
\r
159 //DebugUtil.log("HTMLEscape.length: " + htmlEscape.length);
\r
160 for (int i = 0; i < htmlEscape.Length; i++)
\r
162 parseTree(mTopTree, htmlEscape[i].mEscape, 0, htmlEscape[i].mCode);
\r
167 static void parseTree(HttpEscapeTree tree, String source, int index, char code)
\r
171 List<HttpEscapeTree> parentTree = tree.mTree;
\r
172 HttpEscapeTree newTree;
\r
173 char c = source[index];
\r
175 for (i = 0; i < parentTree.Count; i++)
\r
177 if (parentTree[i].mC == c)
\r
182 if (i == parentTree.Count)
\r
184 newTree = new HttpEscapeTree(c);
\r
185 parentTree.Add(newTree);
\r
186 // NTDebug.l("HTMLEscape.parseTree(): err occured. #1");
\r
192 newTree = parentTree[i];//.get(i);
\r
195 if (source.Length == index)
\r
197 newTree.mCode = code;
\r
198 //DebugUtil.log("EscapeCode setup:" + source + ":" + String.format("0x%04X", (int)code) + ":" + ++counter);
\r
199 //DebugUtil.log("EscapeCode setup:" + source + ":" + String.format("0x%04X", 10));
\r
203 parseTree(newTree, source, index, code);
\r
206 catch (Exception e)
\r
208 //NTDebug.l(e.Message);
\r
212 static HTMLEscapeTable[] htmlEscape = {
\r
213 new HTMLEscapeTable("quot;", (char)0x22),//quotation mark = APL quote
\r
214 new HTMLEscapeTable("amp;", (char)0x26),//ampersand
\r
215 new HTMLEscapeTable("lt;", (char)0x3C),//less-than sign
\r
216 new HTMLEscapeTable("gt;", (char)0x3E),//greater-than sign
\r
217 new HTMLEscapeTable("nbsp;", (char)0xA0),//no-break space = non-breaking space
\r
218 new HTMLEscapeTable("iexcl;", (char)0xA1),//inverted exclamation mark
\r
219 new HTMLEscapeTable("cent;", (char)0xA2),//cent sign
\r
220 new HTMLEscapeTable("pound;", (char)0xA3),//pound sign
\r
221 new HTMLEscapeTable("curren;", (char)0xA4),//currency sign
\r
222 new HTMLEscapeTable("yen;", (char)0xA5),//yen sign = yuan sign
\r
223 new HTMLEscapeTable("brvbar;", (char)0xA6),//broken bar = broken vertical bar
\r
224 new HTMLEscapeTable("sect;", (char)0xA7),//section sign
\r
225 new HTMLEscapeTable("uml;", (char)0xA8),//diaeresis = spacing diaeresis
\r
226 new HTMLEscapeTable("copy;", (char)0xA9),//copyright sign
\r
227 new HTMLEscapeTable("ordf;", (char)0xAA),//feminine ordinal indicator
\r
228 new HTMLEscapeTable("laquo;", (char)0xAB),//left-pointing double angle quotation mark = left pointing guillemet
\r
229 new HTMLEscapeTable("not;", (char)0xAC),//not sign
\r
230 new HTMLEscapeTable("shy;", (char)0xAD),//soft hyphen = discretionary hyphen
\r
231 new HTMLEscapeTable("reg;", (char)0xAE),//registered sign = registered trade mark sign
\r
232 new HTMLEscapeTable("macr;", (char)0xAF),//macron = spacing macron = overline = APL overbar
\r
233 new HTMLEscapeTable("deg;", (char)0xB0),//degree sign
\r
234 new HTMLEscapeTable("plusmn;", (char)0xB1),//plus-minus sign = plus-or-minus sign
\r
235 new HTMLEscapeTable("sup2;", (char)0xB2),//superscript two = superscript digit two = squared
\r
236 new HTMLEscapeTable("sup3;", (char)0xB3),//superscript three = superscript digit three = cubed
\r
237 new HTMLEscapeTable("acute;",(char)0xB4),//acute accent = spacing acute
\r
238 new HTMLEscapeTable("micro;",(char) 0xB5),//micro sign
\r
239 new HTMLEscapeTable("para;", (char)0xB6),//pilcrow sign = paragraph sign
\r
240 new HTMLEscapeTable("middot;", (char)0xB7),//middle dot = Georgian comma = Greek middle dot
\r
241 new HTMLEscapeTable("cedil;", (char)0xB8),//cedilla = spacing cedilla
\r
242 new HTMLEscapeTable("sup1;", (char)0xB9),//superscript one = superscript digit one
\r
243 new HTMLEscapeTable("ordm;", (char)0xBA),//masculine ordinal indicator
\r
244 new HTMLEscapeTable("raquo;", (char)0xBB),//right-pointing double angle quotation mark = right pointing guillemet
\r
245 new HTMLEscapeTable("frac14;", (char)0xBC),//vulgar fraction one quarter = fraction one quarter
\r
246 new HTMLEscapeTable("frac12;", (char)0xBD),//vulgar fraction one half = fraction one half
\r
247 new HTMLEscapeTable("frac34;", (char)0xBE),//vulgar fraction three quarters = fraction three quarters
\r
248 new HTMLEscapeTable("iquest;", (char)0xBF),//inverted question mark = turned question mark
\r
249 new HTMLEscapeTable("Agrave;", (char)0xC0),//latin capital letter A with grave = latin capital letter A grave
\r
250 new HTMLEscapeTable("Aacute;", (char)0xC1),//latin capital letter A with acute
\r
251 new HTMLEscapeTable("Acirc;", (char)0xC2),//latin capital letter A with circumflex
\r
252 new HTMLEscapeTable("Atilde;", (char)0xC3),//latin capital letter A with tilde
\r
253 new HTMLEscapeTable("Auml;", (char)0xC4),//latin capital letter A with diaeresis
\r
254 new HTMLEscapeTable("Aring;", (char)0xC5),//latin capital letter A with ring above = latin capital letter A ring
\r
255 new HTMLEscapeTable("AElig;", (char)0xC6),//latin capital letter AE = latin capital ligature AE
\r
256 new HTMLEscapeTable("Ccedil;", (char)0xC7),//latin capital letter C with cedilla
\r
257 new HTMLEscapeTable("Egrave;", (char)0xC8),//latin capital letter E with grave
\r
258 new HTMLEscapeTable("Eacute;", (char)0xC9),//latin capital letter E with acute
\r
259 new HTMLEscapeTable("Ecirc;", (char)0xCA),//latin capital letter E with circumflex
\r
260 new HTMLEscapeTable("Euml;",(char) 0xCB),//latin capital letter E with diaeresis
\r
261 new HTMLEscapeTable("Igrave;", (char)0xCC),//latin capital letter I with grave
\r
262 new HTMLEscapeTable("Iacute;", (char)0xCD),//latin capital letter I with acute
\r
263 new HTMLEscapeTable("Icirc;", (char)0xCE),//latin capital letter I with circumflex
\r
264 new HTMLEscapeTable("Iuml;",(char) 0xCF),//latin capital letter I with diaeresis
\r
265 new HTMLEscapeTable("ETH;", (char)0xD0),//latin capital letter ETH
\r
266 new HTMLEscapeTable("Ntilde;", (char)0xD1),//latin capital letter N with tilde
\r
267 new HTMLEscapeTable("Ograve;", (char)0xD2),//latin capital letter O with grave
\r
268 new HTMLEscapeTable("Oacute;",(char) 0xD3),//latin capital letter O with acute
\r
269 new HTMLEscapeTable("Ocirc;", (char)0xD4),//latin capital letter O with circumflex
\r
270 new HTMLEscapeTable("Otilde;", (char)0xD5),//latin capital letter O with tilde
\r
271 new HTMLEscapeTable("Ouml;", (char)0xD6),//latin capital letter O with diaeresis
\r
272 new HTMLEscapeTable("times;", (char)0xD7),//multiplication sign
\r
273 new HTMLEscapeTable("Oslash;", (char)0xD8),//latin capital letter O with stroke = latin capital letter O slash
\r
274 new HTMLEscapeTable("Ugrave;", (char)0xD90),//latin capital letter U with grave
\r
275 new HTMLEscapeTable("Uacute;", (char)0xDA),//latin capital letter U with acute
\r
276 new HTMLEscapeTable("Ucirc;", (char)0xDB),//latin capital letter U with circumflex
\r
277 new HTMLEscapeTable("Uuml;", (char)0xDC),//latin capital letter U with diaeresis
\r
278 new HTMLEscapeTable("Yacute", (char)0xDD),//latin capital letter Y with acute
\r
279 new HTMLEscapeTable("THORN;", (char)0xDE),//latin capital letter THORN
\r
280 new HTMLEscapeTable("szlig;", (char)0xDF),//latin small letter sharp s = ess-zed
\r
281 new HTMLEscapeTable("agrave;", (char)0xE0),//latin small letter a with grave = latin small letter a grave
\r
282 new HTMLEscapeTable("aacute;", (char)0xE1),//latin small letter a with acute
\r
283 new HTMLEscapeTable("acirc;", (char)0xE2),//latin small letter a with circumflex
\r
284 new HTMLEscapeTable("atilde;", (char)0xE3),//latin small letter a with tilde
\r
285 new HTMLEscapeTable("auml;", (char)0xE4),//latin small letter a with diaeresis
\r
286 new HTMLEscapeTable("aring;", (char)0xE5),//latin small letter a with ring above = latin small letter a ring
\r
287 new HTMLEscapeTable("aelig;", (char)0xE6),//latin small letter ae = latin small ligature ae
\r
288 new HTMLEscapeTable("ccedil;", (char)0xE7),//latin small letter c with cedilla
\r
289 new HTMLEscapeTable("egrave;", (char)0xE8),//latin small letter e with grave
\r
290 new HTMLEscapeTable("eacute;", (char)0xE9),//latin small letter e with acute
\r
291 new HTMLEscapeTable("ecirc;", (char)0xEA),//latin small letter e with circumflex
\r
292 new HTMLEscapeTable("euml;", (char)0xEB),//latin small letter e with diaeresis
\r
293 new HTMLEscapeTable("igrave;", (char)0xEC),//latin small letter i with grave
\r
294 new HTMLEscapeTable("iacute;", (char)0xED),//latin small letter i with acute
\r
295 new HTMLEscapeTable("icirc;", (char)0xEE),//latin small letter i with circumflex
\r
296 new HTMLEscapeTable("iuml;", (char)0xEF),//latin small letter i with diaeresis
\r
297 new HTMLEscapeTable("eth;", (char)0xF0),//latin small letter eth
\r
298 new HTMLEscapeTable("ntilde;", (char)0xF1),//latin small letter n with tilde
\r
299 new HTMLEscapeTable("ograve;", (char)0xF2),//latin small letter o with grave
\r
300 new HTMLEscapeTable("oacute;", (char)0xF3),//latin small letter o with acute
\r
301 new HTMLEscapeTable("ocirc;",(char) 0xF4),//latin small letter o with circumflex
\r
302 new HTMLEscapeTable("otilde;", (char)0xF5),//latin small letter o with tilde
\r
303 new HTMLEscapeTable("ouml;", (char)0xF6),//latin small letter o with diaeresis
\r
304 new HTMLEscapeTable("divide;", (char)0xF7),//division sign
\r
305 new HTMLEscapeTable("oslash;", (char)0xF8),//latin small letter o with stroke, = latin small letter o slash
\r
306 new HTMLEscapeTable("ugrave;", (char)0xF9),//latin small letter u with grave
\r
307 new HTMLEscapeTable("uacute;", (char)0xFA),//latin small letter u with acute
\r
308 new HTMLEscapeTable("ucirc;", (char)0xFB),//latin small letter u with circumflex
\r
309 new HTMLEscapeTable("uuml;", (char)0xFC),//latin small letter u with diaeresis
\r
310 new HTMLEscapeTable("yacute;", (char)0xFD),//latin small letter y with acute
\r
311 new HTMLEscapeTable("thorn;",(char) 0xFE),//latin small letter thorn with
\r
312 new HTMLEscapeTable("yuml;", (char)0xFF),//latin small letter y with diaeresis
\r
315 new HTMLEscapeTable("OElig;", (char)0x0152),//latin capital ligature OE
\r
316 new HTMLEscapeTable("oelig;", (char)0x0153),//latin small ligature oe
\r
317 new HTMLEscapeTable("Scaron;", (char)0x0160),//latin capital letter S with caron
\r
318 new HTMLEscapeTable("scaron;", (char)0x0161),//latin small letter s with caron
\r
319 new HTMLEscapeTable("Yuml;", (char)0x0178),//latin capital letter Y with diaeresis
\r
320 new HTMLEscapeTable("fnof;", (char)0x0192),//latin small f with hook = function = florin
\r
321 new HTMLEscapeTable("circ;", (char)0x02C6),//modifier letter circumflex accent
\r
322 new HTMLEscapeTable("tilde;", (char)0x02DC),//small tilde
\r
323 new HTMLEscapeTable("Alpha;", (char)0x391),//greek capital letter alpha
\r
324 new HTMLEscapeTable("Beta;", (char)0x392),//greek capital letter beta
\r
325 new HTMLEscapeTable("Gamma;", (char)0x393),//greek capital letter gamma
\r
326 new HTMLEscapeTable("Delta;", (char)0x394),//greek capital letter delta
\r
327 new HTMLEscapeTable("Epsilon;", (char)0x395),//greek capital letter epsilon
\r
328 new HTMLEscapeTable("Zeta;", (char)0x396),//greek capital letter zeta
\r
329 new HTMLEscapeTable("Eta;", (char)0x397),//greek capital letter eta
\r
330 new HTMLEscapeTable("Theta;", (char)0x398),//greek capital letter theta
\r
331 new HTMLEscapeTable("Iota;", (char)0x399),//greek capital letter iota
\r
332 new HTMLEscapeTable("Kappa;", (char)0x39A),//greek capital letter kappa
\r
333 new HTMLEscapeTable("Lambda;", (char)0x39B),//greek capital letter lambda
\r
334 new HTMLEscapeTable("Mu;", (char)0x39C),//greek capital letter mu
\r
335 new HTMLEscapeTable("Nu;", (char)0x39D),//greek capital letter nu
\r
336 new HTMLEscapeTable("Xi;", (char)0x39E),//greek capital letter xi
\r
337 new HTMLEscapeTable("Omicron;", (char)0x39F),//greek capital letter omicron
\r
338 new HTMLEscapeTable("Pi;", (char)0x3A0),//greek capital letter pi
\r
339 new HTMLEscapeTable("Rho;", (char)0x3A1),//greek capital letter rho
\r
340 new HTMLEscapeTable("Sigma;", (char)0x3A3),//greek capital letter sigma
\r
341 new HTMLEscapeTable("Tau;", (char)0x3A4),//greek capital letter tau
\r
342 new HTMLEscapeTable("Upsilon;", (char)0x3A5),//greek capital letter upsilon
\r
343 new HTMLEscapeTable("Phi;", (char)0x3A6),//greek capital letter phi
\r
344 new HTMLEscapeTable("Chi;", (char)0x3A7),//greek capital letter chi
\r
345 new HTMLEscapeTable("Psi;", (char)0x3A8),//greek capital letter psi
\r
346 new HTMLEscapeTable("Omega;", (char)0x3A9),//greek capital letter omega
\r
347 new HTMLEscapeTable("alpha;", (char)0x3B1),//greek small letter alpha
\r
348 new HTMLEscapeTable("beta;", (char)0x3B2),//greek small letter beta
\r
349 new HTMLEscapeTable("gamma;", (char)0x3B3),//greek small letter gamma
\r
350 new HTMLEscapeTable("delta;", (char)0x3B4),//greek small letter delta
\r
351 new HTMLEscapeTable("epsilon;", (char)0x3B5),//greek small letter epsilon
\r
352 new HTMLEscapeTable("zeta;", (char)0x3B6),//greek small letter zeta
\r
353 new HTMLEscapeTable("eta;", (char)0x3B7),//greek small letter eta
\r
354 new HTMLEscapeTable("theta;", (char)0x3B8),//greek small letter theta
\r
355 new HTMLEscapeTable("iota;", (char)0x3B9),//greek small letter iota
\r
356 new HTMLEscapeTable("kappa;", (char)0x3BA),//greek small letter kappa
\r
357 new HTMLEscapeTable("lambda;", (char)0x3BB),//greek small letter lambda
\r
358 new HTMLEscapeTable("mu;", (char)0x3BC),//greek small letter mu
\r
359 new HTMLEscapeTable("nu;", (char)0x3BD),//greek small letter nu
\r
360 new HTMLEscapeTable("xi;", (char)0x3BE),//greek small letter xi
\r
361 new HTMLEscapeTable("omicron;", (char)0x3BF),//greek small letter omicron
\r
362 new HTMLEscapeTable("pi;", (char)0x3C0),//greek small letter pi
\r
363 new HTMLEscapeTable("rho;", (char)0x3C1),//greek small letter rho
\r
364 new HTMLEscapeTable("sigmaf;", (char)0x3C2),//greek small letter final sigma
\r
365 new HTMLEscapeTable("sigma;", (char)0x3C3),//greek small letter sigma
\r
366 new HTMLEscapeTable("tau;", (char)0x3C4),//greek small letter tau
\r
367 new HTMLEscapeTable("upsilon;", (char)0x3C5),//greek small letter upsilon
\r
368 new HTMLEscapeTable("phi;", (char)0x3C6),//greek small letter phi
\r
369 new HTMLEscapeTable("chi;", (char)0x3C7),//greek small letter chi
\r
370 new HTMLEscapeTable("psi;", (char)0x3C8),//greek small letter psi
\r
371 new HTMLEscapeTable("omega;", (char)0x3C9),//greek small letter omega
\r
372 new HTMLEscapeTable("thetasym;", (char)0x3D1),//greek small letter theta symbol
\r
373 new HTMLEscapeTable("upsih;", (char)0x3D2),//greek upsilon with hook symbol
\r
374 new HTMLEscapeTable("piv;", (char)0x3D3),//greek pi symbol
\r
375 new HTMLEscapeTable("bull;", (char)0x2022),//bullet = black small circle
\r
376 new HTMLEscapeTable("hellip;", (char)0x2026),//horizontal ellipsis = three dot leader
\r
377 new HTMLEscapeTable("prime;", (char)0x2032),//prime = minutes = feet
\r
378 new HTMLEscapeTable("Prime;", (char)0x2033),//double prime = seconds = inches
\r
379 new HTMLEscapeTable("oline;", (char)0x203E),//overline = spacing overscore
\r
380 new HTMLEscapeTable("frasl;", (char)0x2044),//fraction slash
\r
381 new HTMLEscapeTable("weierp;", (char)0x2118),//script capital P = power set = Weierstrass p
\r
382 new HTMLEscapeTable("image;", (char)0x2111),//blackletter capital I = imaginary part
\r
383 new HTMLEscapeTable("real;", (char)0x211C),//blackletter capital R = real part symbol
\r
384 new HTMLEscapeTable("trade;", (char)0x2122),//trade mark sign
\r
385 new HTMLEscapeTable("alefsym;", (char)0x2135),//alef symbol = first transfinite cardinal
\r
386 new HTMLEscapeTable("larr;", (char)0x2190),//leftwards arrow
\r
387 new HTMLEscapeTable("uarr;", (char)0x2191),//upwards arrow
\r
388 new HTMLEscapeTable("rarr;", (char)0x2192),//rightwards arrow
\r
389 new HTMLEscapeTable("darr;", (char)0x2193),//downwards arrow
\r
390 new HTMLEscapeTable("harr;", (char)0x2194),//left right arrow
\r
391 new HTMLEscapeTable("crarr;", (char)0x21B5),//downwards arrow with corner leftwards = carriage return
\r
392 new HTMLEscapeTable("lArr;", (char)0x21D0),//leftwards double arrow
\r
393 new HTMLEscapeTable("uArr;", (char)0x21D1),//upwards double arrow
\r
394 new HTMLEscapeTable("rArr;", (char)0x21D2),//rightwards double arrow
\r
395 new HTMLEscapeTable("dArr;", (char)0x21D3),//downwards double arrow
\r
396 new HTMLEscapeTable("hArr;", (char)0x21D4),//left right double arrow
\r
397 new HTMLEscapeTable("forall;", (char)0x2200),//for all
\r
398 new HTMLEscapeTable("part;", (char)0x2202),//partial differential
\r
399 new HTMLEscapeTable("exist;", (char)0x2203),//there exists
\r
400 new HTMLEscapeTable("empty;", (char)0x2205),//empty set = null set = diameter
\r
401 new HTMLEscapeTable("nabla;", (char)0x2207),//nabla = backward difference
\r
402 new HTMLEscapeTable("isin;", (char)0x2208),//element of
\r
403 new HTMLEscapeTable("notin;", (char)0x2209),//not an element of
\r
404 new HTMLEscapeTable("ni;", (char)0x220B),//contains as member
\r
405 new HTMLEscapeTable("prod;", (char)0x220F),//n-ary product = product sign
\r
406 new HTMLEscapeTable("sum;", (char)0x2211),//n-ary sumation
\r
407 new HTMLEscapeTable("minus;", (char)0x2212),//minus sign
\r
408 new HTMLEscapeTable("lowast;", (char)0x2217),//asterisk operator
\r
409 new HTMLEscapeTable("radic;", (char)0x221A),//square root = radical sign
\r
410 new HTMLEscapeTable("prop;", (char)0x221D),//proportional to
\r
411 new HTMLEscapeTable("infin;", (char)0x221E),//infinity
\r
412 new HTMLEscapeTable("ang;", (char)0x2220),//angle
\r
413 new HTMLEscapeTable("and;", (char)0x2227),//logical and = wedge
\r
414 new HTMLEscapeTable("or;", (char)0x2228),//logical or = vee
\r
415 new HTMLEscapeTable("cap;", (char)0x2229),//intersection = cap
\r
416 new HTMLEscapeTable("cup;", (char)0x222A),//union = cup
\r
417 new HTMLEscapeTable("int;", (char)0x222B),//integral
\r
418 new HTMLEscapeTable("there4;", (char)0x2234),//therefore
\r
419 new HTMLEscapeTable("sim;", (char)0x223C),//tilde operator = varies with = similar to
\r
420 new HTMLEscapeTable("cong;", (char)0x2245),//approximately equal to
\r
421 new HTMLEscapeTable("asymp;", (char)0x2248),//almost equal to = asymptotic to
\r
422 new HTMLEscapeTable("ne;", (char)0x2260),//not equal to
\r
423 new HTMLEscapeTable("equiv;", (char)0x2261),//identical to
\r
424 new HTMLEscapeTable("le;", (char)0x2264),//less-than or equal to
\r
425 new HTMLEscapeTable("ge;", (char)0x2265),//greater-than or equal to
\r
426 new HTMLEscapeTable("sub;", (char)0x2282),//subset of
\r
427 new HTMLEscapeTable("sup;", (char)0x2283),//superset of
\r
428 new HTMLEscapeTable("nsub;", (char)0x2284),//not a subset of
\r
429 new HTMLEscapeTable("sube;", (char)0x2286),//subset of or equal to
\r
430 new HTMLEscapeTable("supe;", (char)0x2287),//superset of or equal to
\r
431 new HTMLEscapeTable("oplus;", (char)0x2295),//circled plus = direct sum
\r
432 new HTMLEscapeTable("otimes;", (char)0x2297),//circled times = vector product
\r
433 new HTMLEscapeTable("perp;", (char)0x22A5),//up tack = orthogonal to = perpendicular
\r
434 new HTMLEscapeTable("sdot;", (char)0x22C5),//dot operator
\r
435 new HTMLEscapeTable("lceil;", (char)0x2308),//left ceiling = apl upstile
\r
436 new HTMLEscapeTable("rceil;", (char)0x2309),//right ceiling
\r
437 new HTMLEscapeTable("lfloor;", (char)0x230A),//left floor = apl downstile
\r
438 new HTMLEscapeTable("rfloor;", (char)0x230B),//right floor
\r
439 new HTMLEscapeTable("lang;", (char)0x2329),//left-pointing angle bracket = bra
\r
440 new HTMLEscapeTable("rang;", (char)0x232A),//right-pointing angle bracket = ket
\r
441 new HTMLEscapeTable("loz;", (char)0x25CA),//lozenge
\r
442 new HTMLEscapeTable("spades;", (char)0x2660),//black spade suit
\r
443 new HTMLEscapeTable("clubs;", (char)0x2663),//black club suit = shamrock
\r
444 new HTMLEscapeTable("hearts;", (char)0x2665),//black heart suit = valentine
\r
445 new HTMLEscapeTable("diams;", (char)0x2666),//black diamond suit
\r
446 new HTMLEscapeTable("ensp;", (char)0x2002),//en space
\r
447 new HTMLEscapeTable("emsp;", (char)0x2003),//em space
\r
448 new HTMLEscapeTable("thinsp;", (char)0x2009),//thin space
\r
449 new HTMLEscapeTable("zwnj;", (char)0x200C),//zero width non-joiner
\r
450 new HTMLEscapeTable("zwj;", (char)0x200D),//zero width joiner
\r
451 new HTMLEscapeTable("lrm;", (char)0x200E),//left-to-right mark
\r
452 new HTMLEscapeTable("rlm;", (char)0x200F),//right-to-left mark
\r
453 new HTMLEscapeTable("ndash;", (char)0x2013),//en dash
\r
454 new HTMLEscapeTable("mdash;", (char)0x2014),//em dash
\r
455 new HTMLEscapeTable("lsquo;", (char)0x2018),//left single quotation mark
\r
456 new HTMLEscapeTable("rsquo;", (char)0x2019),//right single quotation mark
\r
457 new HTMLEscapeTable("sbquo;", (char)0x201A),//single low-9 quotation mark
\r
458 new HTMLEscapeTable("ldquo;", (char)0x201C),//left double quotation mark
\r
459 new HTMLEscapeTable("rdquo;", (char)0x201D),//right double quotation mark
\r
460 new HTMLEscapeTable("bdquo;", (char)0x201E),//double low-9 quotation mark
\r
461 new HTMLEscapeTable("dagger;", (char)0x2020),//dagger
\r
462 new HTMLEscapeTable("Dagger;", (char)0x2021),//double dagger
\r
463 new HTMLEscapeTable("permil;", (char)0x2030),//per mille sign
\r
464 new HTMLEscapeTable("lsaquo;", (char)0x2039),//single left-pointing angle quotation mark
\r
466 }// end of class HTMLEscape
\r