/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.cocoon.components.serializers.encoding; /** * * * @author <a href="mailto:pier@apache.org">Pier Fumagalli</a>, February 2003 * @version CVS $Id:XHTMLEncoder.java 30932 2004-07-29 19:35:38 +0200 (Thu, 29 Jul 2004) vgritsenko $ */ public class XHTMLEncoder extends XMLEncoder { /** * Create a new instance of this <code>XHTMLEncoder</code>. */ public XHTMLEncoder() { super("X-W3C-XHTML"); } /** * Create a new instance of this <code>XHTMLEncoder</code>. * * @param name A name for this <code>Encoding</code>. * @throws NullPointerException If one of the arguments is <b>null</b>. */ protected XHTMLEncoder(String name) { super(name); } /** * Return true or false whether this encoding can encode the specified * character or not. * <p> * This method will return true for the following character range: * <br /> * <code> * <nobr>#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]</nobr> * </code> * </p> * * @see <a href="http://www.w3.org/TR/REC-xml#charsets">W3C XML 1.0</a> */ protected boolean compile(char c) { for (int x = 0; x < ENCODINGS.length; x++) { if (ENCODINGS[x][0][0] == c) return(false); } return(super.compile(c)); } /** * Return an array of characters representing the encoding for the * specified character. */ public char[] encode(char c) { for (int x = 0; x < ENCODINGS.length; x++) { if (ENCODINGS[x][0][0] == c) return(ENCODINGS[x][1]); } return(super.encode(c)); } /** * The table of all configured HTML/4.0 character encodings. */ private static final char ENCODINGS[][][] = { { { 39 } , "'".toCharArray() }, { { 160 } , " ".toCharArray() }, { { 161 } , "¡".toCharArray() }, { { 162 } , "¢".toCharArray() }, { { 163 } , "£".toCharArray() }, { { 164 } , "¤".toCharArray() }, { { 165 } , "¥".toCharArray() }, { { 166 } , "¦".toCharArray() }, { { 167 } , "§".toCharArray() }, { { 168 } , "¨".toCharArray() }, { { 169 } , "©".toCharArray() }, { { 170 } , "ª".toCharArray() }, { { 171 } , "«".toCharArray() }, { { 172 } , "¬".toCharArray() }, { { 173 } , "­".toCharArray() }, { { 174 } , "®".toCharArray() }, { { 175 } , "¯".toCharArray() }, { { 176 } , "°".toCharArray() }, { { 177 } , "±".toCharArray() }, { { 178 } , "²".toCharArray() }, { { 179 } , "³".toCharArray() }, { { 180 } , "´".toCharArray() }, { { 181 } , "µ".toCharArray() }, { { 182 } , "¶".toCharArray() }, { { 183 } , "·".toCharArray() }, { { 184 } , "¸".toCharArray() }, { { 185 } , "¹".toCharArray() }, { { 186 } , "º".toCharArray() }, { { 187 } , "»".toCharArray() }, { { 188 } , "¼".toCharArray() }, { { 189 } , "½".toCharArray() }, { { 190 } , "¾".toCharArray() }, { { 191 } , "¿".toCharArray() }, { { 192 } , "À".toCharArray() }, { { 193 } , "Á".toCharArray() }, { { 194 } , "Â".toCharArray() }, { { 195 } , "Ã".toCharArray() }, { { 196 } , "Ä".toCharArray() }, { { 197 } , "Å".toCharArray() }, { { 198 } , "Æ".toCharArray() }, { { 199 } , "Ç".toCharArray() }, { { 200 } , "È".toCharArray() }, { { 201 } , "É".toCharArray() }, { { 202 } , "Ê".toCharArray() }, { { 203 } , "Ë".toCharArray() }, { { 204 } , "Ì".toCharArray() }, { { 205 } , "Í".toCharArray() }, { { 206 } , "Î".toCharArray() }, { { 207 } , "Ï".toCharArray() }, { { 208 } , "Ð".toCharArray() }, { { 209 } , "Ñ".toCharArray() }, { { 210 } , "Ò".toCharArray() }, { { 211 } , "Ó".toCharArray() }, { { 212 } , "Ô".toCharArray() }, { { 213 } , "Õ".toCharArray() }, { { 214 } , "Ö".toCharArray() }, { { 215 } , "×".toCharArray() }, { { 216 } , "Ø".toCharArray() }, { { 217 } , "Ù".toCharArray() }, { { 218 } , "Ú".toCharArray() }, { { 219 } , "Û".toCharArray() }, { { 220 } , "Ü".toCharArray() }, { { 221 } , "Ý".toCharArray() }, { { 222 } , "Þ".toCharArray() }, { { 223 } , "ß".toCharArray() }, { { 224 } , "à".toCharArray() }, { { 225 } , "á".toCharArray() }, { { 226 } , "â".toCharArray() }, { { 227 } , "ã".toCharArray() }, { { 228 } , "ä".toCharArray() }, { { 229 } , "å".toCharArray() }, { { 230 } , "æ".toCharArray() }, { { 231 } , "ç".toCharArray() }, { { 232 } , "è".toCharArray() }, { { 233 } , "é".toCharArray() }, { { 234 } , "ê".toCharArray() }, { { 235 } , "ë".toCharArray() }, { { 236 } , "ì".toCharArray() }, { { 237 } , "í".toCharArray() }, { { 238 } , "î".toCharArray() }, { { 239 } , "ï".toCharArray() }, { { 240 } , "ð".toCharArray() }, { { 241 } , "ñ".toCharArray() }, { { 242 } , "ò".toCharArray() }, { { 243 } , "ó".toCharArray() }, { { 244 } , "ô".toCharArray() }, { { 245 } , "õ".toCharArray() }, { { 246 } , "ö".toCharArray() }, { { 247 } , "÷".toCharArray() }, { { 248 } , "ø".toCharArray() }, { { 249 } , "ù".toCharArray() }, { { 250 } , "ú".toCharArray() }, { { 251 } , "û".toCharArray() }, { { 252 } , "ü".toCharArray() }, { { 253 } , "ý".toCharArray() }, { { 254 } , "þ".toCharArray() }, { { 255 } , "ÿ".toCharArray() }, { { 338 } , "Œ".toCharArray() }, { { 339 } , "œ".toCharArray() }, { { 352 } , "Š".toCharArray() }, { { 353 } , "š".toCharArray() }, { { 376 } , "Ÿ".toCharArray() }, { { 402 } , "ƒ".toCharArray() }, { { 710 } , "ˆ".toCharArray() }, { { 732 } , "˜".toCharArray() }, { { 913 } , "Α".toCharArray() }, { { 914 } , "Β".toCharArray() }, { { 915 } , "Γ".toCharArray() }, { { 916 } , "Δ".toCharArray() }, { { 917 } , "Ε".toCharArray() }, { { 918 } , "Ζ".toCharArray() }, { { 919 } , "Η".toCharArray() }, { { 920 } , "Θ".toCharArray() }, { { 921 } , "Ι".toCharArray() }, { { 922 } , "Κ".toCharArray() }, { { 923 } , "Λ".toCharArray() }, { { 924 } , "Μ".toCharArray() }, { { 925 } , "Ν".toCharArray() }, { { 926 } , "Ξ".toCharArray() }, { { 927 } , "Ο".toCharArray() }, { { 928 } , "Π".toCharArray() }, { { 929 } , "Ρ".toCharArray() }, { { 931 } , "Σ".toCharArray() }, { { 932 } , "Τ".toCharArray() }, { { 933 } , "Υ".toCharArray() }, { { 934 } , "Φ".toCharArray() }, { { 935 } , "Χ".toCharArray() }, { { 936 } , "Ψ".toCharArray() }, { { 937 } , "Ω".toCharArray() }, { { 945 } , "α".toCharArray() }, { { 946 } , "β".toCharArray() }, { { 947 } , "γ".toCharArray() }, { { 948 } , "δ".toCharArray() }, { { 949 } , "ε".toCharArray() }, { { 950 } , "ζ".toCharArray() }, { { 951 } , "η".toCharArray() }, { { 952 } , "θ".toCharArray() }, { { 953 } , "ι".toCharArray() }, { { 954 } , "κ".toCharArray() }, { { 955 } , "λ".toCharArray() }, { { 956 } , "μ".toCharArray() }, { { 957 } , "ν".toCharArray() }, { { 958 } , "ξ".toCharArray() }, { { 959 } , "ο".toCharArray() }, { { 960 } , "π".toCharArray() }, { { 961 } , "ρ".toCharArray() }, { { 962 } , "ς".toCharArray() }, { { 963 } , "σ".toCharArray() }, { { 964 } , "τ".toCharArray() }, { { 965 } , "υ".toCharArray() }, { { 966 } , "φ".toCharArray() }, { { 967 } , "χ".toCharArray() }, { { 968 } , "ψ".toCharArray() }, { { 969 } , "ω".toCharArray() }, { { 977 } , "ϑ".toCharArray() }, { { 978 } , "ϒ".toCharArray() }, { { 982 } , "ϖ".toCharArray() }, { { 8194 } , " ".toCharArray() }, { { 8195 } , " ".toCharArray() }, { { 8201 } , " ".toCharArray() }, { { 8204 } , "‌".toCharArray() }, { { 8205 } , "‍".toCharArray() }, { { 8206 } , "‎".toCharArray() }, { { 8207 } , "‏".toCharArray() }, { { 8211 } , "–".toCharArray() }, { { 8212 } , "—".toCharArray() }, { { 8216 } , "‘".toCharArray() }, { { 8217 } , "’".toCharArray() }, { { 8218 } , "‚".toCharArray() }, { { 8220 } , "“".toCharArray() }, { { 8221 } , "”".toCharArray() }, { { 8222 } , "„".toCharArray() }, { { 8224 } , "†".toCharArray() }, { { 8225 } , "‡".toCharArray() }, { { 8226 } , "•".toCharArray() }, { { 8230 } , "…".toCharArray() }, { { 8240 } , "‰".toCharArray() }, { { 8242 } , "′".toCharArray() }, { { 8243 } , "″".toCharArray() }, { { 8249 } , "‹".toCharArray() }, { { 8250 } , "›".toCharArray() }, { { 8254 } , "‾".toCharArray() }, { { 8260 } , "⁄".toCharArray() }, { { 8364 } , "€".toCharArray() }, { { 8465 } , "ℑ".toCharArray() }, { { 8472 } , "℘".toCharArray() }, { { 8476 } , "ℜ".toCharArray() }, { { 8482 } , "™".toCharArray() }, { { 8501 } , "ℵ".toCharArray() }, { { 8592 } , "←".toCharArray() }, { { 8593 } , "↑".toCharArray() }, { { 8594 } , "→".toCharArray() }, { { 8595 } , "↓".toCharArray() }, { { 8596 } , "↔".toCharArray() }, { { 8629 } , "↵".toCharArray() }, { { 8656 } , "⇐".toCharArray() }, { { 8657 } , "⇑".toCharArray() }, { { 8658 } , "⇒".toCharArray() }, { { 8659 } , "⇓".toCharArray() }, { { 8660 } , "⇔".toCharArray() }, { { 8704 } , "∀".toCharArray() }, { { 8706 } , "∂".toCharArray() }, { { 8707 } , "∃".toCharArray() }, { { 8709 } , "∅".toCharArray() }, { { 8711 } , "∇".toCharArray() }, { { 8712 } , "∈".toCharArray() }, { { 8713 } , "∉".toCharArray() }, { { 8715 } , "∋".toCharArray() }, { { 8719 } , "∏".toCharArray() }, { { 8721 } , "∑".toCharArray() }, { { 8722 } , "−".toCharArray() }, { { 8727 } , "∗".toCharArray() }, { { 8730 } , "√".toCharArray() }, { { 8733 } , "∝".toCharArray() }, { { 8734 } , "∞".toCharArray() }, { { 8736 } , "∠".toCharArray() }, { { 8743 } , "∧".toCharArray() }, { { 8744 } , "∨".toCharArray() }, { { 8745 } , "∩".toCharArray() }, { { 8746 } , "∪".toCharArray() }, { { 8747 } , "∫".toCharArray() }, { { 8756 } , "∴".toCharArray() }, { { 8764 } , "∼".toCharArray() }, { { 8773 } , "≅".toCharArray() }, { { 8776 } , "≈".toCharArray() }, { { 8800 } , "≠".toCharArray() }, { { 8801 } , "≡".toCharArray() }, { { 8804 } , "≤".toCharArray() }, { { 8805 } , "≥".toCharArray() }, { { 8834 } , "⊂".toCharArray() }, { { 8835 } , "⊃".toCharArray() }, { { 8836 } , "⊄".toCharArray() }, { { 8838 } , "⊆".toCharArray() }, { { 8839 } , "⊇".toCharArray() }, { { 8853 } , "⊕".toCharArray() }, { { 8855 } , "⊗".toCharArray() }, { { 8869 } , "⊥".toCharArray() }, { { 8901 } , "⋅".toCharArray() }, { { 8968 } , "⌈".toCharArray() }, { { 8969 } , "⌉".toCharArray() }, { { 8970 } , "⌊".toCharArray() }, { { 8971 } , "⌋".toCharArray() }, { { 9001 } , "⟨".toCharArray() }, { { 9002 } , "⟩".toCharArray() }, { { 9674 } , "◊".toCharArray() }, { { 9824 } , "♠".toCharArray() }, { { 9827 } , "♣".toCharArray() }, { { 9829 } , "♥".toCharArray() }, { { 9830 } , "♦".toCharArray() }, }; }