001 package railo.commons.lang; 002 003 004 005 006 /** 007 * <p>Provides HTML and XML entity utilities.</p> 008 * 009 */ 010 public final class HTMLEntities { 011 012 public static final short HTMLV20=1; 013 public static final short HTMLV32=1; 014 public static final short HTMLV40=2; 015 016 017 // Basic 018 private static final int OFFSET_BASIC=34; 019 private static final String[] BASIC_ARRAY = new String[63 - OFFSET_BASIC]; 020 static { 021 BASIC_ARRAY[34 - OFFSET_BASIC]="quot"; 022 BASIC_ARRAY[38 - OFFSET_BASIC]="amp"; 023 BASIC_ARRAY[60 - OFFSET_BASIC]="lt"; 024 BASIC_ARRAY[62 - OFFSET_BASIC]="gt"; 025 } 026 // HTML 32 027 private static final int OFFSET_ISO8859_1=160; 028 private static final String[] ISO8859_1_ARRAY = new String[256 - OFFSET_ISO8859_1]; 029 static { 030 ISO8859_1_ARRAY[160 - OFFSET_ISO8859_1]="nbsp"; 031 ISO8859_1_ARRAY[161 - OFFSET_ISO8859_1]="iexcl"; 032 ISO8859_1_ARRAY[162 - OFFSET_ISO8859_1]="cent"; 033 ISO8859_1_ARRAY[163 - OFFSET_ISO8859_1]="pound"; 034 ISO8859_1_ARRAY[164 - OFFSET_ISO8859_1]="curren"; 035 ISO8859_1_ARRAY[165 - OFFSET_ISO8859_1]="yen"; 036 ISO8859_1_ARRAY[166 - OFFSET_ISO8859_1]="brvbar"; 037 ISO8859_1_ARRAY[167 - OFFSET_ISO8859_1]="sect"; 038 ISO8859_1_ARRAY[168 - OFFSET_ISO8859_1]="uml"; 039 ISO8859_1_ARRAY[169 - OFFSET_ISO8859_1]="copy"; 040 ISO8859_1_ARRAY[170 - OFFSET_ISO8859_1]="ordf"; 041 ISO8859_1_ARRAY[171 - OFFSET_ISO8859_1]="laquo"; 042 ISO8859_1_ARRAY[172 - OFFSET_ISO8859_1]="not"; 043 ISO8859_1_ARRAY[173 - OFFSET_ISO8859_1]="shy"; 044 ISO8859_1_ARRAY[174 - OFFSET_ISO8859_1]="reg"; 045 ISO8859_1_ARRAY[175 - OFFSET_ISO8859_1]="macr"; 046 ISO8859_1_ARRAY[176 - OFFSET_ISO8859_1]="deg"; 047 ISO8859_1_ARRAY[177 - OFFSET_ISO8859_1]="plusmn"; 048 ISO8859_1_ARRAY[178 - OFFSET_ISO8859_1]="sup2"; 049 ISO8859_1_ARRAY[179 - OFFSET_ISO8859_1]="sup3"; 050 ISO8859_1_ARRAY[180 - OFFSET_ISO8859_1]="acute"; 051 ISO8859_1_ARRAY[181 - OFFSET_ISO8859_1]="micro"; 052 ISO8859_1_ARRAY[182 - OFFSET_ISO8859_1]="para"; 053 ISO8859_1_ARRAY[183 - OFFSET_ISO8859_1]="middot"; 054 ISO8859_1_ARRAY[184 - OFFSET_ISO8859_1]="cedil"; 055 ISO8859_1_ARRAY[185 - OFFSET_ISO8859_1]="sup1"; 056 ISO8859_1_ARRAY[186 - OFFSET_ISO8859_1]="ordm"; 057 ISO8859_1_ARRAY[187 - OFFSET_ISO8859_1]="raquo"; 058 ISO8859_1_ARRAY[188 - OFFSET_ISO8859_1]="frac14"; 059 ISO8859_1_ARRAY[189 - OFFSET_ISO8859_1]="frac12"; 060 ISO8859_1_ARRAY[190 - OFFSET_ISO8859_1]="frac34"; 061 ISO8859_1_ARRAY[191 - OFFSET_ISO8859_1]="iquest"; 062 ISO8859_1_ARRAY[192 - OFFSET_ISO8859_1]="Agrave"; 063 ISO8859_1_ARRAY[193 - OFFSET_ISO8859_1]="Aacute"; 064 ISO8859_1_ARRAY[194 - OFFSET_ISO8859_1]="Acirc"; 065 ISO8859_1_ARRAY[195 - OFFSET_ISO8859_1]="Atilde"; 066 ISO8859_1_ARRAY[196 - OFFSET_ISO8859_1]="Auml"; 067 ISO8859_1_ARRAY[197 - OFFSET_ISO8859_1]="Aring"; 068 ISO8859_1_ARRAY[198 - OFFSET_ISO8859_1]="AElig"; 069 ISO8859_1_ARRAY[199 - OFFSET_ISO8859_1]="Ccedil"; 070 ISO8859_1_ARRAY[200 - OFFSET_ISO8859_1]="Egrave"; 071 ISO8859_1_ARRAY[201 - OFFSET_ISO8859_1]="Eacute"; 072 ISO8859_1_ARRAY[202 - OFFSET_ISO8859_1]="Ecirc"; 073 ISO8859_1_ARRAY[203 - OFFSET_ISO8859_1]="Euml"; 074 ISO8859_1_ARRAY[204 - OFFSET_ISO8859_1]="Igrave"; 075 ISO8859_1_ARRAY[205 - OFFSET_ISO8859_1]="Iacute"; 076 ISO8859_1_ARRAY[206 - OFFSET_ISO8859_1]="Icirc"; 077 ISO8859_1_ARRAY[207 - OFFSET_ISO8859_1]="Iuml"; 078 ISO8859_1_ARRAY[208 - OFFSET_ISO8859_1]="ETH"; 079 ISO8859_1_ARRAY[209 - OFFSET_ISO8859_1]="Ntilde"; 080 ISO8859_1_ARRAY[210 - OFFSET_ISO8859_1]="Ograve"; 081 ISO8859_1_ARRAY[211 - OFFSET_ISO8859_1]="Oacute"; 082 ISO8859_1_ARRAY[212 - OFFSET_ISO8859_1]="Ocirc"; 083 ISO8859_1_ARRAY[213 - OFFSET_ISO8859_1]="Otilde"; 084 ISO8859_1_ARRAY[214 - OFFSET_ISO8859_1]="Ouml"; 085 ISO8859_1_ARRAY[215 - OFFSET_ISO8859_1]="times"; 086 ISO8859_1_ARRAY[216 - OFFSET_ISO8859_1]="Oslash"; 087 ISO8859_1_ARRAY[217 - OFFSET_ISO8859_1]="Ugrave"; 088 ISO8859_1_ARRAY[218 - OFFSET_ISO8859_1]="Uacute"; 089 ISO8859_1_ARRAY[219 - OFFSET_ISO8859_1]="Ucirc"; 090 ISO8859_1_ARRAY[220 - OFFSET_ISO8859_1]="Uuml"; 091 ISO8859_1_ARRAY[221 - OFFSET_ISO8859_1]="Yacute"; 092 ISO8859_1_ARRAY[222 - OFFSET_ISO8859_1]="THORN"; 093 ISO8859_1_ARRAY[223 - OFFSET_ISO8859_1]="szlig"; 094 ISO8859_1_ARRAY[224 - OFFSET_ISO8859_1]="agrave"; 095 ISO8859_1_ARRAY[225 - OFFSET_ISO8859_1]="aacute"; 096 ISO8859_1_ARRAY[226 - OFFSET_ISO8859_1]="acirc"; 097 ISO8859_1_ARRAY[227 - OFFSET_ISO8859_1]="atilde"; 098 ISO8859_1_ARRAY[228 - OFFSET_ISO8859_1]="auml"; 099 ISO8859_1_ARRAY[229 - OFFSET_ISO8859_1]="aring"; 100 ISO8859_1_ARRAY[230 - OFFSET_ISO8859_1]="aelig"; 101 ISO8859_1_ARRAY[231 - OFFSET_ISO8859_1]="ccedil"; 102 ISO8859_1_ARRAY[232 - OFFSET_ISO8859_1]="egrave"; 103 ISO8859_1_ARRAY[233 - OFFSET_ISO8859_1]="eacute"; 104 ISO8859_1_ARRAY[234 - OFFSET_ISO8859_1]="ecirc"; 105 ISO8859_1_ARRAY[235 - OFFSET_ISO8859_1]="euml"; 106 ISO8859_1_ARRAY[236 - OFFSET_ISO8859_1]="igrave"; 107 ISO8859_1_ARRAY[237 - OFFSET_ISO8859_1]="iacute"; 108 ISO8859_1_ARRAY[238 - OFFSET_ISO8859_1]="icirc"; 109 ISO8859_1_ARRAY[239 - OFFSET_ISO8859_1]="iuml"; 110 ISO8859_1_ARRAY[240 - OFFSET_ISO8859_1]="eth"; 111 ISO8859_1_ARRAY[241 - OFFSET_ISO8859_1]="ntilde"; 112 ISO8859_1_ARRAY[242 - OFFSET_ISO8859_1]="ograve"; 113 ISO8859_1_ARRAY[243 - OFFSET_ISO8859_1]="oacute"; 114 ISO8859_1_ARRAY[244 - OFFSET_ISO8859_1]="ocirc"; 115 ISO8859_1_ARRAY[245 - OFFSET_ISO8859_1]="otilde"; 116 ISO8859_1_ARRAY[246 - OFFSET_ISO8859_1]="ouml"; 117 ISO8859_1_ARRAY[247 - OFFSET_ISO8859_1]="divide"; 118 ISO8859_1_ARRAY[248 - OFFSET_ISO8859_1]="oslash"; 119 ISO8859_1_ARRAY[249 - OFFSET_ISO8859_1]="ugrave"; 120 ISO8859_1_ARRAY[250 - OFFSET_ISO8859_1]="uacute"; 121 ISO8859_1_ARRAY[251 - OFFSET_ISO8859_1]="ucirc"; 122 ISO8859_1_ARRAY[252 - OFFSET_ISO8859_1]="uuml"; 123 ISO8859_1_ARRAY[253 - OFFSET_ISO8859_1]="yacute"; 124 ISO8859_1_ARRAY[254 - OFFSET_ISO8859_1]="thorn"; 125 ISO8859_1_ARRAY[255 - OFFSET_ISO8859_1]="yuml"; 126 } 127 128 // HTML 40 (1) 129 private static final int OFFSET_HTML40_1=402; 130 private static final String[] HTML40_1_ARRAY = new String[403 - OFFSET_HTML40_1]; 131 static { 132 HTML40_1_ARRAY[402 - OFFSET_HTML40_1]="fnof"; 133 } 134 135 // HTML 40 (2) 136 private static final int OFFSET_HTML40_2=913; 137 private static final String[] HTML40_2_ARRAY = new String[983 - OFFSET_HTML40_2]; 138 static { 139 HTML40_2_ARRAY[913 - OFFSET_HTML40_2]="Alpha"; 140 HTML40_2_ARRAY[914 - OFFSET_HTML40_2]="Beta"; 141 HTML40_2_ARRAY[915 - OFFSET_HTML40_2]="Gamma"; 142 HTML40_2_ARRAY[916 - OFFSET_HTML40_2]="Delta"; 143 HTML40_2_ARRAY[917 - OFFSET_HTML40_2]="Epsilon"; 144 HTML40_2_ARRAY[918 - OFFSET_HTML40_2]="Zeta"; 145 HTML40_2_ARRAY[919 - OFFSET_HTML40_2]="Eta"; 146 HTML40_2_ARRAY[920 - OFFSET_HTML40_2]="Theta"; 147 HTML40_2_ARRAY[921 - OFFSET_HTML40_2]="Iota"; 148 HTML40_2_ARRAY[922 - OFFSET_HTML40_2]="Kappa"; 149 HTML40_2_ARRAY[923 - OFFSET_HTML40_2]="Lambda"; 150 HTML40_2_ARRAY[924 - OFFSET_HTML40_2]="Mu"; 151 HTML40_2_ARRAY[925 - OFFSET_HTML40_2]="Nu"; 152 HTML40_2_ARRAY[926 - OFFSET_HTML40_2]="Xi"; 153 HTML40_2_ARRAY[927 - OFFSET_HTML40_2]="Omicron"; 154 HTML40_2_ARRAY[928 - OFFSET_HTML40_2]="Pi"; 155 HTML40_2_ARRAY[929 - OFFSET_HTML40_2]="Rho"; 156 HTML40_2_ARRAY[931 - OFFSET_HTML40_2]="Sigma"; 157 HTML40_2_ARRAY[932 - OFFSET_HTML40_2]="Tau"; 158 HTML40_2_ARRAY[933 - OFFSET_HTML40_2]="Upsilon"; 159 HTML40_2_ARRAY[934 - OFFSET_HTML40_2]="Phi"; 160 HTML40_2_ARRAY[935 - OFFSET_HTML40_2]="Chi"; 161 HTML40_2_ARRAY[936 - OFFSET_HTML40_2]="Psi"; 162 HTML40_2_ARRAY[937 - OFFSET_HTML40_2]="Omega"; 163 HTML40_2_ARRAY[945 - OFFSET_HTML40_2]="alpha"; 164 HTML40_2_ARRAY[946 - OFFSET_HTML40_2]="beta"; 165 HTML40_2_ARRAY[947 - OFFSET_HTML40_2]="gamma"; 166 HTML40_2_ARRAY[948 - OFFSET_HTML40_2]="delta"; 167 HTML40_2_ARRAY[949 - OFFSET_HTML40_2]="epsilon"; 168 HTML40_2_ARRAY[950 - OFFSET_HTML40_2]="zeta"; 169 HTML40_2_ARRAY[951 - OFFSET_HTML40_2]="eta"; 170 HTML40_2_ARRAY[952 - OFFSET_HTML40_2]="theta"; 171 HTML40_2_ARRAY[953 - OFFSET_HTML40_2]="iota"; 172 HTML40_2_ARRAY[954 - OFFSET_HTML40_2]="kappa"; 173 HTML40_2_ARRAY[955 - OFFSET_HTML40_2]="lambda"; 174 HTML40_2_ARRAY[956 - OFFSET_HTML40_2]="mu"; 175 HTML40_2_ARRAY[957 - OFFSET_HTML40_2]="nu"; 176 HTML40_2_ARRAY[958 - OFFSET_HTML40_2]="xi"; 177 HTML40_2_ARRAY[959 - OFFSET_HTML40_2]="omicron"; 178 HTML40_2_ARRAY[960 - OFFSET_HTML40_2]="pi"; 179 HTML40_2_ARRAY[961 - OFFSET_HTML40_2]="rho"; 180 HTML40_2_ARRAY[962 - OFFSET_HTML40_2]="sigmaf"; 181 HTML40_2_ARRAY[963 - OFFSET_HTML40_2]="sigma"; 182 HTML40_2_ARRAY[964 - OFFSET_HTML40_2]="tau"; 183 HTML40_2_ARRAY[965 - OFFSET_HTML40_2]="upsilon"; 184 HTML40_2_ARRAY[966 - OFFSET_HTML40_2]="phi"; 185 HTML40_2_ARRAY[967 - OFFSET_HTML40_2]="chi"; 186 HTML40_2_ARRAY[968 - OFFSET_HTML40_2]="psi"; 187 HTML40_2_ARRAY[969 - OFFSET_HTML40_2]="omega"; 188 HTML40_2_ARRAY[977 - OFFSET_HTML40_2]="thetasym"; 189 HTML40_2_ARRAY[978 - OFFSET_HTML40_2]="upsih"; 190 HTML40_2_ARRAY[982 - OFFSET_HTML40_2]="piv"; 191 } 192 193 // HTML 40 (3) 194 private static final int OFFSET_HTML40_3=338; 195 private static final String[] HTML40_3_ARRAY = new String[377 - OFFSET_HTML40_3]; 196 static { 197 HTML40_2_ARRAY[338 - OFFSET_HTML40_3]="OElig"; 198 HTML40_2_ARRAY[339 - OFFSET_HTML40_3]="oelig"; 199 HTML40_2_ARRAY[352 - OFFSET_HTML40_3]="Scaron"; 200 HTML40_2_ARRAY[353 - OFFSET_HTML40_3]="scaron"; 201 HTML40_2_ARRAY[376 - OFFSET_HTML40_3]="Yuml"; 202 } 203 204 // HTML 40 (4) 205 private static final int OFFSET_HTML40_4=710; 206 private static final String[] HTML40_4_ARRAY = new String[733 - OFFSET_HTML40_4]; 207 static { 208 HTML40_4_ARRAY[710 - OFFSET_HTML40_4]="circ"; 209 HTML40_4_ARRAY[732 - OFFSET_HTML40_4]="tilde"; 210 } 211 212 // HTML 40 (5) 213 private static final int OFFSET_HTML40_5=8194; 214 private static final String[] HTML40_5_ARRAY = new String[9831 - OFFSET_HTML40_5]; 215 static { 216 HTML40_5_ARRAY[8194 - OFFSET_HTML40_5]="ensp"; 217 HTML40_5_ARRAY[8195 - OFFSET_HTML40_5]="emsp"; 218 HTML40_5_ARRAY[8201 - OFFSET_HTML40_5]="thinsp"; 219 HTML40_5_ARRAY[8204 - OFFSET_HTML40_5]="zwnj"; 220 HTML40_5_ARRAY[8205 - OFFSET_HTML40_5]="zwj"; 221 HTML40_5_ARRAY[8206 - OFFSET_HTML40_5]="lrm"; 222 HTML40_5_ARRAY[8207 - OFFSET_HTML40_5]="rlm"; 223 HTML40_5_ARRAY[8211 - OFFSET_HTML40_5]="ndash"; 224 HTML40_5_ARRAY[8212 - OFFSET_HTML40_5]="mdash"; 225 HTML40_5_ARRAY[8216 - OFFSET_HTML40_5]="lsquo"; 226 HTML40_5_ARRAY[8217 - OFFSET_HTML40_5]="rsquo"; 227 HTML40_5_ARRAY[8218 - OFFSET_HTML40_5]="sbquo"; 228 HTML40_5_ARRAY[8220 - OFFSET_HTML40_5]="ldquo"; 229 HTML40_5_ARRAY[8221 - OFFSET_HTML40_5]="rdquo"; 230 HTML40_5_ARRAY[8222 - OFFSET_HTML40_5]="bdquo"; 231 HTML40_5_ARRAY[8224 - OFFSET_HTML40_5]="dagger"; 232 HTML40_5_ARRAY[8225 - OFFSET_HTML40_5]="Dagger"; 233 HTML40_5_ARRAY[8226 - OFFSET_HTML40_5]="bull"; 234 HTML40_5_ARRAY[8230 - OFFSET_HTML40_5]="hellip"; 235 HTML40_5_ARRAY[8240 - OFFSET_HTML40_5]="permil"; 236 HTML40_5_ARRAY[8242 - OFFSET_HTML40_5]="prime"; 237 HTML40_5_ARRAY[8243 - OFFSET_HTML40_5]="Prime"; 238 HTML40_5_ARRAY[8249 - OFFSET_HTML40_5]="lsaquo"; 239 HTML40_5_ARRAY[8250 - OFFSET_HTML40_5]="rsaquo"; 240 HTML40_5_ARRAY[8254 - OFFSET_HTML40_5]="oline"; 241 HTML40_5_ARRAY[8260 - OFFSET_HTML40_5]="frasl"; 242 HTML40_5_ARRAY[8364 - OFFSET_HTML40_5]="euro"; 243 HTML40_5_ARRAY[8472 - OFFSET_HTML40_5]="weierp"; 244 HTML40_5_ARRAY[8465 - OFFSET_HTML40_5]="image"; 245 HTML40_5_ARRAY[8476 - OFFSET_HTML40_5]="real"; 246 HTML40_5_ARRAY[8482 - OFFSET_HTML40_5]="trade"; 247 HTML40_5_ARRAY[8501 - OFFSET_HTML40_5]="alefsym"; 248 HTML40_5_ARRAY[8592 - OFFSET_HTML40_5]="larr"; 249 HTML40_5_ARRAY[8593 - OFFSET_HTML40_5]="uarr"; 250 HTML40_5_ARRAY[8594 - OFFSET_HTML40_5]="rarr"; 251 HTML40_5_ARRAY[8595 - OFFSET_HTML40_5]="darr"; 252 HTML40_5_ARRAY[8596 - OFFSET_HTML40_5]="harr"; 253 HTML40_5_ARRAY[8629 - OFFSET_HTML40_5]="crarr"; 254 HTML40_5_ARRAY[8656 - OFFSET_HTML40_5]="lArr"; 255 HTML40_5_ARRAY[8657 - OFFSET_HTML40_5]="uArr"; 256 HTML40_5_ARRAY[8658 - OFFSET_HTML40_5]="rArr"; 257 HTML40_5_ARRAY[8659 - OFFSET_HTML40_5]="dArr"; 258 HTML40_5_ARRAY[8660 - OFFSET_HTML40_5]="hArr"; 259 HTML40_5_ARRAY[8704 - OFFSET_HTML40_5]="forall"; 260 HTML40_5_ARRAY[8706 - OFFSET_HTML40_5]="part"; 261 HTML40_5_ARRAY[8707 - OFFSET_HTML40_5]="exist"; 262 HTML40_5_ARRAY[8709 - OFFSET_HTML40_5]="empty"; 263 HTML40_5_ARRAY[8711 - OFFSET_HTML40_5]="nabla"; 264 HTML40_5_ARRAY[8712 - OFFSET_HTML40_5]="isin"; 265 HTML40_5_ARRAY[8713 - OFFSET_HTML40_5]="notin"; 266 HTML40_5_ARRAY[8715 - OFFSET_HTML40_5]="ni"; 267 HTML40_5_ARRAY[8719 - OFFSET_HTML40_5]="prod"; 268 HTML40_5_ARRAY[8721 - OFFSET_HTML40_5]="sum"; 269 HTML40_5_ARRAY[8722 - OFFSET_HTML40_5]="minus"; 270 HTML40_5_ARRAY[8727 - OFFSET_HTML40_5]="lowast"; 271 HTML40_5_ARRAY[8730 - OFFSET_HTML40_5]="radic"; 272 HTML40_5_ARRAY[8733 - OFFSET_HTML40_5]="prop"; 273 HTML40_5_ARRAY[8734 - OFFSET_HTML40_5]="infin"; 274 HTML40_5_ARRAY[8736 - OFFSET_HTML40_5]="ang"; 275 HTML40_5_ARRAY[8743 - OFFSET_HTML40_5]="and"; 276 HTML40_5_ARRAY[8744 - OFFSET_HTML40_5]="or"; 277 HTML40_5_ARRAY[8745 - OFFSET_HTML40_5]="cap"; 278 HTML40_5_ARRAY[8746 - OFFSET_HTML40_5]="cup"; 279 HTML40_5_ARRAY[8747 - OFFSET_HTML40_5]="int"; 280 HTML40_5_ARRAY[8756 - OFFSET_HTML40_5]="there4"; 281 HTML40_5_ARRAY[8764 - OFFSET_HTML40_5]="sim"; 282 HTML40_5_ARRAY[8773 - OFFSET_HTML40_5]="cong"; 283 HTML40_5_ARRAY[8776 - OFFSET_HTML40_5]="asymp"; 284 HTML40_5_ARRAY[8800 - OFFSET_HTML40_5]="ne"; 285 HTML40_5_ARRAY[8801 - OFFSET_HTML40_5]="equiv"; 286 HTML40_5_ARRAY[8804 - OFFSET_HTML40_5]="le"; 287 HTML40_5_ARRAY[8805 - OFFSET_HTML40_5]="ge"; 288 HTML40_5_ARRAY[8834 - OFFSET_HTML40_5]="sub"; 289 HTML40_5_ARRAY[8835 - OFFSET_HTML40_5]="sup"; 290 HTML40_5_ARRAY[8838 - OFFSET_HTML40_5]="sube"; 291 HTML40_5_ARRAY[8839 - OFFSET_HTML40_5]="supe"; 292 HTML40_5_ARRAY[8853 - OFFSET_HTML40_5]="oplus"; 293 HTML40_5_ARRAY[8855 - OFFSET_HTML40_5]="otimes"; 294 HTML40_5_ARRAY[8869 - OFFSET_HTML40_5]="perp"; 295 HTML40_5_ARRAY[8901 - OFFSET_HTML40_5]="sdot"; 296 HTML40_5_ARRAY[8968 - OFFSET_HTML40_5]="lceil"; 297 HTML40_5_ARRAY[8969 - OFFSET_HTML40_5]="rceil"; 298 HTML40_5_ARRAY[8970 - OFFSET_HTML40_5]="lfloor"; 299 HTML40_5_ARRAY[8971 - OFFSET_HTML40_5]="rfloor"; 300 HTML40_5_ARRAY[9001 - OFFSET_HTML40_5]="lang"; 301 HTML40_5_ARRAY[9002 - OFFSET_HTML40_5]="rang"; 302 HTML40_5_ARRAY[9674 - OFFSET_HTML40_5]="loz"; 303 HTML40_5_ARRAY[9824 - OFFSET_HTML40_5]="spades"; 304 HTML40_5_ARRAY[9827 - OFFSET_HTML40_5]="clubs"; 305 HTML40_5_ARRAY[9829 - OFFSET_HTML40_5]="hearts"; 306 HTML40_5_ARRAY[9830 - OFFSET_HTML40_5]="diams"; 307 } 308 309 // HTML 20 310 private static final String[][] HTML20_DATA= { 311 BASIC_ARRAY 312 }; 313 private static final int[] HTML20_OFFSET= { 314 OFFSET_BASIC 315 }; 316 317 // HTML 32 318 private static final String[][] HTML32_DATA= { 319 BASIC_ARRAY, 320 ISO8859_1_ARRAY 321 }; 322 private static final int[] HTML32_OFFSET= { 323 OFFSET_BASIC, 324 OFFSET_ISO8859_1 325 }; 326 327 // HTML 40 328 private static final String[][] HTML40_DATA= { 329 BASIC_ARRAY, 330 ISO8859_1_ARRAY, 331 HTML40_1_ARRAY, 332 HTML40_2_ARRAY, 333 HTML40_3_ARRAY, 334 HTML40_4_ARRAY, 335 HTML40_5_ARRAY 336 }; 337 private static final int[] HTML40_OFFSET= { 338 OFFSET_BASIC, 339 OFFSET_ISO8859_1, 340 OFFSET_HTML40_1, 341 OFFSET_HTML40_2, 342 OFFSET_HTML40_3, 343 OFFSET_HTML40_4, 344 OFFSET_HTML40_5 345 }; 346 347 348 /** 349 * escapes html character inside a string 350 * @param str html code to escape 351 * @return escaped html code 352 */ 353 public static String escapeHTML(String str) { 354 return escapeHTML(str,HTMLV40); 355 } 356 357 /** 358 * escapes html character inside a string 359 * @param str html code to escape 360 * @param version HTML Version () 361 * @return escaped html code 362 */ 363 public static String escapeHTML(String str,short version) { 364 String[][] data; 365 int[] offset; 366 StringBuilder rtn=new StringBuilder(str.length()); 367 char[] chars=str.toCharArray(); 368 369 if(version==HTMLV20) { 370 data=HTML20_DATA; 371 offset=HTML20_OFFSET; 372 } 373 else if(version==HTMLV32) { 374 data=HTML32_DATA; 375 offset=HTML32_OFFSET; 376 } 377 else { 378 data=HTML40_DATA; 379 offset=HTML40_OFFSET; 380 } 381 382 outer:for(int i=0;i<chars.length;i++) { 383 char c=chars[i]; 384 for(int y=0;y<offset.length;y++) { 385 if(c>=offset[y] && c<data[y].length+offset[y]) { 386 387 String replacement=data[y][c-offset[y]]; 388 if(replacement!=null) { 389 rtn.append('&'); 390 rtn.append(replacement); 391 rtn.append(';'); 392 continue outer; 393 } 394 } 395 } 396 rtn.append(c); 397 } 398 return rtn.toString(); 399 } 400 401 /** 402 * unescapes html character inside a string 403 * @param str html code to unescape 404 * @return unescaped html code 405 */ 406 public static String unescapeHTML(String str) { 407 408 StringBuilder rtn=new StringBuilder(); 409 int posStart=-1; 410 int posFinish=-1; 411 while((posStart=str.indexOf('&',posStart))!=-1) { 412 int last=posFinish+1; 413 414 posFinish=str.indexOf(';',posStart); 415 if(posFinish==-1)break; 416 rtn.append(str.substring(last,posStart)); 417 if(posStart+1<posFinish) { 418 rtn.append(unescapeHTMLEntity(str.substring(posStart+1,posFinish))); 419 } 420 else { 421 rtn.append("&;"); 422 } 423 424 posStart=posFinish+1; 425 } 426 rtn.append(str.substring(posFinish+1)); 427 return rtn.toString(); 428 } 429 430 private static String unescapeHTMLEntity(String str) { 431 String[][] ranges=HTML40_DATA; 432 int[] offset=HTML40_OFFSET; 433 434 // Number Entity 435 if(str.indexOf('#')==0) { 436 if(str.length()==1)return "&"+str+";"; 437 try { 438 return ((char)Integer.parseInt(str.substring(1)))+""; 439 } 440 catch(NumberFormatException nfe) { 441 return "&"+str+";"; 442 } 443 } 444 445 // String Entity 446 //else { 447 for(int i=0;i<ranges.length;i++) { 448 String[] range=ranges[i]; 449 for(int y=0;y<range.length;y++) { 450 String el=range[y]; 451 if(el!=null && el.equalsIgnoreCase(str)) { 452 return ((char)(y+offset[i]))+""; 453 } 454 } 455 } 456 //} 457 458 return "&"+str+";"; 459 } 460 }