001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.cocoon.components.serializers.encoding;
018:
019: /**
020: *
021: *
022: * @author <a href="mailto:pier@apache.org">Pier Fumagalli</a>, February 2003
023: * @version CVS $Id:XHTMLEncoder.java 30932 2004-07-29 19:35:38 +0200 (Thu, 29 Jul 2004) vgritsenko $
024: */
025: public class XHTMLEncoder extends XMLEncoder {
026:
027: /**
028: * Create a new instance of this <code>XHTMLEncoder</code>.
029: */
030: public XHTMLEncoder() {
031: super ("X-W3C-XHTML");
032: }
033:
034: /**
035: * Create a new instance of this <code>XHTMLEncoder</code>.
036: *
037: * @param name A name for this <code>Encoding</code>.
038: * @throws NullPointerException If one of the arguments is <b>null</b>.
039: */
040: protected XHTMLEncoder(String name) {
041: super (name);
042: }
043:
044: /**
045: * Return true or false wether this encoding can encode the specified
046: * character or not.
047: * <p>
048: * This method will return true for the following character range:
049: * <br />
050: * <code>
051: * <nobr>#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]</nobr>
052: * </code>
053: * </p>
054: *
055: * @see <a href="http://www.w3.org/TR/REC-xml#charsets">W3C XML 1.0</a>
056: */
057: protected boolean compile(char c) {
058: for (int x = 0; x < ENCODINGS.length; x++) {
059: if (ENCODINGS[x][0][0] == c)
060: return (false);
061: }
062: return (super .compile(c));
063: }
064:
065: /**
066: * Return an array of characters representing the encoding for the
067: * specified character.
068: */
069: public char[] encode(char c) {
070: for (int x = 0; x < ENCODINGS.length; x++) {
071: if (ENCODINGS[x][0][0] == c)
072: return (ENCODINGS[x][1]);
073: }
074: return (super .encode(c));
075: }
076:
077: /**
078: * The table of all configured HTML/4.0 character encodings.
079: */
080: private static final char ENCODINGS[][][] = {
081: { { 39 }, "'".toCharArray() },
082: { { 160 }, " ".toCharArray() },
083: { { 161 }, "¡".toCharArray() },
084: { { 162 }, "¢".toCharArray() },
085: { { 163 }, "£".toCharArray() },
086: { { 164 }, "¤".toCharArray() },
087: { { 165 }, "¥".toCharArray() },
088: { { 166 }, "¦".toCharArray() },
089: { { 167 }, "§".toCharArray() },
090: { { 168 }, "¨".toCharArray() },
091: { { 169 }, "©".toCharArray() },
092: { { 170 }, "ª".toCharArray() },
093: { { 171 }, "«".toCharArray() },
094: { { 172 }, "¬".toCharArray() },
095: { { 173 }, "­".toCharArray() },
096: { { 174 }, "®".toCharArray() },
097: { { 175 }, "¯".toCharArray() },
098: { { 176 }, "°".toCharArray() },
099: { { 177 }, "±".toCharArray() },
100: { { 178 }, "²".toCharArray() },
101: { { 179 }, "³".toCharArray() },
102: { { 180 }, "´".toCharArray() },
103: { { 181 }, "µ".toCharArray() },
104: { { 182 }, "¶".toCharArray() },
105: { { 183 }, "·".toCharArray() },
106: { { 184 }, "¸".toCharArray() },
107: { { 185 }, "¹".toCharArray() },
108: { { 186 }, "º".toCharArray() },
109: { { 187 }, "»".toCharArray() },
110: { { 188 }, "¼".toCharArray() },
111: { { 189 }, "½".toCharArray() },
112: { { 190 }, "¾".toCharArray() },
113: { { 191 }, "¿".toCharArray() },
114: { { 192 }, "À".toCharArray() },
115: { { 193 }, "Á".toCharArray() },
116: { { 194 }, "Â".toCharArray() },
117: { { 195 }, "Ã".toCharArray() },
118: { { 196 }, "Ä".toCharArray() },
119: { { 197 }, "Å".toCharArray() },
120: { { 198 }, "Æ".toCharArray() },
121: { { 199 }, "Ç".toCharArray() },
122: { { 200 }, "È".toCharArray() },
123: { { 201 }, "É".toCharArray() },
124: { { 202 }, "Ê".toCharArray() },
125: { { 203 }, "Ë".toCharArray() },
126: { { 204 }, "Ì".toCharArray() },
127: { { 205 }, "Í".toCharArray() },
128: { { 206 }, "Î".toCharArray() },
129: { { 207 }, "Ï".toCharArray() },
130: { { 208 }, "Ð".toCharArray() },
131: { { 209 }, "Ñ".toCharArray() },
132: { { 210 }, "Ò".toCharArray() },
133: { { 211 }, "Ó".toCharArray() },
134: { { 212 }, "Ô".toCharArray() },
135: { { 213 }, "Õ".toCharArray() },
136: { { 214 }, "Ö".toCharArray() },
137: { { 215 }, "×".toCharArray() },
138: { { 216 }, "Ø".toCharArray() },
139: { { 217 }, "Ù".toCharArray() },
140: { { 218 }, "Ú".toCharArray() },
141: { { 219 }, "Û".toCharArray() },
142: { { 220 }, "Ü".toCharArray() },
143: { { 221 }, "Ý".toCharArray() },
144: { { 222 }, "Þ".toCharArray() },
145: { { 223 }, "ß".toCharArray() },
146: { { 224 }, "à".toCharArray() },
147: { { 225 }, "á".toCharArray() },
148: { { 226 }, "â".toCharArray() },
149: { { 227 }, "ã".toCharArray() },
150: { { 228 }, "ä".toCharArray() },
151: { { 229 }, "å".toCharArray() },
152: { { 230 }, "æ".toCharArray() },
153: { { 231 }, "ç".toCharArray() },
154: { { 232 }, "è".toCharArray() },
155: { { 233 }, "é".toCharArray() },
156: { { 234 }, "ê".toCharArray() },
157: { { 235 }, "ë".toCharArray() },
158: { { 236 }, "ì".toCharArray() },
159: { { 237 }, "í".toCharArray() },
160: { { 238 }, "î".toCharArray() },
161: { { 239 }, "ï".toCharArray() },
162: { { 240 }, "ð".toCharArray() },
163: { { 241 }, "ñ".toCharArray() },
164: { { 242 }, "ò".toCharArray() },
165: { { 243 }, "ó".toCharArray() },
166: { { 244 }, "ô".toCharArray() },
167: { { 245 }, "õ".toCharArray() },
168: { { 246 }, "ö".toCharArray() },
169: { { 247 }, "÷".toCharArray() },
170: { { 248 }, "ø".toCharArray() },
171: { { 249 }, "ù".toCharArray() },
172: { { 250 }, "ú".toCharArray() },
173: { { 251 }, "û".toCharArray() },
174: { { 252 }, "ü".toCharArray() },
175: { { 253 }, "ý".toCharArray() },
176: { { 254 }, "þ".toCharArray() },
177: { { 255 }, "ÿ".toCharArray() },
178: { { 338 }, "Œ".toCharArray() },
179: { { 339 }, "œ".toCharArray() },
180: { { 352 }, "Š".toCharArray() },
181: { { 353 }, "š".toCharArray() },
182: { { 376 }, "Ÿ".toCharArray() },
183: { { 402 }, "ƒ".toCharArray() },
184: { { 710 }, "ˆ".toCharArray() },
185: { { 732 }, "˜".toCharArray() },
186: { { 913 }, "Α".toCharArray() },
187: { { 914 }, "Β".toCharArray() },
188: { { 915 }, "Γ".toCharArray() },
189: { { 916 }, "Δ".toCharArray() },
190: { { 917 }, "Ε".toCharArray() },
191: { { 918 }, "Ζ".toCharArray() },
192: { { 919 }, "Η".toCharArray() },
193: { { 920 }, "Θ".toCharArray() },
194: { { 921 }, "Ι".toCharArray() },
195: { { 922 }, "Κ".toCharArray() },
196: { { 923 }, "Λ".toCharArray() },
197: { { 924 }, "Μ".toCharArray() },
198: { { 925 }, "Ν".toCharArray() },
199: { { 926 }, "Ξ".toCharArray() },
200: { { 927 }, "Ο".toCharArray() },
201: { { 928 }, "Π".toCharArray() },
202: { { 929 }, "Ρ".toCharArray() },
203: { { 931 }, "Σ".toCharArray() },
204: { { 932 }, "Τ".toCharArray() },
205: { { 933 }, "Υ".toCharArray() },
206: { { 934 }, "Φ".toCharArray() },
207: { { 935 }, "Χ".toCharArray() },
208: { { 936 }, "Ψ".toCharArray() },
209: { { 937 }, "Ω".toCharArray() },
210: { { 945 }, "α".toCharArray() },
211: { { 946 }, "β".toCharArray() },
212: { { 947 }, "γ".toCharArray() },
213: { { 948 }, "δ".toCharArray() },
214: { { 949 }, "ε".toCharArray() },
215: { { 950 }, "ζ".toCharArray() },
216: { { 951 }, "η".toCharArray() },
217: { { 952 }, "θ".toCharArray() },
218: { { 953 }, "ι".toCharArray() },
219: { { 954 }, "κ".toCharArray() },
220: { { 955 }, "λ".toCharArray() },
221: { { 956 }, "μ".toCharArray() },
222: { { 957 }, "ν".toCharArray() },
223: { { 958 }, "ξ".toCharArray() },
224: { { 959 }, "ο".toCharArray() },
225: { { 960 }, "π".toCharArray() },
226: { { 961 }, "ρ".toCharArray() },
227: { { 962 }, "ς".toCharArray() },
228: { { 963 }, "σ".toCharArray() },
229: { { 964 }, "τ".toCharArray() },
230: { { 965 }, "υ".toCharArray() },
231: { { 966 }, "φ".toCharArray() },
232: { { 967 }, "χ".toCharArray() },
233: { { 968 }, "ψ".toCharArray() },
234: { { 969 }, "ω".toCharArray() },
235: { { 977 }, "ϑ".toCharArray() },
236: { { 978 }, "ϒ".toCharArray() },
237: { { 982 }, "ϖ".toCharArray() },
238: { { 8194 }, " ".toCharArray() },
239: { { 8195 }, " ".toCharArray() },
240: { { 8201 }, " ".toCharArray() },
241: { { 8204 }, "‌".toCharArray() },
242: { { 8205 }, "‍".toCharArray() },
243: { { 8206 }, "‎".toCharArray() },
244: { { 8207 }, "‏".toCharArray() },
245: { { 8211 }, "–".toCharArray() },
246: { { 8212 }, "—".toCharArray() },
247: { { 8216 }, "‘".toCharArray() },
248: { { 8217 }, "’".toCharArray() },
249: { { 8218 }, "‚".toCharArray() },
250: { { 8220 }, "“".toCharArray() },
251: { { 8221 }, "”".toCharArray() },
252: { { 8222 }, "„".toCharArray() },
253: { { 8224 }, "†".toCharArray() },
254: { { 8225 }, "‡".toCharArray() },
255: { { 8226 }, "•".toCharArray() },
256: { { 8230 }, "…".toCharArray() },
257: { { 8240 }, "‰".toCharArray() },
258: { { 8242 }, "′".toCharArray() },
259: { { 8243 }, "″".toCharArray() },
260: { { 8249 }, "‹".toCharArray() },
261: { { 8250 }, "›".toCharArray() },
262: { { 8254 }, "‾".toCharArray() },
263: { { 8260 }, "⁄".toCharArray() },
264: { { 8364 }, "€".toCharArray() },
265: { { 8465 }, "ℑ".toCharArray() },
266: { { 8472 }, "℘".toCharArray() },
267: { { 8476 }, "ℜ".toCharArray() },
268: { { 8482 }, "™".toCharArray() },
269: { { 8501 }, "ℵ".toCharArray() },
270: { { 8592 }, "←".toCharArray() },
271: { { 8593 }, "↑".toCharArray() },
272: { { 8594 }, "→".toCharArray() },
273: { { 8595 }, "↓".toCharArray() },
274: { { 8596 }, "↔".toCharArray() },
275: { { 8629 }, "↵".toCharArray() },
276: { { 8656 }, "⇐".toCharArray() },
277: { { 8657 }, "⇑".toCharArray() },
278: { { 8658 }, "⇒".toCharArray() },
279: { { 8659 }, "⇓".toCharArray() },
280: { { 8660 }, "⇔".toCharArray() },
281: { { 8704 }, "∀".toCharArray() },
282: { { 8706 }, "∂".toCharArray() },
283: { { 8707 }, "∃".toCharArray() },
284: { { 8709 }, "∅".toCharArray() },
285: { { 8711 }, "∇".toCharArray() },
286: { { 8712 }, "∈".toCharArray() },
287: { { 8713 }, "∉".toCharArray() },
288: { { 8715 }, "∋".toCharArray() },
289: { { 8719 }, "∏".toCharArray() },
290: { { 8721 }, "∑".toCharArray() },
291: { { 8722 }, "−".toCharArray() },
292: { { 8727 }, "∗".toCharArray() },
293: { { 8730 }, "√".toCharArray() },
294: { { 8733 }, "∝".toCharArray() },
295: { { 8734 }, "∞".toCharArray() },
296: { { 8736 }, "∠".toCharArray() },
297: { { 8743 }, "∧".toCharArray() },
298: { { 8744 }, "∨".toCharArray() },
299: { { 8745 }, "∩".toCharArray() },
300: { { 8746 }, "∪".toCharArray() },
301: { { 8747 }, "∫".toCharArray() },
302: { { 8756 }, "∴".toCharArray() },
303: { { 8764 }, "∼".toCharArray() },
304: { { 8773 }, "≅".toCharArray() },
305: { { 8776 }, "≈".toCharArray() },
306: { { 8800 }, "≠".toCharArray() },
307: { { 8801 }, "≡".toCharArray() },
308: { { 8804 }, "≤".toCharArray() },
309: { { 8805 }, "≥".toCharArray() },
310: { { 8834 }, "⊂".toCharArray() },
311: { { 8835 }, "⊃".toCharArray() },
312: { { 8836 }, "⊄".toCharArray() },
313: { { 8838 }, "⊆".toCharArray() },
314: { { 8839 }, "⊇".toCharArray() },
315: { { 8853 }, "⊕".toCharArray() },
316: { { 8855 }, "⊗".toCharArray() },
317: { { 8869 }, "⊥".toCharArray() },
318: { { 8901 }, "⋅".toCharArray() },
319: { { 8968 }, "⌈".toCharArray() },
320: { { 8969 }, "⌉".toCharArray() },
321: { { 8970 }, "⌊".toCharArray() },
322: { { 8971 }, "⌋".toCharArray() },
323: { { 9001 }, "⟨".toCharArray() },
324: { { 9002 }, "⟩".toCharArray() },
325: { { 9674 }, "◊".toCharArray() },
326: { { 9824 }, "♠".toCharArray() },
327: { { 9827 }, "♣".toCharArray() },
328: { { 9829 }, "♥".toCharArray() },
329: { { 9830 }, "♦".toCharArray() }, };
330: }
|