001: /* ====================================================================
002: * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
003: *
004: * Copyright (c) 1995-2002 Jcorporate Ltd. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * 3. The end-user documentation included with the redistribution,
019: * if any, must include the following acknowledgment:
020: * "This product includes software developed by Jcorporate Ltd.
021: * (http://www.jcorporate.com/)."
022: * Alternately, this acknowledgment may appear in the software itself,
023: * if and wherever such third-party acknowledgments normally appear.
024: *
025: * 4. "Jcorporate" and product names such as "Expresso" must
026: * not be used to endorse or promote products derived from this
027: * software without prior written permission. For written permission,
028: * please contact info@jcorporate.com.
029: *
030: * 5. Products derived from this software may not be called "Expresso",
031: * or other Jcorporate product names; nor may "Expresso" or other
032: * Jcorporate product names appear in their name, without prior
033: * written permission of Jcorporate Ltd.
034: *
035: * 6. No product derived from this software may compete in the same
036: * market space, i.e. framework, without prior written permission
037: * of Jcorporate Ltd. For written permission, please contact
038: * partners@jcorporate.com.
039: *
040: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
041: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
042: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
043: * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
044: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
045: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
046: * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
047: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
048: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
049: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
050: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
051: * SUCH DAMAGE.
052: * ====================================================================
053: *
054: * This software consists of voluntary contributions made by many
055: * individuals on behalf of the Jcorporate Ltd. Contributions back
056: * to the project(s) are encouraged when you make modifications.
057: * Please send them to support@jcorporate.com. For more information
058: * on Jcorporate Ltd. and its products, please see
059: * <http://www.jcorporate.com/>.
060: *
061: * Portions of this software are based upon other open source
062: * products and are subject to their respective licenses.
063: */
064:
065: package com.jcorporate.expresso.ext.report;
066:
067: import java.io.FilterWriter;
068: import java.io.IOException;
069: import java.io.Writer;
070: import java.util.ArrayList;
071:
072: /**
073: * A FilterWriter that understands the docbook entities and converts them from
074: * their character codes. This class is not threadsafe within a single instance
075: * and care should be taken.
076: *
077: * @author David Lloyd
078: */
079:
080: public class DocBookFilterWriter extends FilterWriter {
081:
082: /**
083: * The buffer holding characters read after an amperstand that may be an entity.
084: */
085: private char[] buffer = new char[32];
086: private int bufferLen = 0;
087:
088: /**
089: * Map entity to character code
090: */
091: private static ArrayList entities = null;
092:
093: static {
094: loadEntities();
095: }
096:
097: /**
098: * Create the writer on a stream.
099: *
100: * @param in The underlying output stream.
101: */
102: public DocBookFilterWriter(Writer in) {
103: super (in);
104: }
105:
106: /**
107: * Override from Writer.
108: */
109: public void close() throws IOException {
110: out.write(buffer, 0, bufferLen);
111: bufferLen = 0;
112: out.close();
113: }
114:
115: /**
116: * Override from Writer.
117: */
118: public void write(int c) throws IOException {
119: if (bufferLen > 0) {
120: if ((bufferLen == 1 && c == '#')
121: || (bufferLen == 2 && c == 'x')
122: || (bufferLen > 2 && bufferLen < buffer.length && Character
123: .isDigit((char) c))) {
124: buffer[bufferLen++] = (char) c;
125: return;
126: } else if (c == ';') {
127: if (bufferLen > 3 && buffer[0] == '&'
128: && buffer[1] == '#') {
129: int d = 0;
130: try {
131: if (buffer[2] == 'x') {
132: d = Integer.parseInt(new String(buffer, 3,
133: bufferLen - 3), 16);
134: } else {
135: d = Integer.parseInt(new String(buffer, 2,
136: bufferLen - 2), 16);
137: }
138:
139: String entity = lookupEntity(d);
140: if (entity != null) {
141: bufferLen = 0;
142: out.write(entity);
143: return;
144: }
145: } catch (Throwable t) {
146: }
147: }
148: out.write(buffer, 0, bufferLen);
149: bufferLen = 0;
150: return;
151: } else {
152: out.write(buffer, 0, bufferLen);
153: bufferLen = 0;
154: }
155: }
156: if (c == '&') {
157: buffer[bufferLen++] = (char) c;
158: } else if (c < 32 || c > 126) {
159: String entity = lookupEntity(c);
160: if (entity != null) {
161: out.write(entity);
162: return;
163: }
164: out.write(c);
165: } else {
166: out.write(c);
167: }
168: }
169:
170: public void write(char[] buf, int off, int len) throws IOException {
171: while (len-- > 0) {
172: write(buf[off++]);
173: }
174: }
175:
176: public void write(char[] buf) throws IOException {
177: write(buf, 0, buf.length);
178: }
179:
180: public void write(String s, int off, int len) throws IOException {
181: write(s.toCharArray(), off, len);
182: }
183:
184: public void write(String s) throws IOException {
185: write(s.toCharArray());
186: }
187:
188: /**
189: * Lookup the entity.
190: *
191: * @param ch The char we wish to find.
192: * @return The entity found.
193: */
194: private String lookupEntity(int ch) {
195: if (ch >= 0 && ch < entities.size()) {
196: return (String) entities.get(ch);
197: }
198: return null;
199: }
200:
201: private static void loadEntities() {
202: entities = new ArrayList(java.util.Arrays
203: .asList(new Object[0xFFFE]));
204:
205: entities.set(0x2003, " ");
206: entities.set(0x2002, " ");
207: entities.set(0x2004, " ");
208: entities.set(0x2005, " ");
209: entities.set(0x2007, " ");
210: entities.set(0x2008, " ");
211: entities.set(0x2009, " ");
212: entities.set(0x200A, " ");
213: entities.set(0x2014, "—");
214: entities.set(0x2013, "–");
215: entities.set(0x2010, "‐");
216: entities.set(0x2423, "␣");
217: entities.set(0x2026, "…");
218: entities.set(0x2025, "‥");
219: entities.set(0x2153, "⅓");
220: entities.set(0x2154, "⅔");
221: entities.set(0x2155, "⅕");
222: entities.set(0x2156, "⅖");
223: entities.set(0x2157, "⅗");
224: entities.set(0x2158, "⅘");
225: entities.set(0x2159, "⅙");
226: entities.set(0x215A, "⅚");
227: entities.set(0x2105, "℅");
228: entities.set(0x2588, "█");
229: entities.set(0x2580, "▀");
230: entities.set(0x2584, "▄");
231: entities.set(0x2591, "░");
232: entities.set(0x2592, "▒");
233: entities.set(0x2593, "▓");
234: entities.set(0x25AE, "▮");
235: entities.set(0x25CB, "○");
236: entities.set(0x25A1, "□");
237: entities.set(0x25AD, "▭");
238: entities.set(0x25B5, "▵");
239: entities.set(0x25BF, "▿");
240: entities.set(0x22C6, "☆");
241: entities.set(0x2022, "•");
242: entities.set(0x25AA, "▪");
243: entities.set(0x25B4, "▴");
244: entities.set(0x25BE, "▾");
245: entities.set(0x25C2, "◂");
246: entities.set(0x25B8, "▸");
247: entities.set(0x2663, "♣");
248: entities.set(0x2666, "♦");
249: entities.set(0x2665, "♥");
250: entities.set(0x2660, "♠");
251: entities.set(0x2720, "✠");
252: entities.set(0x2020, "†");
253: entities.set(0x2021, "‡");
254: entities.set(0x2713, "✓");
255: entities.set(0x2717, "✗");
256: entities.set(0x266F, "♯");
257: entities.set(0x266D, "♭");
258: entities.set(0x2642, "♂");
259: entities.set(0x2640, "♀");
260: entities.set(0x260E, "☎");
261: entities.set(0x2315, "⌕");
262: entities.set(0x2117, "℗");
263: entities.set(0x2041, "⁁");
264: entities.set(0x201A, "‚");
265: entities.set(0x201E, "„");
266: entities.set(0xFB00, "ff");
267: entities.set(0xFB01, "fi");
268: entities.set(0xFB03, "ffi");
269: entities.set(0xFB04, "ffl");
270: entities.set(0xFB02, "fl");
271: entities.set(0x2026, "…");
272: entities.set(0x201C, "”");
273: entities.set(0x2018, "’");
274: entities.set(0x22EE, "⋮");
275: entities.set(0x2043, "⁃");
276: entities.set(0x25CA, "◊");
277: entities.set(0x2726, "⧫");
278: entities.set(0x25C3, "◃");
279: entities.set(0x25B9, "▹");
280: entities.set(0x2605, "★");
281: entities.set(0x266E, "♮");
282: entities.set(0x211E, "℞");
283: entities.set(0x2736, "✶");
284: entities.set(0x2316, "⌖");
285: entities.set(0x230D, "⌍");
286: entities.set(0x230C, "⌌");
287: entities.set(0x230F, "⌏");
288: entities.set(0x230E, "⌎");
289: entities.set(0x03B1, "&agr;");
290: entities.set(0x0391, "&Agr;");
291: entities.set(0x03B2, "&bgr;");
292: entities.set(0x0392, "&Bgr;");
293: entities.set(0x03B3, "&ggr;");
294: entities.set(0x0393, "&Ggr;");
295: entities.set(0x03B4, "&dgr;");
296: entities.set(0x0394, "&Dgr;");
297: entities.set(0x03B5, "&egr;");
298: entities.set(0x0395, "&Egr;");
299: entities.set(0x03B6, "&zgr;");
300: entities.set(0x0396, "&Zgr;");
301: entities.set(0x03B7, "&eegr;");
302: entities.set(0x0397, "&EEgr;");
303: entities.set(0x03B8, "&thgr;");
304: entities.set(0x0398, "&THgr;");
305: entities.set(0x03B9, "&igr;");
306: entities.set(0x0399, "&Igr;");
307: entities.set(0x03BA, "&kgr;");
308: entities.set(0x039A, "&Kgr;");
309: entities.set(0x03BB, "&lgr;");
310: entities.set(0x039B, "&Lgr;");
311: entities.set(0x03BC, "&mgr;");
312: entities.set(0x039C, "&Mgr;");
313: entities.set(0x03BD, "&ngr;");
314: entities.set(0x039D, "&Ngr;");
315: entities.set(0x03BE, "&xgr;");
316: entities.set(0x039E, "&Xgr;");
317: entities.set(0x03BF, "&ogr;");
318: entities.set(0x039F, "&Ogr;");
319: entities.set(0x03C0, "&pgr;");
320: entities.set(0x03A0, "&Pgr;");
321: entities.set(0x03C1, "&rgr;");
322: entities.set(0x03A1, "&Rgr;");
323: entities.set(0x03C3, "&sgr;");
324: entities.set(0x03A3, "&Sgr;");
325: entities.set(0x03C2, "&sfgr;");
326: entities.set(0x03C4, "&tgr;");
327: entities.set(0x03A4, "&Tgr;");
328: entities.set(0x03C5, "&ugr;");
329: entities.set(0x03A5, "&Ugr;");
330: entities.set(0x03C6, "&phgr;");
331: entities.set(0x03A6, "&PHgr;");
332: entities.set(0x03C7, "&khgr;");
333: entities.set(0x03A7, "&KHgr;");
334: entities.set(0x03C8, "&psgr;");
335: entities.set(0x03A8, "&PSgr;");
336: entities.set(0x03C9, "&ohgr;");
337: entities.set(0x03A9, "&OHgr;");
338: entities.set(0x03AC, "&aacgr;");
339: entities.set(0x0386, "&Aacgr;");
340: entities.set(0x03AD, "&eacgr;");
341: entities.set(0x0388, "&Eacgr;");
342: entities.set(0x03AE, "&eeacgr;");
343: entities.set(0x0389, "&EEacgr;");
344: entities.set(0x03CA, "&idigr;");
345: entities.set(0x03AA, "&Idigr;");
346: entities.set(0x03AF, "&iacgr;");
347: entities.set(0x038A, "&Iacgr;");
348: entities.set(0x0390, "&idiagr;");
349: entities.set(0x03CC, "&oacgr;");
350: entities.set(0x038C, "&Oacgr;");
351: entities.set(0x03CB, "&udigr;");
352: entities.set(0x03AB, "&Udigr;");
353: entities.set(0x03CD, "&uacgr;");
354: entities.set(0x038E, "&Uacgr;");
355: entities.set(0x03B0, "&udiagr;");
356: entities.set(0x03CE, "&ohacgr;");
357: entities.set(0x038F, "&OHacgr;");
358: entities.set(0x03B1, "α");
359: entities.set(0x03B2, "β");
360: entities.set(0x03B3, "γ");
361: entities.set(0x0393, "Γ");
362: entities.set(0x03DC, "ϝ");
363: entities.set(0x03B4, "δ");
364: entities.set(0x0394, "Δ");
365: entities.set(0x220A, "ε");
366: entities.set(0x03B5, "ϵ");
367: entities.set(0x220A, "&epsis;");
368: entities.set(0x03B6, "ζ");
369: entities.set(0x03B7, "η");
370: entities.set(0x03B8, "&thetas;");
371: entities.set(0x0398, "Θ");
372: entities.set(0x03D1, "ϑ");
373: entities.set(0x03B9, "ι");
374: entities.set(0x03BA, "κ");
375: entities.set(0x03F0, "ϰ");
376: entities.set(0x03BB, "λ");
377: entities.set(0x039B, "Λ");
378: entities.set(0x03BC, "μ");
379: entities.set(0x03BD, "ν");
380: entities.set(0x03BE, "ξ");
381: entities.set(0x039E, "Ξ");
382: entities.set(0x03C0, "π");
383: entities.set(0x03D6, "ϖ");
384: entities.set(0x03A0, "Π");
385: entities.set(0x03C1, "ρ");
386: entities.set(0x03F1, "ϱ");
387: entities.set(0x03C3, "σ");
388: entities.set(0x03A3, "Σ");
389: entities.set(0x03C2, "ς");
390: entities.set(0x03C4, "τ");
391: entities.set(0x03C5, "υ");
392: entities.set(0x03D2, "ϒ");
393: entities.set(0x03C6, "&phis;");
394: entities.set(0x03A6, "Φ");
395: entities.set(0x03D5, "ϕ");
396: entities.set(0x03C7, "χ");
397: entities.set(0x03C8, "ψ");
398: entities.set(0x03A8, "Ψ");
399: entities.set(0x03C9, "ω");
400: entities.set(0x03A9, "Ω");
401:
402: entities.set(0x03B1, "&b.alpha;");
403: entities.set(0x03B2, "&b.beta;");
404: entities.set(0x03B3, "&b.gamma;");
405: entities.set(0x0393, "&b.Gamma;");
406: entities.set(0x03DC, "&b.gammad;");
407: entities.set(0x03B4, "&b.delta;");
408: entities.set(0x0394, "&b.Delta;");
409: entities.set(0x03B5, "&b.epsi;");
410: entities.set(0x03B5, "&b.epsiv;");
411: entities.set(0x03B5, "&b.epsis;");
412: entities.set(0x03B6, "&b.zeta;");
413: entities.set(0x03B7, "&b.eta;");
414: entities.set(0x03B8, "&b.thetas;");
415: entities.set(0x0398, "&b.Theta;");
416: entities.set(0x03D1, "&b.thetav;");
417: entities.set(0x03B9, "&b.iota;");
418: entities.set(0x03BA, "&b.kappa;");
419: entities.set(0x03F0, "&b.kappav;");
420: entities.set(0x03BB, "&b.lambda;");
421: entities.set(0x039B, "&b.Lambda;");
422: entities.set(0x03BC, "&b.mu;");
423: entities.set(0x03BD, "&b.nu;");
424: entities.set(0x03BE, "&b.xi;");
425: entities.set(0x039E, "&b.Xi;");
426: entities.set(0x03C0, "&b.pi;");
427: entities.set(0x03A0, "&b.Pi;");
428: entities.set(0x03D6, "&b.piv;");
429: entities.set(0x03C1, "&b.rho;");
430: entities.set(0x03F1, "&b.rhov;");
431: entities.set(0x03C3, "&b.sigma;");
432: entities.set(0x03A3, "&b.Sigma;");
433: entities.set(0x03C2, "&b.sigmav;");
434: entities.set(0x03C4, "&b.tau;");
435: entities.set(0x03C5, "&b.upsi;");
436: entities.set(0x03D2, "&b.Upsi;");
437: entities.set(0x03C6, "&b.phis;");
438: entities.set(0x03A6, "&b.Phi;");
439: entities.set(0x03D5, "&b.phiv;");
440: entities.set(0x03C7, "&b.chi;");
441: entities.set(0x03C8, "&b.psi;");
442: entities.set(0x03A8, "&b.Psi;");
443: entities.set(0x03C9, "&b.omega;");
444: entities.set(0x03A9, "&b.Omega;");
445: entities.set(0x00E1, "á");
446: entities.set(0x00C1, "Á");
447: entities.set(0x00E2, "â");
448: entities.set(0x00C2, "Â");
449: entities.set(0x00E0, "à");
450: entities.set(0x00C0, "À");
451: entities.set(0x00E5, "å");
452: entities.set(0x00C5, "Å");
453: entities.set(0x00E3, "ã");
454: entities.set(0x00C3, "Ã");
455: entities.set(0x00E4, "ä");
456: entities.set(0x00C4, "Ä");
457: entities.set(0x00E6, "æ");
458: entities.set(0x00C6, "Æ");
459: entities.set(0x00E7, "ç");
460: entities.set(0x00C7, "Ç");
461: entities.set(0x00D0, "ð");
462: entities.set(0x00F0, "Ð");
463: entities.set(0x00E9, "é");
464: entities.set(0x00C9, "É");
465: entities.set(0x00EA, "ê");
466: entities.set(0x00CA, "Ê");
467: entities.set(0x00E8, "è");
468: entities.set(0x00C8, "È");
469: entities.set(0x00EB, "ë");
470: entities.set(0x00CB, "Ë");
471: entities.set(0x00ED, "í");
472: entities.set(0x00CD, "Í");
473: entities.set(0x00EE, "î");
474: entities.set(0x00CE, "Î");
475: entities.set(0x00EC, "ì");
476: entities.set(0x00CC, "Ì");
477: entities.set(0x00EF, "ï");
478: entities.set(0x00CF, "Ï");
479: entities.set(0x00F1, "ñ");
480: entities.set(0x00D1, "Ñ");
481: entities.set(0x00F3, "ó");
482: entities.set(0x00D3, "Ó");
483: entities.set(0x00F4, "ô");
484: entities.set(0x00D4, "Ô");
485: entities.set(0x00F2, "ò");
486: entities.set(0x00D2, "Ò");
487: entities.set(0x2298, "ø");
488: entities.set(0x00D8, "Ø");
489: entities.set(0x00F5, "õ");
490: entities.set(0x00D5, "Õ");
491: entities.set(0x00F6, "ö");
492: entities.set(0x00D6, "Ö");
493: entities.set(0x00DF, "ß");
494: entities.set(0x00FE, "þ");
495: entities.set(0x00DE, "Þ");
496: entities.set(0x00FA, "ú");
497: entities.set(0x00DA, "Ú");
498: entities.set(0x00DB, "û");
499: entities.set(0x00FB, "Û");
500: entities.set(0x00F9, "ù");
501: entities.set(0x00D9, "Ù");
502: entities.set(0x00FC, "ü");
503: entities.set(0x00DC, "Ü");
504: entities.set(0x00FD, "ý");
505: entities.set(0x00DD, "Ý");
506: entities.set(0x00FF, "ÿ");
507: entities.set(0x0103, "ă");
508: entities.set(0x0102, "Ă");
509: entities.set(0x0101, "ā");
510: entities.set(0x0100, "Ā");
511: entities.set(0x0105, "ą");
512: entities.set(0x0104, "Ą");
513: entities.set(0x0107, "ć");
514: entities.set(0x0106, "Ć");
515: entities.set(0x010D, "č");
516: entities.set(0x010C, "Č");
517: entities.set(0x0109, "ĉ");
518: entities.set(0x0108, "Ĉ");
519: entities.set(0x22C5, "ċ");
520: entities.set(0x010A, "Ċ");
521: entities.set(0x010F, "ď");
522: entities.set(0x010E, "Ď");
523: entities.set(0x0111, "đ");
524: entities.set(0x0110, "Đ");
525: entities.set(0x011B, "ě");
526: entities.set(0x011A, "Ě");
527: entities.set(0x0117, "ė");
528: entities.set(0x0116, "Ė");
529: entities.set(0x0113, "ē");
530: entities.set(0x0112, "Ē");
531: entities.set(0x0119, "ę");
532: entities.set(0x0118, "Ę");
533: entities.set(0x01F5, "ǵ");
534: entities.set(0x011F, "ğ");
535: entities.set(0x011E, "Ğ");
536: entities.set(0x0122, "Ģ");
537: entities.set(0x011D, "ĝ");
538: entities.set(0x011C, "Ĝ");
539: entities.set(0x0121, "ġ");
540: entities.set(0x0120, "Ġ");
541: entities.set(0x0125, "ĥ");
542: entities.set(0x0124, "Ĥ");
543: entities.set(0x0127, "ħ");
544: entities.set(0x0126, "Ħ");
545: entities.set(0x0130, "İ");
546: entities.set(0x012A, "Ī");
547: entities.set(0x012B, "ī");
548: entities.set(0x0133, "ij");
549: entities.set(0x0132, "IJ");
550: entities.set(0x0131, "ı");
551: entities.set(0x012F, "į");
552: entities.set(0x012E, "Į");
553: entities.set(0x0129, "ĩ");
554: entities.set(0x0128, "Ĩ");
555: entities.set(0x0135, "ĵ");
556: entities.set(0x0134, "Ĵ");
557: entities.set(0x0137, "ķ");
558: entities.set(0x0136, "Ķ");
559: entities.set(0x0138, "ĸ");
560: entities.set(0x013A, "ĺ");
561: entities.set(0x0139, "Ĺ");
562: entities.set(0x013E, "ľ");
563: entities.set(0x013D, "Ľ");
564: entities.set(0x013C, "ļ");
565: entities.set(0x013B, "Ļ");
566: entities.set(0x0140, "ŀ");
567: entities.set(0x013F, "Ŀ");
568: entities.set(0x0142, "ł");
569: entities.set(0x0141, "Ł");
570: entities.set(0x0144, "ń");
571: entities.set(0x0143, "Ń");
572: entities.set(0x014B, "ŋ");
573: entities.set(0x014A, "Ŋ");
574: entities.set(0x0149, "ʼn");
575: entities.set(0x0148, "ň");
576: entities.set(0x0147, "Ň");
577: entities.set(0x0146, "ņ");
578: entities.set(0x0145, "Ņ");
579: entities.set(0x0151, "ő");
580: entities.set(0x0150, "Ő");
581: entities.set(0x014C, "Ō");
582: entities.set(0x014D, "ō");
583: entities.set(0x0153, "œ");
584: entities.set(0x0152, "Œ");
585: entities.set(0x0155, "ŕ");
586: entities.set(0x0154, "Ŕ");
587: entities.set(0x0159, "ř");
588: entities.set(0x0158, "Ř");
589: entities.set(0x0157, "ŗ");
590: entities.set(0x0156, "Ŗ");
591: entities.set(0x015B, "ś");
592: entities.set(0x015A, "Ś");
593: entities.set(0x0161, "š");
594: entities.set(0x0160, "Š");
595: entities.set(0x015F, "ş");
596: entities.set(0x015E, "Ş");
597: entities.set(0x015D, "ŝ");
598: entities.set(0x015C, "Ŝ");
599: entities.set(0x0165, "ť");
600: entities.set(0x0164, "Ť");
601: entities.set(0x0163, "ţ");
602: entities.set(0x0162, "Ţ");
603: entities.set(0x0167, "ŧ");
604: entities.set(0x0166, "Ŧ");
605: entities.set(0x016D, "ŭ");
606: entities.set(0x016C, "Ŭ");
607: entities.set(0x0171, "ű");
608: entities.set(0x0170, "Ű");
609: entities.set(0x016B, "ū");
610: entities.set(0x016A, "Ū");
611: entities.set(0x0173, "ų");
612: entities.set(0x0172, "Ų");
613: entities.set(0x016F, "ů");
614: entities.set(0x016E, "Ů");
615: entities.set(0x0169, "ũ");
616: entities.set(0x0168, "Ũ");
617: entities.set(0x0175, "ŵ");
618: entities.set(0x0174, "Ŵ");
619: entities.set(0x0177, "ŷ");
620: entities.set(0x0176, "Ŷ");
621: entities.set(0x0178, "Ÿ");
622: entities.set(0x017A, "ź");
623: entities.set(0x0179, "Ź");
624: entities.set(0x017E, "ž");
625: entities.set(0x017D, "Ž");
626: entities.set(0x017C, "ż");
627: entities.set(0x017B, "Ż");
628: entities.set(0x2135, "ℵ");
629: entities.set(0x2227, "∧");
630: entities.set(0x221F, "&ang90;");
631: entities.set(0x2222, "∢");
632: entities.set(0x2248, "≈");
633: entities.set(0x2235, "∵");
634: entities.set(0x22A5, "⊥");
635: entities.set(0x2229, "∩");
636: entities.set(0x2245, "≅");
637: entities.set(0x222E, "∮");
638: entities.set(0x222A, "∪");
639: entities.set(0x2261, "≡");
640: entities.set(0x2203, "∃");
641: entities.set(0x2200, "∀");
642: entities.set(0x0192, "ƒ");
643: entities.set(0x2265, "≥");
644: entities.set(0xE365, "⇔");
645: entities.set(0x221E, "∞");
646: entities.set(0x222B, "∫");
647: entities.set(0x220A, "∈");
648: entities.set(0x3008, "⟨");
649: entities.set(0x21D0, "⇐");
650: entities.set(0x2264, "≤");
651: entities.set(0x2212, "−");
652: entities.set(0x2213, "∓");
653: entities.set(0x2207, "∇");
654: entities.set(0x2260, "≠");
655: entities.set(0x220D, "∋");
656: entities.set(0x2228, "∨");
657: entities.set(0x2225, "∥");
658: entities.set(0x2202, "∂");
659: entities.set(0x2030, "‰");
660: entities.set(0x22A5, "⊥");
661: entities.set(0x2032, "′");
662: entities.set(0x2033, "″");
663: entities.set(0x221D, "∝");
664: entities.set(0x221A, "√");
665: entities.set(0x3009, "⟩");
666: entities.set(0x21D2, "⇒");
667: entities.set(0x223C, "∼");
668: entities.set(0x2243, "≃");
669: entities.set(0x25A1, "□");
670: entities.set(0x2282, "⊂");
671: entities.set(0x2286, "⊆");
672: entities.set(0x2283, "⊃");
673: entities.set(0x2287, "⊇");
674: entities.set(0x2234, "∴");
675: entities.set(0x2016, "‖");
676: entities.set(0x212B, "Å");
677: entities.set(0x212C, "ℬ");
678: entities.set(0x2218, "∘");
679: entities.set(0x0308, "¨");
680: entities.set(0x20DC, "⃜");
681: entities.set(0x210B, "ℋ");
682: entities.set(0x2112, "ℒ");
683: entities.set(0x2217, "∗");
684: entities.set(0x2209, "∉");
685: entities.set(0x2134, "ℴ");
686: entities.set(0x2133, "ℳ");
687: entities.set(0x20DB, "⃛");
688: entities.set(0x2034, "‴");
689: entities.set(0x2259, "≙");
690:
691: // these should be last as they are the most recognizable forms for these characters
692: // and there may be a less common mapping above.
693:
694: //entities.set(0x00BD,"½");
695: entities.set(0x00BD, "½");
696: entities.set(0x00BC, "¼");
697: entities.set(0x00BE, "¾");
698: entities.set(0x215B, "⅛");
699: entities.set(0x215C, "⅜");
700: entities.set(0x215D, "⅝");
701: entities.set(0x215E, "⅞");
702: entities.set(0x00B9, "¹");
703: entities.set(0x00B2, "²");
704: entities.set(0x00B3, "³");
705: entities.set(0x002B, "+");
706: entities.set(0x00B1, "±");
707: entities.set(0x003C, "<");
708: entities.set(0x003D, "=");
709: entities.set(0x003E, ">");
710: entities.set(0x00F7, "÷");
711: entities.set(0x00D7, "×");
712: entities.set(0x00A4, "¤");
713: entities.set(0x00A3, "£");
714: entities.set(0x0024, "$");
715: entities.set(0x00A2, "¢");
716: entities.set(0x00A5, "¥");
717: entities.set(0x0023, "#");
718: entities.set(0x0025, "%");
719: entities.set(0x0026, "&");
720: entities.set(0x2217, "*");
721: entities.set(0x0040, "@");
722: entities.set(0x005B, "[");
723: entities.set(0x005C, "\");
724: entities.set(0x005D, "]");
725: entities.set(0x007B, "{");
726: entities.set(0x2015, "―");
727: entities.set(0x007C, "|");
728: entities.set(0x007D, "}");
729: entities.set(0x00B5, "µ");
730: entities.set(0x2126, "Ω");
731: entities.set(0x00B0, "°");
732: entities.set(0x00BA, "º");
733: entities.set(0x00AA, "ª");
734: entities.set(0x00A7, "§");
735: entities.set(0x00B6, "¶");
736: entities.set(0x00B7, "·");
737: entities.set(0x2190, "←");
738: entities.set(0x2192, "→");
739: entities.set(0x2191, "↑");
740: entities.set(0x2193, "↓");
741: entities.set(0x00A9, "©");
742: entities.set(0x00AE, "®");
743: entities.set(0x2122, "™");
744: entities.set(0x00A6, "¦");
745: entities.set(0x00AC, "¬");
746: entities.set(0x2669, "♪");
747: entities.set(0x0021, "!");
748: entities.set(0x00A1, "¡");
749: entities.set(0x0022, """);
750: entities.set(0x0027, "'");
751: entities.set(0x0028, "(");
752: entities.set(0x0029, ")");
753: entities.set(0x002C, ",");
754: entities.set(0x005F, "_");
755: entities.set(0xE4F8, "‐");
756: entities.set(0x002E, ".");
757: entities.set(0x002F, "/");
758: entities.set(0x003A, ":");
759: entities.set(0x003B, ";");
760: entities.set(0x003F, "?");
761: entities.set(0x00BF, "¿");
762: entities.set(0x00AB, "«");
763: entities.set(0x00BB, "»");
764: entities.set(0x2018, "‘");
765: entities.set(0x2019, "’");
766: entities.set(0x201C, "“");
767: entities.set(0x201D, "”");
768: entities.set(0x00A0, " ");
769: entities.set(0x00AD, "­");
770:
771: }
772: }
|