ReadMe: Changed the ``big picture'' ASCII art and wrote about the HTML entity replace...
[licom.git] / html_entities.js
1 entityList = new Array ();
2 charList   = new Array ();
3
4 /* Really important entities */
5 entityList.push ("amp");    charList.push ("&"); /* This MUST be the first entity! */
6 entityList.push ("gt");     charList.push (">");
7 entityList.push ("lt");     charList.push ("<");
8 entityList.push ("quot");   charList.push ('"');
9 entityList.push ("apos");   charList.push ("'");
10
11 /* RFC 1866, section 14 */
12 entityList.push ("nbsp");   charList.push (unescape ("%a0"));
13 entityList.push ("iexcl");  charList.push (unescape ("%a1"));
14 entityList.push ("cent");   charList.push (unescape ("%a2"));
15 entityList.push ("pound");  charList.push (unescape ("%a3"));
16 entityList.push ("curren"); charList.push (unescape ("%a4"));
17 entityList.push ("yen");    charList.push (unescape ("%a5"));
18 entityList.push ("brvbar"); charList.push (unescape ("%a6"));
19 entityList.push ("sect");   charList.push (unescape ("%a7"));
20 entityList.push ("uml");    charList.push (unescape ("%a8"));
21 entityList.push ("copy");   charList.push (unescape ("%a9"));
22 entityList.push ("ordf");   charList.push (unescape ("%aa"));
23 entityList.push ("laquo");  charList.push (unescape ("%ab"));
24 entityList.push ("not");    charList.push (unescape ("%ac"));
25 entityList.push ("shy");    charList.push (unescape ("%ad"));
26 entityList.push ("reg");    charList.push (unescape ("%ae"));
27 entityList.push ("macr");   charList.push (unescape ("%af"));
28 entityList.push ("deg");    charList.push (unescape ("%b0"));
29 entityList.push ("plusmn"); charList.push (unescape ("%b1"));
30 entityList.push ("sup2");   charList.push (unescape ("%b2"));
31 entityList.push ("sup3");   charList.push (unescape ("%b3"));
32 entityList.push ("acute");  charList.push (unescape ("%b4"));
33 entityList.push ("micro");  charList.push (unescape ("%b5"));
34 entityList.push ("para");   charList.push (unescape ("%b6"));
35 entityList.push ("middot"); charList.push (unescape ("%b7"));
36 entityList.push ("cedil");  charList.push (unescape ("%b8"));
37 entityList.push ("sup1");   charList.push (unescape ("%b9"));
38 entityList.push ("ordm");   charList.push (unescape ("%ba"));
39 entityList.push ("raquo");  charList.push (unescape ("%bb"));
40 entityList.push ("frac14"); charList.push (unescape ("%bc"));
41 entityList.push ("frac12"); charList.push (unescape ("%bd"));
42 entityList.push ("frac34"); charList.push (unescape ("%be"));
43 entityList.push ("iquest"); charList.push (unescape ("%bf"));
44 entityList.push ("Agrave"); charList.push (unescape ("%c0"));
45 entityList.push ("Aacute"); charList.push (unescape ("%c1"));
46 entityList.push ("Acirc");  charList.push (unescape ("%c2"));
47 entityList.push ("Atilde"); charList.push (unescape ("%c3"));
48 entityList.push ("Auml");   charList.push (unescape ("%c4"));
49 entityList.push ("Aring");  charList.push (unescape ("%c5"));
50 entityList.push ("AElig");  charList.push (unescape ("%c6"));
51 entityList.push ("Ccedil"); charList.push (unescape ("%c7"));
52 entityList.push ("Egrave"); charList.push (unescape ("%c8"));
53 entityList.push ("Eacute"); charList.push (unescape ("%c9"));
54 entityList.push ("Ecirc");  charList.push (unescape ("%ca"));
55 entityList.push ("Euml");   charList.push (unescape ("%cb"));
56 entityList.push ("Igrave"); charList.push (unescape ("%cc"));
57 entityList.push ("Iacute"); charList.push (unescape ("%cd"));
58 entityList.push ("Icirc");  charList.push (unescape ("%ce"));
59 entityList.push ("Iuml");   charList.push (unescape ("%cf"));
60 entityList.push ("ETH");    charList.push (unescape ("%d0"));
61 entityList.push ("Ntilde"); charList.push (unescape ("%d1"));
62 entityList.push ("Ograve"); charList.push (unescape ("%d2"));
63 entityList.push ("Oacute"); charList.push (unescape ("%d3"));
64 entityList.push ("Ocirc");  charList.push (unescape ("%d4"));
65 entityList.push ("Otilde"); charList.push (unescape ("%d5"));
66 entityList.push ("Ouml");   charList.push (unescape ("%d6"));
67 entityList.push ("times");  charList.push (unescape ("%d7"));
68 entityList.push ("Oslash"); charList.push (unescape ("%d8"));
69 entityList.push ("Ugrave"); charList.push (unescape ("%d9"));
70 entityList.push ("Uacute"); charList.push (unescape ("%da"));
71 entityList.push ("Ucirc");  charList.push (unescape ("%db"));
72 entityList.push ("Uuml");   charList.push (unescape ("%dc"));
73 entityList.push ("Yacute"); charList.push (unescape ("%dd"));
74 entityList.push ("THORN");  charList.push (unescape ("%de"));
75 entityList.push ("szlig");  charList.push (unescape ("%df"));
76 entityList.push ("agrave"); charList.push (unescape ("%e0"));
77 entityList.push ("aacute"); charList.push (unescape ("%e1"));
78 entityList.push ("acirc");  charList.push (unescape ("%e2"));
79 entityList.push ("atilde"); charList.push (unescape ("%e3"));
80 entityList.push ("auml");   charList.push (unescape ("%e4"));
81 entityList.push ("aring");  charList.push (unescape ("%e5"));
82 entityList.push ("aelig");  charList.push (unescape ("%e6"));
83 entityList.push ("ccedil"); charList.push (unescape ("%e7"));
84 entityList.push ("egrave"); charList.push (unescape ("%e8"));
85 entityList.push ("eacute"); charList.push (unescape ("%e9"));
86 entityList.push ("ecirc");  charList.push (unescape ("%ea"));
87 entityList.push ("euml");   charList.push (unescape ("%eb"));
88 entityList.push ("igrave"); charList.push (unescape ("%ec"));
89 entityList.push ("iacute"); charList.push (unescape ("%ed"));
90 entityList.push ("icirc");  charList.push (unescape ("%ee"));
91 entityList.push ("iuml");   charList.push (unescape ("%ef"));
92 entityList.push ("eth");    charList.push (unescape ("%f0"));
93 entityList.push ("ntilde"); charList.push (unescape ("%f1"));
94 entityList.push ("ograve"); charList.push (unescape ("%f2"));
95 entityList.push ("oacute"); charList.push (unescape ("%f3"));
96 entityList.push ("ocirc");  charList.push (unescape ("%f4"));
97 entityList.push ("otilde"); charList.push (unescape ("%f5"));
98 entityList.push ("ouml");   charList.push (unescape ("%f6"));
99 entityList.push ("divide"); charList.push (unescape ("%f7"));
100 entityList.push ("oslash"); charList.push (unescape ("%f8"));
101 entityList.push ("ugrave"); charList.push (unescape ("%f9"));
102 entityList.push ("uacute"); charList.push (unescape ("%fa"));
103 entityList.push ("ucirc");  charList.push (unescape ("%fb"));
104 entityList.push ("uuml");   charList.push (unescape ("%fc"));
105 entityList.push ("yacute"); charList.push (unescape ("%fd"));
106 entityList.push ("thorn");  charList.push (unescape ("%fe"));
107 entityList.push ("yuml");   charList.push (unescape ("%ff"));
108
109 /* UTF-8 characters */
110 entityList.push ("OElig");  charList.push (unescape ("%u0152"));
111 entityList.push ("oelig");  charList.push (unescape ("%u0153"));
112 entityList.push ("Scaron"); charList.push (unescape ("%u0160"));
113 entityList.push ("scaron"); charList.push (unescape ("%u0161"));
114 entityList.push ("Yuml");   charList.push (unescape ("%u0178"));
115 entityList.push ("fnof");   charList.push (unescape ("%u0192"));
116 entityList.push ("circ");   charList.push (unescape ("%u02c6"));
117 entityList.push ("tilde");  charList.push (unescape ("%u02dc"));
118 entityList.push ("Alpha");  charList.push (unescape ("%u0391"));
119 entityList.push ("Beta");   charList.push (unescape ("%u0392"));
120 entityList.push ("Gamma");  charList.push (unescape ("%u0393"));
121 entityList.push ("Delta");  charList.push (unescape ("%u0394"));
122 entityList.push ("Epsilon"); charList.push (unescape ("%u0395"));
123 entityList.push ("Zeta");   charList.push (unescape ("%u0396"));
124 entityList.push ("Eta");    charList.push (unescape ("%u0397"));
125 entityList.push ("Theta");  charList.push (unescape ("%u0398"));
126 entityList.push ("Iota");   charList.push (unescape ("%u0399"));
127 entityList.push ("Kappa");  charList.push (unescape ("%u039a"));
128 entityList.push ("Lambda"); charList.push (unescape ("%u039b"));
129 entityList.push ("Mu");     charList.push (unescape ("%u039c"));
130 entityList.push ("Nu");     charList.push (unescape ("%u039d"));
131 entityList.push ("Xi");     charList.push (unescape ("%u039e"));
132 entityList.push ("Omicron"); charList.push (unescape ("%u039f"));
133 entityList.push ("Pi");     charList.push (unescape ("%u03a0"));
134 entityList.push ("Rho");    charList.push (unescape ("%u03a1"));
135 entityList.push ("Sigma");  charList.push (unescape ("%u03a3"));
136 entityList.push ("Tau");    charList.push (unescape ("%u03a4"));
137 entityList.push ("Upsilon"); charList.push (unescape ("%u03a5"));
138 entityList.push ("Phi");    charList.push (unescape ("%u03a6"));
139 entityList.push ("Chi");    charList.push (unescape ("%u03a7"));
140 entityList.push ("Psi");    charList.push (unescape ("%u03a8"));
141 entityList.push ("Omega");  charList.push (unescape ("%u03a9"));
142 entityList.push ("alpha");  charList.push (unescape ("%u03b1"));
143 entityList.push ("beta");   charList.push (unescape ("%u03b2"));
144 entityList.push ("gamma");  charList.push (unescape ("%u03b3"));
145 entityList.push ("delta");  charList.push (unescape ("%u03b4"));
146 entityList.push ("epsilon"); charList.push (unescape ("%u03b5"));
147 entityList.push ("zeta");   charList.push (unescape ("%u03b6"));
148 entityList.push ("eta");    charList.push (unescape ("%u03b7"));
149 entityList.push ("theta");  charList.push (unescape ("%u03b8"));
150 entityList.push ("iota");   charList.push (unescape ("%u03b9"));
151 entityList.push ("kappa");  charList.push (unescape ("%u03ba"));
152 entityList.push ("lambda"); charList.push (unescape ("%u03bb"));
153 entityList.push ("mu");     charList.push (unescape ("%u03bc"));
154 entityList.push ("nu");     charList.push (unescape ("%u03bd"));
155 entityList.push ("xi");     charList.push (unescape ("%u03be"));
156 entityList.push ("omicron"); charList.push (unescape ("%u03bf"));
157 entityList.push ("pi");     charList.push (unescape ("%u03c0"));
158 entityList.push ("rho");    charList.push (unescape ("%u03c1"));
159 entityList.push ("sigmaf"); charList.push (unescape ("%u03c2"));
160 entityList.push ("sigma");  charList.push (unescape ("%u03c3"));
161 entityList.push ("tau");    charList.push (unescape ("%u03c4"));
162 entityList.push ("upsilon"); charList.push (unescape ("%u03c5"));
163 entityList.push ("phi");    charList.push (unescape ("%u03c6"));
164 entityList.push ("chi");    charList.push (unescape ("%u03c7"));
165 entityList.push ("psi");    charList.push (unescape ("%u03c8"));
166 entityList.push ("omega");  charList.push (unescape ("%u03c9"));
167 entityList.push ("thetasym"); charList.push (unescape ("%u03d1"));
168 entityList.push ("upsih");  charList.push (unescape ("%u03d2"));
169 entityList.push ("piv");    charList.push (unescape ("%u03d6"));
170 entityList.push ("ensp");   charList.push (unescape ("%u2002"));
171 entityList.push ("emsp");   charList.push (unescape ("%u2003"));
172 entityList.push ("thinsp"); charList.push (unescape ("%u2009"));
173 entityList.push ("zwnj");   charList.push (unescape ("%u200c"));
174 entityList.push ("zwj");    charList.push (unescape ("%u200d"));
175 entityList.push ("lrm");    charList.push (unescape ("%u200e"));
176 entityList.push ("rlm");    charList.push (unescape ("%u200f"));
177 entityList.push ("ndash");  charList.push (unescape ("%u2013"));
178 entityList.push ("mdash");  charList.push (unescape ("%u2014"));
179 entityList.push ("lsquo");  charList.push (unescape ("%u2018"));
180 entityList.push ("rsquo");  charList.push (unescape ("%u2019"));
181 entityList.push ("sbquo");  charList.push (unescape ("%u201a"));
182 entityList.push ("ldquo");  charList.push (unescape ("%u201c"));
183 entityList.push ("rdquo");  charList.push (unescape ("%u201d"));
184 entityList.push ("bdquo");  charList.push (unescape ("%u201e"));
185 entityList.push ("dagger"); charList.push (unescape ("%u2020"));
186 entityList.push ("Dagger"); charList.push (unescape ("%u2021"));
187 entityList.push ("bull");   charList.push (unescape ("%u2022"));
188 entityList.push ("hellip"); charList.push (unescape ("%u2026"));
189 entityList.push ("permil"); charList.push (unescape ("%u2030"));
190 entityList.push ("prime");  charList.push (unescape ("%u2032"));
191 entityList.push ("Prime");  charList.push (unescape ("%u2033"));
192 entityList.push ("lsaquo"); charList.push (unescape ("%u2039"));
193 entityList.push ("rsaquo"); charList.push (unescape ("%u203a"));
194 entityList.push ("oline");  charList.push (unescape ("%u203e"));
195 entityList.push ("frasl");  charList.push (unescape ("%u2044"));
196 entityList.push ("euro");   charList.push (unescape ("%u20ac"));
197 entityList.push ("image");  charList.push (unescape ("%u2111"));
198 entityList.push ("weierp"); charList.push (unescape ("%u2118"));
199 entityList.push ("real");   charList.push (unescape ("%u211c"));
200 entityList.push ("trade");  charList.push (unescape ("%u2122"));
201 entityList.push ("alefsym"); charList.push (unescape ("%u2135"));
202 entityList.push ("larr");   charList.push (unescape ("%u2190"));
203 entityList.push ("uarr");   charList.push (unescape ("%u2191"));
204 entityList.push ("rarr");   charList.push (unescape ("%u2192"));
205 entityList.push ("darr");   charList.push (unescape ("%u2193"));
206 entityList.push ("harr");   charList.push (unescape ("%u2194"));
207 entityList.push ("crarr");  charList.push (unescape ("%u21b5"));
208 entityList.push ("lArr");   charList.push (unescape ("%u21d0"));
209 entityList.push ("uArr");   charList.push (unescape ("%u21d1"));
210 entityList.push ("rArr");   charList.push (unescape ("%u21d2"));
211 entityList.push ("dArr");   charList.push (unescape ("%u21d3"));
212 entityList.push ("hArr");   charList.push (unescape ("%u21d4"));
213 entityList.push ("forall"); charList.push (unescape ("%u2200"));
214 entityList.push ("part");   charList.push (unescape ("%u2202"));
215 entityList.push ("exist");  charList.push (unescape ("%u2203"));
216 entityList.push ("empty");  charList.push (unescape ("%u2205"));
217 entityList.push ("nabla");  charList.push (unescape ("%u2207"));
218 entityList.push ("isin");   charList.push (unescape ("%u2208"));
219 entityList.push ("notin");  charList.push (unescape ("%u2209"));
220 entityList.push ("ni");     charList.push (unescape ("%u220b"));
221 entityList.push ("prod");   charList.push (unescape ("%u220f"));
222 entityList.push ("sum");    charList.push (unescape ("%u2211"));
223 entityList.push ("minus");  charList.push (unescape ("%u2212"));
224 entityList.push ("lowast"); charList.push (unescape ("%u2217"));
225 entityList.push ("radic");  charList.push (unescape ("%u221a"));
226 entityList.push ("prop");   charList.push (unescape ("%u221d"));
227 entityList.push ("infin");  charList.push (unescape ("%u221e"));
228 entityList.push ("ang");    charList.push (unescape ("%u2220"));
229 entityList.push ("and");    charList.push (unescape ("%u2227"));
230 entityList.push ("or");     charList.push (unescape ("%u2228"));
231 entityList.push ("cap");    charList.push (unescape ("%u2229"));
232 entityList.push ("cup");    charList.push (unescape ("%u222a"));
233 entityList.push ("int");    charList.push (unescape ("%u222b"));
234 entityList.push ("there4"); charList.push (unescape ("%u2234"));
235 entityList.push ("sim");    charList.push (unescape ("%u223c"));
236 entityList.push ("cong");   charList.push (unescape ("%u2245"));
237 entityList.push ("asymp");  charList.push (unescape ("%u2248"));
238 entityList.push ("ne");     charList.push (unescape ("%u2260"));
239 entityList.push ("equiv");  charList.push (unescape ("%u2261"));
240 entityList.push ("le");     charList.push (unescape ("%u2264"));
241 entityList.push ("ge");     charList.push (unescape ("%u2265"));
242 entityList.push ("sub");    charList.push (unescape ("%u2282"));
243 entityList.push ("sup");    charList.push (unescape ("%u2283"));
244 entityList.push ("nsub");   charList.push (unescape ("%u2284"));
245 entityList.push ("sube");   charList.push (unescape ("%u2286"));
246 entityList.push ("supe");   charList.push (unescape ("%u2287"));
247 entityList.push ("oplus");  charList.push (unescape ("%u2295"));
248 entityList.push ("otimes"); charList.push (unescape ("%u2297"));
249 entityList.push ("perp");   charList.push (unescape ("%u22a5"));
250 entityList.push ("sdot");   charList.push (unescape ("%u22c5"));
251 entityList.push ("lceil");  charList.push (unescape ("%u2308"));
252 entityList.push ("rceil");  charList.push (unescape ("%u2309"));
253 entityList.push ("lfloor"); charList.push (unescape ("%u230a"));
254 entityList.push ("rfloor"); charList.push (unescape ("%u230b"));
255 entityList.push ("lang");   charList.push (unescape ("%u2329"));
256 entityList.push ("rang");   charList.push (unescape ("%u232a"));
257 entityList.push ("loz");    charList.push (unescape ("%u25ca"));
258 entityList.push ("spades"); charList.push (unescape ("%u2660"));
259 entityList.push ("clubs");  charList.push (unescape ("%u2663"));
260 entityList.push ("hearts"); charList.push (unescape ("%u2665"));
261 entityList.push ("diams");  charList.push (unescape ("%u2666"));
262
263 function encode_entities (str)
264 {
265         for (var i = 0; (i < entityList.length) && (i < charList.length); i++)
266         {
267                 var entity = entityList[i];
268                 var mchar  = charList[i];
269
270                 var re = new RegExp (mchar);
271                 while (str.match (re))
272                 {
273                         str = str.replace (re, "&" + entity + ";");
274                 }
275         }
276
277         return (str);
278 }
279
280 function decode_entities (str)
281 {
282         if (!str.match (/&[A-Za-z0-9]+;/))
283                 return (str);
284
285         for (var i = 0; (i < entityList.length) && (i < charList.length); i++)
286         {
287                 var entity = entityList[i];
288                 var mchar  = charList[i];
289
290                 var re = new RegExp ("&" + entity + ";");
291                 while (str.match (re))
292                 {
293                         str = str.replace (re, mchar);
294                 }
295
296                 if (!str.match (/&[A-Za-z0-9]+;/))
297                         break;
298         }
299
300         return (str);
301 }