OSDN Git Service

Initial contents of nt2chview
[nt2chview/stable.git] / NT2chCtrl45 / html / HtmlEscape.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Globalization;\r
4 using System.IO;\r
5 using System.Text;\r
6 \r
7 namespace NT2chCtrl.html\r
8 {\r
9     class HtmlEscape\r
10     {\r
11         static bool mInit = false;\r
12         public static void init()\r
13         {\r
14             if (mInit)\r
15                 return;\r
16             HTMLEscapeTable.init();\r
17             mInit = true;\r
18         }\r
19 \r
20         public static char parseHTMLDecimalHexEscape(String source, int offset, out int retVal)\r
21         {\r
22             StringBuilder wrk = new StringBuilder(16);\r
23             bool fHEX = false;\r
24             retVal = 0;\r
25             char c;\r
26             //int nVal;\r
27             byte[] bVal = new byte[2];\r
28             bool loop = true;\r
29             for (int j = offset; j < source.Length; j++)\r
30             {\r
31                 c = source[j];\r
32                 if (';' == c)\r
33                 {\r
34                     if (wrk.Length > 0 && ((fHEX && wrk.Length <= 4) || !fHEX && wrk.Length <= 5))\r
35                     {\r
36                         //DebugUtil.log("convert hex escape: 0x" + wrk);\r
37                         //c = (char)Integer.parseInt(wrk, 16);\r
38                         retVal = j + 1;\r
39                         try\r
40                         {\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
48                             sr.Close();\r
49                             ms.Close();\r
50                             return c;\r
51                         }\r
52                         catch (Exception e)\r
53                         {\r
54                             return '\0';\r
55                         }\r
56                     }\r
57                     break;\r
58                 }\r
59                 else if ('x' == c || 'X' == c)\r
60                 {\r
61                     if (j != offset)\r
62                     {\r
63                         break;\r
64                     }\r
65                     fHEX = true;\r
66                 }\r
67                 else\r
68                 {\r
69                     switch (HtmlParser.getCharToken(c))\r
70                     {\r
71                         case HtmlParser.CHAR_TOKEN.NUMBER:\r
72                             wrk.Append(c);// = wrk + c;\r
73                             break;\r
74                         case HtmlParser.CHAR_TOKEN.ALPHA:\r
75                             if (!fHEX)\r
76                             {\r
77                                 loop = false;\r
78                                 break;\r
79                             }\r
80                             wrk.Append(c);// = wrk + c;\r
81                             break;\r
82                         default:\r
83                             loop = false;\r
84                             break;\r
85                     }\r
86                     if (!loop)\r
87                         break;\r
88                 }\r
89             }// End of the for\r
90             return '\0';\r
91         }\r
92 \r
93 \r
94         class HttpEscapeTree\r
95         {\r
96             public char mC;\r
97             public char mCode;\r
98             public List<HttpEscapeTree> mTree = new List<HttpEscapeTree>();\r
99             public HttpEscapeTree(char c) { mC = c; mCode = '\0'; }\r
100         }\r
101 \r
102 \r
103 \r
104         public class HTMLEscapeTable\r
105         {\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
111 \r
112             HTMLEscapeTable(String escape, char code)\r
113             {\r
114                 mEscape = escape;\r
115                 mCode = code;\r
116             }\r
117 \r
118             //static int counter = 0;\r
119 \r
120             public static char getCodeFromEscape(String escape, int index, out int returnLength)\r
121             {\r
122                 return findTree(mTopTree, escape, index, out returnLength);\r
123             }\r
124 \r
125             static char findTree(HttpEscapeTree parent, String escape, int index, out int returnLength)\r
126             {\r
127 \r
128                 if (escape.Length == index)\r
129                 {\r
130                     returnLength = -1;\r
131                     return '\0';\r
132                 }\r
133 \r
134                 char c = escape[index];\r
135 \r
136                 for (int i = 0; i < parent.mTree.Count; i++)\r
137                 {\r
138                     HttpEscapeTree current = parent.mTree[i];\r
139                     if (current.mC == c)\r
140                     {\r
141                         index++;\r
142                         if (';' == c)\r
143                         {\r
144                             returnLength = index;\r
145                             return current.mCode;\r
146                         }\r
147                         return findTree(current, escape, index, out returnLength);\r
148                     }\r
149                 }\r
150                 returnLength = -1;\r
151                 return '\0';// No match code available\r
152             }\r
153 \r
154 \r
155             public static void init()\r
156             {\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
161                 {\r
162                     parseTree(mTopTree, htmlEscape[i].mEscape, 0, htmlEscape[i].mCode);\r
163                 }\r
164             }\r
165 \r
166 \r
167             static void parseTree(HttpEscapeTree tree, String source, int index, char code)\r
168             {\r
169                 try\r
170                 {\r
171                     List<HttpEscapeTree> parentTree = tree.mTree;\r
172                     HttpEscapeTree newTree;\r
173                     char c = source[index];\r
174                     int i;\r
175                     for (i = 0; i < parentTree.Count; i++)\r
176                     {\r
177                         if (parentTree[i].mC == c)\r
178                         {\r
179                             break;\r
180                         }\r
181                     }\r
182                     if (i == parentTree.Count)\r
183                     {\r
184                         newTree = new HttpEscapeTree(c);\r
185                         parentTree.Add(newTree);\r
186                         //    NTDebug.l("HTMLEscape.parseTree(): err occured. #1");\r
187                         //    return;\r
188                         //}\r
189                     }\r
190                     else\r
191                     {\r
192                         newTree = parentTree[i];//.get(i);\r
193                     }\r
194                     index++;\r
195                     if (source.Length == index)\r
196                     {\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
200                     }\r
201                     else\r
202                     {\r
203                         parseTree(newTree, source, index, code);\r
204                     }\r
205                 }\r
206                 catch (Exception e)\r
207                 {\r
208                     //NTDebug.l(e.Message);\r
209                 }\r
210             }\r
211 \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
313         \r
314         \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
465                 };\r
466         }// end of class HTMLEscape\r
467     }\r
468 }\r