1. /*
  2. * The Apache Software License, Version 1.1
  3. *
  4. *
  5. * Copyright (c) 1999-2004 The Apache Software Foundation. All rights
  6. * reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. *
  12. * 1. Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. *
  15. * 2. Redistributions in binary form must reproduce the above copyright
  16. * notice, this list of conditions and the following disclaimer in
  17. * the documentation and/or other materials provided with the
  18. * distribution.
  19. *
  20. * 3. The end-user documentation included with the redistribution,
  21. * if any, must include the following acknowledgment:
  22. * "This product includes software developed by the
  23. * Apache Software Foundation (http://www.apache.org/)."
  24. * Alternately, this acknowledgment may appear in the software itself,
  25. * if and wherever such third-party acknowledgments normally appear.
  26. *
  27. * 4. The names "Xerces" and "Apache Software Foundation" must
  28. * not be used to endorse or promote products derived from this
  29. * software without prior written permission. For written
  30. * permission, please contact apache@apache.org.
  31. *
  32. * 5. Products derived from this software may not be called "Apache",
  33. * nor may "Apache" appear in their name, without prior written
  34. * permission of the Apache Software Foundation.
  35. *
  36. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  37. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  38. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  39. * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  40. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  41. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  42. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  43. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  44. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  45. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  46. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  47. * SUCH DAMAGE.
  48. * ====================================================================
  49. *
  50. * This software consists of voluntary contributions made by many
  51. * individuals on behalf of the Apache Software Foundation and was
  52. * originally based on software copyright (c) 1999, International
  53. * Business Machines, Inc., http://www.apache.org. For more
  54. * information on the Apache Software Foundation, please see
  55. * <http://www.apache.org/>.
  56. */
  57. package com.sun.org.apache.xerces.internal.util;
  58. import java.util.Arrays;
  59. /**
  60. * This class defines the basic XML character properties. The data
  61. * in this class can be used to verify that a character is a valid
  62. * XML character or if the character is a space, name start, or name
  63. * character.
  64. * <p>
  65. * A series of convenience methods are supplied to ease the burden
  66. * of the developer. Because inlining the checks can improve per
  67. * character performance, the tables of character properties are
  68. * public. Using the character as an index into the <code>CHARS</code>
  69. * array and applying the appropriate mask flag (e.g.
  70. * <code>MASK_VALID</code>), yields the same results as calling the
  71. * convenience methods. There is one exception: check the comments
  72. * for the <code>isValid</code> method for details.
  73. *
  74. * @author Glenn Marcy, IBM
  75. * @author Andy Clark, IBM
  76. * @author Eric Ye, IBM
  77. * @author Arnaud Le Hors, IBM
  78. * @author Michael Glavassevich, IBM
  79. * @author Rahul Srivastava, Sun Microsystems Inc.
  80. *
  81. * @version $Id: XMLChar.java,v 1.14 2004/02/03 20:34:27 mrglavas Exp $
  82. */
  83. public class XMLChar {
  84. //
  85. // Constants
  86. //
  87. /** Character flags. */
  88. private static final byte[] CHARS = new byte[1 << 16];
  89. /** Valid character mask. */
  90. public static final int MASK_VALID = 0x01;
  91. /** Space character mask. */
  92. public static final int MASK_SPACE = 0x02;
  93. /** Name start character mask. */
  94. public static final int MASK_NAME_START = 0x04;
  95. /** Name character mask. */
  96. public static final int MASK_NAME = 0x08;
  97. /** Pubid character mask. */
  98. public static final int MASK_PUBID = 0x10;
  99. /**
  100. * Content character mask. Special characters are those that can
  101. * be considered the start of markup, such as '<' and '&'.
  102. * The various newline characters are considered special as well.
  103. * All other valid XML characters can be considered content.
  104. * <p>
  105. * This is an optimization for the inner loop of character scanning.
  106. */
  107. public static final int MASK_CONTENT = 0x20;
  108. /** NCName start character mask. */
  109. public static final int MASK_NCNAME_START = 0x40;
  110. /** NCName character mask. */
  111. public static final int MASK_NCNAME = 0x80;
  112. //
  113. // Static initialization
  114. //
  115. static {
  116. // Initializing the Character Flag Array
  117. // Code generated by: XMLCharGenerator.
  118. CHARS[9] = 35;
  119. CHARS[10] = 19;
  120. CHARS[13] = 19;
  121. CHARS[32] = 51;
  122. CHARS[33] = 49;
  123. CHARS[34] = 33;
  124. Arrays.fill(CHARS, 35, 38, (byte) 49 ); // Fill 3 of value (byte) 49
  125. CHARS[38] = 1;
  126. Arrays.fill(CHARS, 39, 45, (byte) 49 ); // Fill 6 of value (byte) 49
  127. Arrays.fill(CHARS, 45, 47, (byte) -71 ); // Fill 2 of value (byte) -71
  128. CHARS[47] = 49;
  129. Arrays.fill(CHARS, 48, 58, (byte) -71 ); // Fill 10 of value (byte) -71
  130. CHARS[58] = 61;
  131. CHARS[59] = 49;
  132. CHARS[60] = 1;
  133. CHARS[61] = 49;
  134. CHARS[62] = 33;
  135. Arrays.fill(CHARS, 63, 65, (byte) 49 ); // Fill 2 of value (byte) 49
  136. Arrays.fill(CHARS, 65, 91, (byte) -3 ); // Fill 26 of value (byte) -3
  137. Arrays.fill(CHARS, 91, 93, (byte) 33 ); // Fill 2 of value (byte) 33
  138. CHARS[93] = 1;
  139. CHARS[94] = 33;
  140. CHARS[95] = -3;
  141. CHARS[96] = 33;
  142. Arrays.fill(CHARS, 97, 123, (byte) -3 ); // Fill 26 of value (byte) -3
  143. Arrays.fill(CHARS, 123, 183, (byte) 33 ); // Fill 60 of value (byte) 33
  144. CHARS[183] = -87;
  145. Arrays.fill(CHARS, 184, 192, (byte) 33 ); // Fill 8 of value (byte) 33
  146. Arrays.fill(CHARS, 192, 215, (byte) -19 ); // Fill 23 of value (byte) -19
  147. CHARS[215] = 33;
  148. Arrays.fill(CHARS, 216, 247, (byte) -19 ); // Fill 31 of value (byte) -19
  149. CHARS[247] = 33;
  150. Arrays.fill(CHARS, 248, 306, (byte) -19 ); // Fill 58 of value (byte) -19
  151. Arrays.fill(CHARS, 306, 308, (byte) 33 ); // Fill 2 of value (byte) 33
  152. Arrays.fill(CHARS, 308, 319, (byte) -19 ); // Fill 11 of value (byte) -19
  153. Arrays.fill(CHARS, 319, 321, (byte) 33 ); // Fill 2 of value (byte) 33
  154. Arrays.fill(CHARS, 321, 329, (byte) -19 ); // Fill 8 of value (byte) -19
  155. CHARS[329] = 33;
  156. Arrays.fill(CHARS, 330, 383, (byte) -19 ); // Fill 53 of value (byte) -19
  157. CHARS[383] = 33;
  158. Arrays.fill(CHARS, 384, 452, (byte) -19 ); // Fill 68 of value (byte) -19
  159. Arrays.fill(CHARS, 452, 461, (byte) 33 ); // Fill 9 of value (byte) 33
  160. Arrays.fill(CHARS, 461, 497, (byte) -19 ); // Fill 36 of value (byte) -19
  161. Arrays.fill(CHARS, 497, 500, (byte) 33 ); // Fill 3 of value (byte) 33
  162. Arrays.fill(CHARS, 500, 502, (byte) -19 ); // Fill 2 of value (byte) -19
  163. Arrays.fill(CHARS, 502, 506, (byte) 33 ); // Fill 4 of value (byte) 33
  164. Arrays.fill(CHARS, 506, 536, (byte) -19 ); // Fill 30 of value (byte) -19
  165. Arrays.fill(CHARS, 536, 592, (byte) 33 ); // Fill 56 of value (byte) 33
  166. Arrays.fill(CHARS, 592, 681, (byte) -19 ); // Fill 89 of value (byte) -19
  167. Arrays.fill(CHARS, 681, 699, (byte) 33 ); // Fill 18 of value (byte) 33
  168. Arrays.fill(CHARS, 699, 706, (byte) -19 ); // Fill 7 of value (byte) -19
  169. Arrays.fill(CHARS, 706, 720, (byte) 33 ); // Fill 14 of value (byte) 33
  170. Arrays.fill(CHARS, 720, 722, (byte) -87 ); // Fill 2 of value (byte) -87
  171. Arrays.fill(CHARS, 722, 768, (byte) 33 ); // Fill 46 of value (byte) 33
  172. Arrays.fill(CHARS, 768, 838, (byte) -87 ); // Fill 70 of value (byte) -87
  173. Arrays.fill(CHARS, 838, 864, (byte) 33 ); // Fill 26 of value (byte) 33
  174. Arrays.fill(CHARS, 864, 866, (byte) -87 ); // Fill 2 of value (byte) -87
  175. Arrays.fill(CHARS, 866, 902, (byte) 33 ); // Fill 36 of value (byte) 33
  176. CHARS[902] = -19;
  177. CHARS[903] = -87;
  178. Arrays.fill(CHARS, 904, 907, (byte) -19 ); // Fill 3 of value (byte) -19
  179. CHARS[907] = 33;
  180. CHARS[908] = -19;
  181. CHARS[909] = 33;
  182. Arrays.fill(CHARS, 910, 930, (byte) -19 ); // Fill 20 of value (byte) -19
  183. CHARS[930] = 33;
  184. Arrays.fill(CHARS, 931, 975, (byte) -19 ); // Fill 44 of value (byte) -19
  185. CHARS[975] = 33;
  186. Arrays.fill(CHARS, 976, 983, (byte) -19 ); // Fill 7 of value (byte) -19
  187. Arrays.fill(CHARS, 983, 986, (byte) 33 ); // Fill 3 of value (byte) 33
  188. CHARS[986] = -19;
  189. CHARS[987] = 33;
  190. CHARS[988] = -19;
  191. CHARS[989] = 33;
  192. CHARS[990] = -19;
  193. CHARS[991] = 33;
  194. CHARS[992] = -19;
  195. CHARS[993] = 33;
  196. Arrays.fill(CHARS, 994, 1012, (byte) -19 ); // Fill 18 of value (byte) -19
  197. Arrays.fill(CHARS, 1012, 1025, (byte) 33 ); // Fill 13 of value (byte) 33
  198. Arrays.fill(CHARS, 1025, 1037, (byte) -19 ); // Fill 12 of value (byte) -19
  199. CHARS[1037] = 33;
  200. Arrays.fill(CHARS, 1038, 1104, (byte) -19 ); // Fill 66 of value (byte) -19
  201. CHARS[1104] = 33;
  202. Arrays.fill(CHARS, 1105, 1117, (byte) -19 ); // Fill 12 of value (byte) -19
  203. CHARS[1117] = 33;
  204. Arrays.fill(CHARS, 1118, 1154, (byte) -19 ); // Fill 36 of value (byte) -19
  205. CHARS[1154] = 33;
  206. Arrays.fill(CHARS, 1155, 1159, (byte) -87 ); // Fill 4 of value (byte) -87
  207. Arrays.fill(CHARS, 1159, 1168, (byte) 33 ); // Fill 9 of value (byte) 33
  208. Arrays.fill(CHARS, 1168, 1221, (byte) -19 ); // Fill 53 of value (byte) -19
  209. Arrays.fill(CHARS, 1221, 1223, (byte) 33 ); // Fill 2 of value (byte) 33
  210. Arrays.fill(CHARS, 1223, 1225, (byte) -19 ); // Fill 2 of value (byte) -19
  211. Arrays.fill(CHARS, 1225, 1227, (byte) 33 ); // Fill 2 of value (byte) 33
  212. Arrays.fill(CHARS, 1227, 1229, (byte) -19 ); // Fill 2 of value (byte) -19
  213. Arrays.fill(CHARS, 1229, 1232, (byte) 33 ); // Fill 3 of value (byte) 33
  214. Arrays.fill(CHARS, 1232, 1260, (byte) -19 ); // Fill 28 of value (byte) -19
  215. Arrays.fill(CHARS, 1260, 1262, (byte) 33 ); // Fill 2 of value (byte) 33
  216. Arrays.fill(CHARS, 1262, 1270, (byte) -19 ); // Fill 8 of value (byte) -19
  217. Arrays.fill(CHARS, 1270, 1272, (byte) 33 ); // Fill 2 of value (byte) 33
  218. Arrays.fill(CHARS, 1272, 1274, (byte) -19 ); // Fill 2 of value (byte) -19
  219. Arrays.fill(CHARS, 1274, 1329, (byte) 33 ); // Fill 55 of value (byte) 33
  220. Arrays.fill(CHARS, 1329, 1367, (byte) -19 ); // Fill 38 of value (byte) -19
  221. Arrays.fill(CHARS, 1367, 1369, (byte) 33 ); // Fill 2 of value (byte) 33
  222. CHARS[1369] = -19;
  223. Arrays.fill(CHARS, 1370, 1377, (byte) 33 ); // Fill 7 of value (byte) 33
  224. Arrays.fill(CHARS, 1377, 1415, (byte) -19 ); // Fill 38 of value (byte) -19
  225. Arrays.fill(CHARS, 1415, 1425, (byte) 33 ); // Fill 10 of value (byte) 33
  226. Arrays.fill(CHARS, 1425, 1442, (byte) -87 ); // Fill 17 of value (byte) -87
  227. CHARS[1442] = 33;
  228. Arrays.fill(CHARS, 1443, 1466, (byte) -87 ); // Fill 23 of value (byte) -87
  229. CHARS[1466] = 33;
  230. Arrays.fill(CHARS, 1467, 1470, (byte) -87 ); // Fill 3 of value (byte) -87
  231. CHARS[1470] = 33;
  232. CHARS[1471] = -87;
  233. CHARS[1472] = 33;
  234. Arrays.fill(CHARS, 1473, 1475, (byte) -87 ); // Fill 2 of value (byte) -87
  235. CHARS[1475] = 33;
  236. CHARS[1476] = -87;
  237. Arrays.fill(CHARS, 1477, 1488, (byte) 33 ); // Fill 11 of value (byte) 33
  238. Arrays.fill(CHARS, 1488, 1515, (byte) -19 ); // Fill 27 of value (byte) -19
  239. Arrays.fill(CHARS, 1515, 1520, (byte) 33 ); // Fill 5 of value (byte) 33
  240. Arrays.fill(CHARS, 1520, 1523, (byte) -19 ); // Fill 3 of value (byte) -19
  241. Arrays.fill(CHARS, 1523, 1569, (byte) 33 ); // Fill 46 of value (byte) 33
  242. Arrays.fill(CHARS, 1569, 1595, (byte) -19 ); // Fill 26 of value (byte) -19
  243. Arrays.fill(CHARS, 1595, 1600, (byte) 33 ); // Fill 5 of value (byte) 33
  244. CHARS[1600] = -87;
  245. Arrays.fill(CHARS, 1601, 1611, (byte) -19 ); // Fill 10 of value (byte) -19
  246. Arrays.fill(CHARS, 1611, 1619, (byte) -87 ); // Fill 8 of value (byte) -87
  247. Arrays.fill(CHARS, 1619, 1632, (byte) 33 ); // Fill 13 of value (byte) 33
  248. Arrays.fill(CHARS, 1632, 1642, (byte) -87 ); // Fill 10 of value (byte) -87
  249. Arrays.fill(CHARS, 1642, 1648, (byte) 33 ); // Fill 6 of value (byte) 33
  250. CHARS[1648] = -87;
  251. Arrays.fill(CHARS, 1649, 1720, (byte) -19 ); // Fill 71 of value (byte) -19
  252. Arrays.fill(CHARS, 1720, 1722, (byte) 33 ); // Fill 2 of value (byte) 33
  253. Arrays.fill(CHARS, 1722, 1727, (byte) -19 ); // Fill 5 of value (byte) -19
  254. CHARS[1727] = 33;
  255. Arrays.fill(CHARS, 1728, 1743, (byte) -19 ); // Fill 15 of value (byte) -19
  256. CHARS[1743] = 33;
  257. Arrays.fill(CHARS, 1744, 1748, (byte) -19 ); // Fill 4 of value (byte) -19
  258. CHARS[1748] = 33;
  259. CHARS[1749] = -19;
  260. Arrays.fill(CHARS, 1750, 1765, (byte) -87 ); // Fill 15 of value (byte) -87
  261. Arrays.fill(CHARS, 1765, 1767, (byte) -19 ); // Fill 2 of value (byte) -19
  262. Arrays.fill(CHARS, 1767, 1769, (byte) -87 ); // Fill 2 of value (byte) -87
  263. CHARS[1769] = 33;
  264. Arrays.fill(CHARS, 1770, 1774, (byte) -87 ); // Fill 4 of value (byte) -87
  265. Arrays.fill(CHARS, 1774, 1776, (byte) 33 ); // Fill 2 of value (byte) 33
  266. Arrays.fill(CHARS, 1776, 1786, (byte) -87 ); // Fill 10 of value (byte) -87
  267. Arrays.fill(CHARS, 1786, 2305, (byte) 33 ); // Fill 519 of value (byte) 33
  268. Arrays.fill(CHARS, 2305, 2308, (byte) -87 ); // Fill 3 of value (byte) -87
  269. CHARS[2308] = 33;
  270. Arrays.fill(CHARS, 2309, 2362, (byte) -19 ); // Fill 53 of value (byte) -19
  271. Arrays.fill(CHARS, 2362, 2364, (byte) 33 ); // Fill 2 of value (byte) 33
  272. CHARS[2364] = -87;
  273. CHARS[2365] = -19;
  274. Arrays.fill(CHARS, 2366, 2382, (byte) -87 ); // Fill 16 of value (byte) -87
  275. Arrays.fill(CHARS, 2382, 2385, (byte) 33 ); // Fill 3 of value (byte) 33
  276. Arrays.fill(CHARS, 2385, 2389, (byte) -87 ); // Fill 4 of value (byte) -87
  277. Arrays.fill(CHARS, 2389, 2392, (byte) 33 ); // Fill 3 of value (byte) 33
  278. Arrays.fill(CHARS, 2392, 2402, (byte) -19 ); // Fill 10 of value (byte) -19
  279. Arrays.fill(CHARS, 2402, 2404, (byte) -87 ); // Fill 2 of value (byte) -87
  280. Arrays.fill(CHARS, 2404, 2406, (byte) 33 ); // Fill 2 of value (byte) 33
  281. Arrays.fill(CHARS, 2406, 2416, (byte) -87 ); // Fill 10 of value (byte) -87
  282. Arrays.fill(CHARS, 2416, 2433, (byte) 33 ); // Fill 17 of value (byte) 33
  283. Arrays.fill(CHARS, 2433, 2436, (byte) -87 ); // Fill 3 of value (byte) -87
  284. CHARS[2436] = 33;
  285. Arrays.fill(CHARS, 2437, 2445, (byte) -19 ); // Fill 8 of value (byte) -19
  286. Arrays.fill(CHARS, 2445, 2447, (byte) 33 ); // Fill 2 of value (byte) 33
  287. Arrays.fill(CHARS, 2447, 2449, (byte) -19 ); // Fill 2 of value (byte) -19
  288. Arrays.fill(CHARS, 2449, 2451, (byte) 33 ); // Fill 2 of value (byte) 33
  289. Arrays.fill(CHARS, 2451, 2473, (byte) -19 ); // Fill 22 of value (byte) -19
  290. CHARS[2473] = 33;
  291. Arrays.fill(CHARS, 2474, 2481, (byte) -19 ); // Fill 7 of value (byte) -19
  292. CHARS[2481] = 33;
  293. CHARS[2482] = -19;
  294. Arrays.fill(CHARS, 2483, 2486, (byte) 33 ); // Fill 3 of value (byte) 33
  295. Arrays.fill(CHARS, 2486, 2490, (byte) -19 ); // Fill 4 of value (byte) -19
  296. Arrays.fill(CHARS, 2490, 2492, (byte) 33 ); // Fill 2 of value (byte) 33
  297. CHARS[2492] = -87;
  298. CHARS[2493] = 33;
  299. Arrays.fill(CHARS, 2494, 2501, (byte) -87 ); // Fill 7 of value (byte) -87
  300. Arrays.fill(CHARS, 2501, 2503, (byte) 33 ); // Fill 2 of value (byte) 33
  301. Arrays.fill(CHARS, 2503, 2505, (byte) -87 ); // Fill 2 of value (byte) -87
  302. Arrays.fill(CHARS, 2505, 2507, (byte) 33 ); // Fill 2 of value (byte) 33
  303. Arrays.fill(CHARS, 2507, 2510, (byte) -87 ); // Fill 3 of value (byte) -87
  304. Arrays.fill(CHARS, 2510, 2519, (byte) 33 ); // Fill 9 of value (byte) 33
  305. CHARS[2519] = -87;
  306. Arrays.fill(CHARS, 2520, 2524, (byte) 33 ); // Fill 4 of value (byte) 33
  307. Arrays.fill(CHARS, 2524, 2526, (byte) -19 ); // Fill 2 of value (byte) -19
  308. CHARS[2526] = 33;
  309. Arrays.fill(CHARS, 2527, 2530, (byte) -19 ); // Fill 3 of value (byte) -19
  310. Arrays.fill(CHARS, 2530, 2532, (byte) -87 ); // Fill 2 of value (byte) -87
  311. Arrays.fill(CHARS, 2532, 2534, (byte) 33 ); // Fill 2 of value (byte) 33
  312. Arrays.fill(CHARS, 2534, 2544, (byte) -87 ); // Fill 10 of value (byte) -87
  313. Arrays.fill(CHARS, 2544, 2546, (byte) -19 ); // Fill 2 of value (byte) -19
  314. Arrays.fill(CHARS, 2546, 2562, (byte) 33 ); // Fill 16 of value (byte) 33
  315. CHARS[2562] = -87;
  316. Arrays.fill(CHARS, 2563, 2565, (byte) 33 ); // Fill 2 of value (byte) 33
  317. Arrays.fill(CHARS, 2565, 2571, (byte) -19 ); // Fill 6 of value (byte) -19
  318. Arrays.fill(CHARS, 2571, 2575, (byte) 33 ); // Fill 4 of value (byte) 33
  319. Arrays.fill(CHARS, 2575, 2577, (byte) -19 ); // Fill 2 of value (byte) -19
  320. Arrays.fill(CHARS, 2577, 2579, (byte) 33 ); // Fill 2 of value (byte) 33
  321. Arrays.fill(CHARS, 2579, 2601, (byte) -19 ); // Fill 22 of value (byte) -19
  322. CHARS[2601] = 33;
  323. Arrays.fill(CHARS, 2602, 2609, (byte) -19 ); // Fill 7 of value (byte) -19
  324. CHARS[2609] = 33;
  325. Arrays.fill(CHARS, 2610, 2612, (byte) -19 ); // Fill 2 of value (byte) -19
  326. CHARS[2612] = 33;
  327. Arrays.fill(CHARS, 2613, 2615, (byte) -19 ); // Fill 2 of value (byte) -19
  328. CHARS[2615] = 33;
  329. Arrays.fill(CHARS, 2616, 2618, (byte) -19 ); // Fill 2 of value (byte) -19
  330. Arrays.fill(CHARS, 2618, 2620, (byte) 33 ); // Fill 2 of value (byte) 33
  331. CHARS[2620] = -87;
  332. CHARS[2621] = 33;
  333. Arrays.fill(CHARS, 2622, 2627, (byte) -87 ); // Fill 5 of value (byte) -87
  334. Arrays.fill(CHARS, 2627, 2631, (byte) 33 ); // Fill 4 of value (byte) 33
  335. Arrays.fill(CHARS, 2631, 2633, (byte) -87 ); // Fill 2 of value (byte) -87
  336. Arrays.fill(CHARS, 2633, 2635, (byte) 33 ); // Fill 2 of value (byte) 33
  337. Arrays.fill(CHARS, 2635, 2638, (byte) -87 ); // Fill 3 of value (byte) -87
  338. Arrays.fill(CHARS, 2638, 2649, (byte) 33 ); // Fill 11 of value (byte) 33
  339. Arrays.fill(CHARS, 2649, 2653, (byte) -19 ); // Fill 4 of value (byte) -19
  340. CHARS[2653] = 33;
  341. CHARS[2654] = -19;
  342. Arrays.fill(CHARS, 2655, 2662, (byte) 33 ); // Fill 7 of value (byte) 33
  343. Arrays.fill(CHARS, 2662, 2674, (byte) -87 ); // Fill 12 of value (byte) -87
  344. Arrays.fill(CHARS, 2674, 2677, (byte) -19 ); // Fill 3 of value (byte) -19
  345. Arrays.fill(CHARS, 2677, 2689, (byte) 33 ); // Fill 12 of value (byte) 33
  346. Arrays.fill(CHARS, 2689, 2692, (byte) -87 ); // Fill 3 of value (byte) -87
  347. CHARS[2692] = 33;
  348. Arrays.fill(CHARS, 2693, 2700, (byte) -19 ); // Fill 7 of value (byte) -19
  349. CHARS[2700] = 33;
  350. CHARS[2701] = -19;
  351. CHARS[2702] = 33;
  352. Arrays.fill(CHARS, 2703, 2706, (byte) -19 ); // Fill 3 of value (byte) -19
  353. CHARS[2706] = 33;
  354. Arrays.fill(CHARS, 2707, 2729, (byte) -19 ); // Fill 22 of value (byte) -19
  355. CHARS[2729] = 33;
  356. Arrays.fill(CHARS, 2730, 2737, (byte) -19 ); // Fill 7 of value (byte) -19
  357. CHARS[2737] = 33;
  358. Arrays.fill(CHARS, 2738, 2740, (byte) -19 ); // Fill 2 of value (byte) -19
  359. CHARS[2740] = 33;
  360. Arrays.fill(CHARS, 2741, 2746, (byte) -19 ); // Fill 5 of value (byte) -19
  361. Arrays.fill(CHARS, 2746, 2748, (byte) 33 ); // Fill 2 of value (byte) 33
  362. CHARS[2748] = -87;
  363. CHARS[2749] = -19;
  364. Arrays.fill(CHARS, 2750, 2758, (byte) -87 ); // Fill 8 of value (byte) -87
  365. CHARS[2758] = 33;
  366. Arrays.fill(CHARS, 2759, 2762, (byte) -87 ); // Fill 3 of value (byte) -87
  367. CHARS[2762] = 33;
  368. Arrays.fill(CHARS, 2763, 2766, (byte) -87 ); // Fill 3 of value (byte) -87
  369. Arrays.fill(CHARS, 2766, 2784, (byte) 33 ); // Fill 18 of value (byte) 33
  370. CHARS[2784] = -19;
  371. Arrays.fill(CHARS, 2785, 2790, (byte) 33 ); // Fill 5 of value (byte) 33
  372. Arrays.fill(CHARS, 2790, 2800, (byte) -87 ); // Fill 10 of value (byte) -87
  373. Arrays.fill(CHARS, 2800, 2817, (byte) 33 ); // Fill 17 of value (byte) 33
  374. Arrays.fill(CHARS, 2817, 2820, (byte) -87 ); // Fill 3 of value (byte) -87
  375. CHARS[2820] = 33;
  376. Arrays.fill(CHARS, 2821, 2829, (byte) -19 ); // Fill 8 of value (byte) -19
  377. Arrays.fill(CHARS, 2829, 2831, (byte) 33 ); // Fill 2 of value (byte) 33
  378. Arrays.fill(CHARS, 2831, 2833, (byte) -19 ); // Fill 2 of value (byte) -19
  379. Arrays.fill(CHARS, 2833, 2835, (byte) 33 ); // Fill 2 of value (byte) 33
  380. Arrays.fill(CHARS, 2835, 2857, (byte) -19 ); // Fill 22 of value (byte) -19
  381. CHARS[2857] = 33;
  382. Arrays.fill(CHARS, 2858, 2865, (byte) -19 ); // Fill 7 of value (byte) -19
  383. CHARS[2865] = 33;
  384. Arrays.fill(CHARS, 2866, 2868, (byte) -19 ); // Fill 2 of value (byte) -19
  385. Arrays.fill(CHARS, 2868, 2870, (byte) 33 ); // Fill 2 of value (byte) 33
  386. Arrays.fill(CHARS, 2870, 2874, (byte) -19 ); // Fill 4 of value (byte) -19
  387. Arrays.fill(CHARS, 2874, 2876, (byte) 33 ); // Fill 2 of value (byte) 33
  388. CHARS[2876] = -87;
  389. CHARS[2877] = -19;
  390. Arrays.fill(CHARS, 2878, 2884, (byte) -87 ); // Fill 6 of value (byte) -87
  391. Arrays.fill(CHARS, 2884, 2887, (byte) 33 ); // Fill 3 of value (byte) 33
  392. Arrays.fill(CHARS, 2887, 2889, (byte) -87 ); // Fill 2 of value (byte) -87
  393. Arrays.fill(CHARS, 2889, 2891, (byte) 33 ); // Fill 2 of value (byte) 33
  394. Arrays.fill(CHARS, 2891, 2894, (byte) -87 ); // Fill 3 of value (byte) -87
  395. Arrays.fill(CHARS, 2894, 2902, (byte) 33 ); // Fill 8 of value (byte) 33
  396. Arrays.fill(CHARS, 2902, 2904, (byte) -87 ); // Fill 2 of value (byte) -87
  397. Arrays.fill(CHARS, 2904, 2908, (byte) 33 ); // Fill 4 of value (byte) 33
  398. Arrays.fill(CHARS, 2908, 2910, (byte) -19 ); // Fill 2 of value (byte) -19
  399. CHARS[2910] = 33;
  400. Arrays.fill(CHARS, 2911, 2914, (byte) -19 ); // Fill 3 of value (byte) -19
  401. Arrays.fill(CHARS, 2914, 2918, (byte) 33 ); // Fill 4 of value (byte) 33
  402. Arrays.fill(CHARS, 2918, 2928, (byte) -87 ); // Fill 10 of value (byte) -87
  403. Arrays.fill(CHARS, 2928, 2946, (byte) 33 ); // Fill 18 of value (byte) 33
  404. Arrays.fill(CHARS, 2946, 2948, (byte) -87 ); // Fill 2 of value (byte) -87
  405. CHARS[2948] = 33;
  406. Arrays.fill(CHARS, 2949, 2955, (byte) -19 ); // Fill 6 of value (byte) -19
  407. Arrays.fill(CHARS, 2955, 2958, (byte) 33 ); // Fill 3 of value (byte) 33
  408. Arrays.fill(CHARS, 2958, 2961, (byte) -19 ); // Fill 3 of value (byte) -19
  409. CHARS[2961] = 33;
  410. Arrays.fill(CHARS, 2962, 2966, (byte) -19 ); // Fill 4 of value (byte) -19
  411. Arrays.fill(CHARS, 2966, 2969, (byte) 33 ); // Fill 3 of value (byte) 33
  412. Arrays.fill(CHARS, 2969, 2971, (byte) -19 ); // Fill 2 of value (byte) -19
  413. CHARS[2971] = 33;
  414. CHARS[2972] = -19;
  415. CHARS[2973] = 33;
  416. Arrays.fill(CHARS, 2974, 2976, (byte) -19 ); // Fill 2 of value (byte) -19
  417. Arrays.fill(CHARS, 2976, 2979, (byte) 33 ); // Fill 3 of value (byte) 33
  418. Arrays.fill(CHARS, 2979, 2981, (byte) -19 ); // Fill 2 of value (byte) -19
  419. Arrays.fill(CHARS, 2981, 2984, (byte) 33 ); // Fill 3 of value (byte) 33
  420. Arrays.fill(CHARS, 2984, 2987, (byte) -19 ); // Fill 3 of value (byte) -19
  421. Arrays.fill(CHARS, 2987, 2990, (byte) 33 ); // Fill 3 of value (byte) 33
  422. Arrays.fill(CHARS, 2990, 2998, (byte) -19 ); // Fill 8 of value (byte) -19
  423. CHARS[2998] = 33;
  424. Arrays.fill(CHARS, 2999, 3002, (byte) -19 ); // Fill 3 of value (byte) -19
  425. Arrays.fill(CHARS, 3002, 3006, (byte) 33 ); // Fill 4 of value (byte) 33
  426. Arrays.fill(CHARS, 3006, 3011, (byte) -87 ); // Fill 5 of value (byte) -87
  427. Arrays.fill(CHARS, 3011, 3014, (byte) 33 ); // Fill 3 of value (byte) 33
  428. Arrays.fill(CHARS, 3014, 3017, (byte) -87 ); // Fill 3 of value (byte) -87
  429. CHARS[3017] = 33;
  430. Arrays.fill(CHARS, 3018, 3022, (byte) -87 ); // Fill 4 of value (byte) -87
  431. Arrays.fill(CHARS, 3022, 3031, (byte) 33 ); // Fill 9 of value (byte) 33
  432. CHARS[3031] = -87;
  433. Arrays.fill(CHARS, 3032, 3047, (byte) 33 ); // Fill 15 of value (byte) 33
  434. Arrays.fill(CHARS, 3047, 3056, (byte) -87 ); // Fill 9 of value (byte) -87
  435. Arrays.fill(CHARS, 3056, 3073, (byte) 33 ); // Fill 17 of value (byte) 33
  436. Arrays.fill(CHARS, 3073, 3076, (byte) -87 ); // Fill 3 of value (byte) -87
  437. CHARS[3076] = 33;
  438. Arrays.fill(CHARS, 3077, 3085, (byte) -19 ); // Fill 8 of value (byte) -19
  439. CHARS[3085] = 33;
  440. Arrays.fill(CHARS, 3086, 3089, (byte) -19 ); // Fill 3 of value (byte) -19
  441. CHARS[3089] = 33;
  442. Arrays.fill(CHARS, 3090, 3113, (byte) -19 ); // Fill 23 of value (byte) -19
  443. CHARS[3113] = 33;
  444. Arrays.fill(CHARS, 3114, 3124, (byte) -19 ); // Fill 10 of value (byte) -19
  445. CHARS[3124] = 33;
  446. Arrays.fill(CHARS, 3125, 3130, (byte) -19 ); // Fill 5 of value (byte) -19
  447. Arrays.fill(CHARS, 3130, 3134, (byte) 33 ); // Fill 4 of value (byte) 33
  448. Arrays.fill(CHARS, 3134, 3141, (byte) -87 ); // Fill 7 of value (byte) -87
  449. CHARS[3141] = 33;
  450. Arrays.fill(CHARS, 3142, 3145, (byte) -87 ); // Fill 3 of value (byte) -87
  451. CHARS[3145] = 33;
  452. Arrays.fill(CHARS, 3146, 3150, (byte) -87 ); // Fill 4 of value (byte) -87
  453. Arrays.fill(CHARS, 3150, 3157, (byte) 33 ); // Fill 7 of value (byte) 33
  454. Arrays.fill(CHARS, 3157, 3159, (byte) -87 ); // Fill 2 of value (byte) -87
  455. Arrays.fill(CHARS, 3159, 3168, (byte) 33 ); // Fill 9 of value (byte) 33
  456. Arrays.fill(CHARS, 3168, 3170, (byte) -19 ); // Fill 2 of value (byte) -19
  457. Arrays.fill(CHARS, 3170, 3174, (byte) 33 ); // Fill 4 of value (byte) 33
  458. Arrays.fill(CHARS, 3174, 3184, (byte) -87 ); // Fill 10 of value (byte) -87
  459. Arrays.fill(CHARS, 3184, 3202, (byte) 33 ); // Fill 18 of value (byte) 33
  460. Arrays.fill(CHARS, 3202, 3204, (byte) -87 ); // Fill 2 of value (byte) -87
  461. CHARS[3204] = 33;
  462. Arrays.fill(CHARS, 3205, 3213, (byte) -19 ); // Fill 8 of value (byte) -19
  463. CHARS[3213] = 33;
  464. Arrays.fill(CHARS, 3214, 3217, (byte) -19 ); // Fill 3 of value (byte) -19
  465. CHARS[3217] = 33;
  466. Arrays.fill(CHARS, 3218, 3241, (byte) -19 ); // Fill 23 of value (byte) -19
  467. CHARS[3241] = 33;
  468. Arrays.fill(CHARS, 3242, 3252, (byte) -19 ); // Fill 10 of value (byte) -19
  469. CHARS[3252] = 33;
  470. Arrays.fill(CHARS, 3253, 3258, (byte) -19 ); // Fill 5 of value (byte) -19
  471. Arrays.fill(CHARS, 3258, 3262, (byte) 33 ); // Fill 4 of value (byte) 33
  472. Arrays.fill(CHARS, 3262, 3269, (byte) -87 ); // Fill 7 of value (byte) -87
  473. CHARS[3269] = 33;
  474. Arrays.fill(CHARS, 3270, 3273, (byte) -87 ); // Fill 3 of value (byte) -87
  475. CHARS[3273] = 33;
  476. Arrays.fill(CHARS, 3274, 3278, (byte) -87 ); // Fill 4 of value (byte) -87
  477. Arrays.fill(CHARS, 3278, 3285, (byte) 33 ); // Fill 7 of value (byte) 33
  478. Arrays.fill(CHARS, 3285, 3287, (byte) -87 ); // Fill 2 of value (byte) -87
  479. Arrays.fill(CHARS, 3287, 3294, (byte) 33 ); // Fill 7 of value (byte) 33
  480. CHARS[3294] = -19;
  481. CHARS[3295] = 33;
  482. Arrays.fill(CHARS, 3296, 3298, (byte) -19 ); // Fill 2 of value (byte) -19
  483. Arrays.fill(CHARS, 3298, 3302, (byte) 33 ); // Fill 4 of value (byte) 33
  484. Arrays.fill(CHARS, 3302, 3312, (byte) -87 ); // Fill 10 of value (byte) -87
  485. Arrays.fill(CHARS, 3312, 3330, (byte) 33 ); // Fill 18 of value (byte) 33
  486. Arrays.fill(CHARS, 3330, 3332, (byte) -87 ); // Fill 2 of value (byte) -87
  487. CHARS[3332] = 33;
  488. Arrays.fill(CHARS, 3333, 3341, (byte) -19 ); // Fill 8 of value (byte) -19
  489. CHARS[3341] = 33;
  490. Arrays.fill(CHARS, 3342, 3345, (byte) -19 ); // Fill 3 of value (byte) -19
  491. CHARS[3345] = 33;
  492. Arrays.fill(CHARS, 3346, 3369, (byte) -19 ); // Fill 23 of value (byte) -19
  493. CHARS[3369] = 33;
  494. Arrays.fill(CHARS, 3370, 3386, (byte) -19 ); // Fill 16 of value (byte) -19
  495. Arrays.fill(CHARS, 3386, 3390, (byte) 33 ); // Fill 4 of value (byte) 33
  496. Arrays.fill(CHARS, 3390, 3396, (byte) -87 ); // Fill 6 of value (byte) -87
  497. Arrays.fill(CHARS, 3396, 3398, (byte) 33 ); // Fill 2 of value (byte) 33
  498. Arrays.fill(CHARS, 3398, 3401, (byte) -87 ); // Fill 3 of value (byte) -87
  499. CHARS[3401] = 33;
  500. Arrays.fill(CHARS, 3402, 3406, (byte) -87 ); // Fill 4 of value (byte) -87
  501. Arrays.fill(CHARS, 3406, 3415, (byte) 33 ); // Fill 9 of value (byte) 33
  502. CHARS[3415] = -87;
  503. Arrays.fill(CHARS, 3416, 3424, (byte) 33 ); // Fill 8 of value (byte) 33
  504. Arrays.fill(CHARS, 3424, 3426, (byte) -19 ); // Fill 2 of value (byte) -19
  505. Arrays.fill(CHARS, 3426, 3430, (byte) 33 ); // Fill 4 of value (byte) 33
  506. Arrays.fill(CHARS, 3430, 3440, (byte) -87 ); // Fill 10 of value (byte) -87
  507. Arrays.fill(CHARS, 3440, 3585, (byte) 33 ); // Fill 145 of value (byte) 33
  508. Arrays.fill(CHARS, 3585, 3631, (byte) -19 ); // Fill 46 of value (byte) -19
  509. CHARS[3631] = 33;
  510. CHARS[3632] = -19;
  511. CHARS[3633] = -87;
  512. Arrays.fill(CHARS, 3634, 3636, (byte) -19 ); // Fill 2 of value (byte) -19
  513. Arrays.fill(CHARS, 3636, 3643, (byte) -87 ); // Fill 7 of value (byte) -87
  514. Arrays.fill(CHARS, 3643, 3648, (byte) 33 ); // Fill 5 of value (byte) 33
  515. Arrays.fill(CHARS, 3648, 3654, (byte) -19 ); // Fill 6 of value (byte) -19
  516. Arrays.fill(CHARS, 3654, 3663, (byte) -87 ); // Fill 9 of value (byte) -87
  517. CHARS[3663] = 33;
  518. Arrays.fill(CHARS, 3664, 3674, (byte) -87 ); // Fill 10 of value (byte) -87
  519. Arrays.fill(CHARS, 3674, 3713, (byte) 33 ); // Fill 39 of value (byte) 33
  520. Arrays.fill(CHARS, 3713, 3715, (byte) -19 ); // Fill 2 of value (byte) -19
  521. CHARS[3715] = 33;
  522. CHARS[3716] = -19;
  523. Arrays.fill(CHARS, 3717, 3719, (byte) 33 ); // Fill 2 of value (byte) 33
  524. Arrays.fill(CHARS, 3719, 3721, (byte) -19 ); // Fill 2 of value (byte) -19
  525. CHARS[3721] = 33;
  526. CHARS[3722] = -19;
  527. Arrays.fill(CHARS, 3723, 3725, (byte) 33 ); // Fill 2 of value (byte) 33
  528. CHARS[3725] = -19;
  529. Arrays.fill(CHARS, 3726, 3732, (byte) 33 ); // Fill 6 of value (byte) 33
  530. Arrays.fill(CHARS, 3732, 3736, (byte) -19 ); // Fill 4 of value (byte) -19
  531. CHARS[3736] = 33;
  532. Arrays.fill(CHARS, 3737, 3744, (byte) -19 ); // Fill 7 of value (byte) -19
  533. CHARS[3744] = 33;
  534. Arrays.fill(CHARS, 3745, 3748, (byte) -19 ); // Fill 3 of value (byte) -19
  535. CHARS[3748] = 33;
  536. CHARS[3749] = -19;
  537. CHARS[3750] = 33;
  538. CHARS[3751] = -19;
  539. Arrays.fill(CHARS, 3752, 3754, (byte) 33 ); // Fill 2 of value (byte) 33
  540. Arrays.fill(CHARS, 3754, 3756, (byte) -19 ); // Fill 2 of value (byte) -19
  541. CHARS[3756] = 33;
  542. Arrays.fill(CHARS, 3757, 3759, (byte) -19 ); // Fill 2 of value (byte) -19
  543. CHARS[3759] = 33;
  544. CHARS[3760] = -19;
  545. CHARS[3761] = -87;
  546. Arrays.fill(CHARS, 3762, 3764, (byte) -19 ); // Fill 2 of value (byte) -19
  547. Arrays.fill(CHARS, 3764, 3770, (byte) -87 ); // Fill 6 of value (byte) -87
  548. CHARS[3770] = 33;
  549. Arrays.fill(CHARS, 3771, 3773, (byte) -87 ); // Fill 2 of value (byte) -87
  550. CHARS[3773] = -19;
  551. Arrays.fill(CHARS, 3774, 3776, (byte) 33 ); // Fill 2 of value (byte) 33
  552. Arrays.fill(CHARS, 3776, 3781, (byte) -19 ); // Fill 5 of value (byte) -19
  553. CHARS[3781] = 33;
  554. CHARS[3782] = -87;
  555. CHARS[3783] = 33;
  556. Arrays.fill(CHARS, 3784, 3790, (byte) -87 ); // Fill 6 of value (byte) -87
  557. Arrays.fill(CHARS, 3790, 3792, (byte) 33 ); // Fill 2 of value (byte) 33
  558. Arrays.fill(CHARS, 3792, 3802, (byte) -87 ); // Fill 10 of value (byte) -87
  559. Arrays.fill(CHARS, 3802, 3864, (byte) 33 ); // Fill 62 of value (byte) 33
  560. Arrays.fill(CHARS, 3864, 3866, (byte) -87 ); // Fill 2 of value (byte) -87
  561. Arrays.fill(CHARS, 3866, 3872, (byte) 33 ); // Fill 6 of value (byte) 33
  562. Arrays.fill(CHARS, 3872, 3882, (byte) -87 ); // Fill 10 of value (byte) -87
  563. Arrays.fill(CHARS, 3882, 3893, (byte) 33 ); // Fill 11 of value (byte) 33
  564. CHARS[3893] = -87;
  565. CHARS[3894] = 33;
  566. CHARS[3895] = -87;
  567. CHARS[3896] = 33;
  568. CHARS[3897] = -87;
  569. Arrays.fill(CHARS, 3898, 3902, (byte) 33 ); // Fill 4 of value (byte) 33
  570. Arrays.fill(CHARS, 3902, 3904, (byte) -87 ); // Fill 2 of value (byte) -87
  571. Arrays.fill(CHARS, 3904, 3912, (byte) -19 ); // Fill 8 of value (byte) -19
  572. CHARS[3912] = 33;
  573. Arrays.fill(CHARS, 3913, 3946, (byte) -19 ); // Fill 33 of value (byte) -19
  574. Arrays.fill(CHARS, 3946, 3953, (byte) 33 ); // Fill 7 of value (byte) 33
  575. Arrays.fill(CHARS, 3953, 3973, (byte) -87 ); // Fill 20 of value (byte) -87
  576. CHARS[3973] = 33;
  577. Arrays.fill(CHARS, 3974, 3980, (byte) -87 ); // Fill 6 of value (byte) -87
  578. Arrays.fill(CHARS, 3980, 3984, (byte) 33 ); // Fill 4 of value (byte) 33
  579. Arrays.fill(CHARS, 3984, 3990, (byte) -87 ); // Fill 6 of value (byte) -87
  580. CHARS[3990] = 33;
  581. CHARS[3991] = -87;
  582. CHARS[3992] = 33;
  583. Arrays.fill(CHARS, 3993, 4014, (byte) -87 ); // Fill 21 of value (byte) -87
  584. Arrays.fill(CHARS, 4014, 4017, (byte) 33 ); // Fill 3 of value (byte) 33
  585. Arrays.fill(CHARS, 4017, 4024, (byte) -87 ); // Fill 7 of value (byte) -87
  586. CHARS[4024] = 33;
  587. CHARS[4025] = -87;
  588. Arrays.fill(CHARS, 4026, 4256, (byte) 33 ); // Fill 230 of value (byte) 33
  589. Arrays.fill(CHARS, 4256, 4294, (byte) -19 ); // Fill 38 of value (byte) -19
  590. Arrays.fill(CHARS, 4294, 4304, (byte) 33 ); // Fill 10 of value (byte) 33
  591. Arrays.fill(CHARS, 4304, 4343, (byte) -19 ); // Fill 39 of value (byte) -19
  592. Arrays.fill(CHARS, 4343, 4352, (byte) 33 ); // Fill 9 of value (byte) 33
  593. CHARS[4352] = -19;
  594. CHARS[4353] = 33;
  595. Arrays.fill(CHARS, 4354, 4356, (byte) -19 ); // Fill 2 of value (byte) -19
  596. CHARS[4356] = 33;
  597. Arrays.fill(CHARS, 4357, 4360, (byte) -19 ); // Fill 3 of value (byte) -19
  598. CHARS[4360] = 33;
  599. CHARS[4361] = -19;
  600. CHARS[4362] = 33;
  601. Arrays.fill(CHARS, 4363, 4365, (byte) -19 ); // Fill 2 of value (byte) -19
  602. CHARS[4365] = 33;
  603. Arrays.fill(CHARS, 4366, 4371, (byte) -19 ); // Fill 5 of value (byte) -19
  604. Arrays.fill(CHARS, 4371, 4412, (byte) 33 ); // Fill 41 of value (byte) 33
  605. CHARS[4412] = -19;
  606. CHARS[4413] = 33;
  607. CHARS[4414] = -19;
  608. CHARS[4415] = 33;
  609. CHARS[4416] = -19;
  610. Arrays.fill(CHARS, 4417, 4428, (byte) 33 ); // Fill 11 of value (byte) 33
  611. CHARS[4428] = -19;
  612. CHARS[4429] = 33;
  613. CHARS[4430] = -19;
  614. CHARS[4431] = 33;
  615. CHARS[4432] = -19;
  616. Arrays.fill(CHARS, 4433, 4436, (byte) 33 ); // Fill 3 of value (byte) 33
  617. Arrays.fill(CHARS, 4436, 4438, (byte) -19 ); // Fill 2 of value (byte) -19
  618. Arrays.fill(CHARS, 4438, 4441, (byte) 33 ); // Fill 3 of value (byte) 33
  619. CHARS[4441] = -19;
  620. Arrays.fill(CHARS, 4442, 4447, (byte) 33 ); // Fill 5 of value (byte) 33
  621. Arrays.fill(CHARS, 4447, 4450, (byte) -19 ); // Fill 3 of value (byte) -19
  622. CHARS[4450] = 33;
  623. CHARS[4451] = -19;
  624. CHARS[4452] = 33;
  625. CHARS[4453] = -19;
  626. CHARS[4454] = 33;
  627. CHARS[4455] = -19;
  628. CHARS[4456] = 33;
  629. CHARS[4457] = -19;
  630. Arrays.fill(CHARS, 4458, 4461, (byte) 33 ); // Fill 3 of value (byte) 33
  631. Arrays.fill(CHARS, 4461, 4463, (byte) -19 ); // Fill 2 of value (byte) -19
  632. Arrays.fill(CHARS, 4463, 4466, (byte) 33 ); // Fill 3 of value (byte) 33
  633. Arrays.fill(CHARS, 4466, 4468, (byte) -19 ); // Fill 2 of value (byte) -19
  634. CHARS[4468] = 33;
  635. CHARS[4469] = -19;
  636. Arrays.fill(CHARS, 4470, 4510, (byte) 33 ); // Fill 40 of value (byte) 33
  637. CHARS[4510] = -19;
  638. Arrays.fill(CHARS, 4511, 4520, (byte) 33 ); // Fill 9 of value (byte) 33
  639. CHARS[4520] = -19;
  640. Arrays.fill(CHARS, 4521, 4523, (byte) 33 ); // Fill 2 of value (byte) 33
  641. CHARS[4523] = -19;
  642. Arrays.fill(CHARS, 4524, 4526, (byte) 33 ); // Fill 2 of value (byte) 33
  643. Arrays.fill(CHARS, 4526, 4528, (byte) -19 ); // Fill 2 of value (byte) -19
  644. Arrays.fill(CHARS, 4528, 4535, (byte) 33 ); // Fill 7 of value (byte) 33
  645. Arrays.fill(CHARS, 4535, 4537, (byte) -19 ); // Fill 2 of value (byte) -19
  646. CHARS[4537] = 33;
  647. CHARS[4538] = -19;
  648. CHARS[4539] = 33;
  649. Arrays.fill(CHARS, 4540, 4547, (byte) -19 ); // Fill 7 of value (byte) -19
  650. Arrays.fill(CHARS, 4547, 4587, (byte) 33 ); // Fill 40 of value (byte) 33
  651. CHARS[4587] = -19;
  652. Arrays.fill(CHARS, 4588, 4592, (byte) 33 ); // Fill 4 of value (byte) 33
  653. CHARS[4592] = -19;
  654. Arrays.fill(CHARS, 4593, 4601, (byte) 33 ); // Fill 8 of value (byte) 33
  655. CHARS[4601] = -19;
  656. Arrays.fill(CHARS, 4602, 7680, (byte) 33 ); // Fill 3078 of value (byte) 33
  657. Arrays.fill(CHARS, 7680, 7836, (byte) -19 ); // Fill 156 of value (byte) -19
  658. Arrays.fill(CHARS, 7836, 7840, (byte) 33 ); // Fill 4 of value (byte) 33
  659. Arrays.fill(CHARS, 7840, 7930, (byte) -19 ); // Fill 90 of value (byte) -19
  660. Arrays.fill(CHARS, 7930, 7936, (byte) 33 ); // Fill 6 of value (byte) 33
  661. Arrays.fill(CHARS, 7936, 7958, (byte) -19 ); // Fill 22 of value (byte) -19
  662. Arrays.fill(CHARS, 7958, 7960, (byte) 33 ); // Fill 2 of value (byte) 33
  663. Arrays.fill(CHARS, 7960, 7966, (byte) -19 ); // Fill 6 of value (byte) -19
  664. Arrays.fill(CHARS, 7966, 7968, (byte) 33 ); // Fill 2 of value (byte) 33
  665. Arrays.fill(CHARS, 7968, 8006, (byte) -19 ); // Fill 38 of value (byte) -19
  666. Arrays.fill(CHARS, 8006, 8008, (byte) 33 ); // Fill 2 of value (byte) 33
  667. Arrays.fill(CHARS, 8008, 8014, (byte) -19 ); // Fill 6 of value (byte) -19
  668. Arrays.fill(CHARS, 8014, 8016, (byte) 33 ); // Fill 2 of value (byte) 33
  669. Arrays.fill(CHARS, 8016, 8024, (byte) -19 ); // Fill 8 of value (byte) -19
  670. CHARS[8024] = 33;
  671. CHARS[8025] = -19;
  672. CHARS[8026] = 33;
  673. CHARS[8027] = -19;
  674. CHARS[8028] = 33;
  675. CHARS[8029] = -19;
  676. CHARS[8030] = 33;
  677. Arrays.fill(CHARS, 8031, 8062, (byte) -19 ); // Fill 31 of value (byte) -19
  678. Arrays.fill(CHARS, 8062, 8064, (byte) 33 ); // Fill 2 of value (byte) 33
  679. Arrays.fill(CHARS, 8064, 8117, (byte) -19 ); // Fill 53 of value (byte) -19
  680. CHARS[8117] = 33;
  681. Arrays.fill(CHARS, 8118, 8125, (byte) -19 ); // Fill 7 of value (byte) -19
  682. CHARS[8125] = 33;
  683. CHARS[8126] = -19;
  684. Arrays.fill(CHARS, 8127, 8130, (byte) 33 ); // Fill 3 of value (byte) 33
  685. Arrays.fill(CHARS, 8130, 8133, (byte) -19 ); // Fill 3 of value (byte) -19
  686. CHARS[8133] = 33;
  687. Arrays.fill(CHARS, 8134, 8141, (byte) -19 ); // Fill 7 of value (byte) -19
  688. Arrays.fill(CHARS, 8141, 8144, (byte) 33 ); // Fill 3 of value (byte) 33
  689. Arrays.fill(CHARS, 8144, 8148, (byte) -19 ); // Fill 4 of value (byte) -19
  690. Arrays.fill(CHARS, 8148, 8150, (byte) 33 ); // Fill 2 of value (byte) 33
  691. Arrays.fill(CHARS, 8150, 8156, (byte) -19 ); // Fill 6 of value (byte) -19
  692. Arrays.fill(CHARS, 8156, 8160, (byte) 33 ); // Fill 4 of value (byte) 33
  693. Arrays.fill(CHARS, 8160, 8173, (byte) -19 ); // Fill 13 of value (byte) -19
  694. Arrays.fill(CHARS, 8173, 8178, (byte) 33 ); // Fill 5 of value (byte) 33
  695. Arrays.fill(CHARS, 8178, 8181, (byte) -19 ); // Fill 3 of value (byte) -19
  696. CHARS[8181] = 33;
  697. Arrays.fill(CHARS, 8182, 8189, (byte) -19 ); // Fill 7 of value (byte) -19
  698. Arrays.fill(CHARS, 8189, 8400, (byte) 33 ); // Fill 211 of value (byte) 33
  699. Arrays.fill(CHARS, 8400, 8413, (byte) -87 ); // Fill 13 of value (byte) -87
  700. Arrays.fill(CHARS, 8413, 8417, (byte) 33 ); // Fill 4 of value (byte) 33
  701. CHARS[8417] = -87;
  702. Arrays.fill(CHARS, 8418, 8486, (byte) 33 ); // Fill 68 of value (byte) 33
  703. CHARS[8486] = -19;
  704. Arrays.fill(CHARS, 8487, 8490, (byte) 33 ); // Fill 3 of value (byte) 33
  705. Arrays.fill(CHARS, 8490, 8492, (byte) -19 ); // Fill 2 of value (byte) -19
  706. Arrays.fill(CHARS, 8492, 8494, (byte) 33 ); // Fill 2 of value (byte) 33
  707. CHARS[8494] = -19;
  708. Arrays.fill(CHARS, 8495, 8576, (byte) 33 ); // Fill 81 of value (byte) 33
  709. Arrays.fill(CHARS, 8576, 8579, (byte) -19 ); // Fill 3 of value (byte) -19
  710. Arrays.fill(CHARS, 8579, 12293, (byte) 33 ); // Fill 3714 of value (byte) 33
  711. CHARS[12293] = -87;
  712. CHARS[12294] = 33;
  713. CHARS[12295] = -19;
  714. Arrays.fill(CHARS, 12296, 12321, (byte) 33 ); // Fill 25 of value (byte) 33
  715. Arrays.fill(CHARS, 12321, 12330, (byte) -19 ); // Fill 9 of value (byte) -19
  716. Arrays.fill(CHARS, 12330, 12336, (byte) -87 ); // Fill 6 of value (byte) -87
  717. CHARS[12336] = 33;
  718. Arrays.fill(CHARS, 12337, 12342, (byte) -87 ); // Fill 5 of value (byte) -87
  719. Arrays.fill(CHARS, 12342, 12353, (byte) 33 ); // Fill 11 of value (byte) 33
  720. Arrays.fill(CHARS, 12353, 12437, (byte) -19 ); // Fill 84 of value (byte) -19
  721. Arrays.fill(CHARS, 12437, 12441, (byte) 33 ); // Fill 4 of value (byte) 33
  722. Arrays.fill(CHARS, 12441, 12443, (byte) -87 ); // Fill 2 of value (byte) -87
  723. Arrays.fill(CHARS, 12443, 12445, (byte) 33 ); // Fill 2 of value (byte) 33
  724. Arrays.fill(CHARS, 12445, 12447, (byte) -87 ); // Fill 2 of value (byte) -87
  725. Arrays.fill(CHARS, 12447, 12449, (byte) 33 ); // Fill 2 of value (byte) 33
  726. Arrays.fill(CHARS, 12449, 12539, (byte) -19 ); // Fill 90 of value (byte) -19
  727. CHARS[12539] = 33;
  728. Arrays.fill(CHARS, 12540, 12543, (byte) -87 ); // Fill 3 of value (byte) -87
  729. Arrays.fill(CHARS, 12543, 12549, (byte) 33 ); // Fill 6 of value (byte) 33
  730. Arrays.fill(CHARS, 12549, 12589, (byte) -19 ); // Fill 40 of value (byte) -19
  731. Arrays.fill(CHARS, 12589, 19968, (byte) 33 ); // Fill 7379 of value (byte) 33
  732. Arrays.fill(CHARS, 19968, 40870, (byte) -19 ); // Fill 20902 of value (byte) -19
  733. Arrays.fill(CHARS, 40870, 44032, (byte) 33 ); // Fill 3162 of value (byte) 33
  734. Arrays.fill(CHARS, 44032, 55204, (byte) -19 ); // Fill 11172 of value (byte) -19
  735. Arrays.fill(CHARS, 55204, 55296, (byte) 33 ); // Fill 92 of value (byte) 33
  736. Arrays.fill(CHARS, 57344, 65534, (byte) 33 ); // Fill 8190 of value (byte) 33
  737. } // <clinit>()
  738. //
  739. // Public static methods
  740. //
  741. /**
  742. * Returns true if the specified character is a supplemental character.
  743. *
  744. * @param c The character to check.
  745. */
  746. public static boolean isSupplemental(int c) {
  747. return (c >= 0x10000 && c <= 0x10FFFF);
  748. }
  749. /**
  750. * Returns true the supplemental character corresponding to the given
  751. * surrogates.
  752. *
  753. * @param h The high surrogate.
  754. * @param l The low surrogate.
  755. */
  756. public static int supplemental(char h, char l) {
  757. return (h - 0xD800) * 0x400 + (l - 0xDC00) + 0x10000;
  758. }
  759. /**
  760. * Returns the high surrogate of a supplemental character
  761. *
  762. * @param c The supplemental character to "split".
  763. */
  764. public static char highSurrogate(int c) {
  765. return (char) (((c - 0x00010000) >> 10) + 0xD800);
  766. }
  767. /**
  768. * Returns the low surrogate of a supplemental character
  769. *
  770. * @param c The supplemental character to "split".
  771. */
  772. public static char lowSurrogate(int c) {
  773. return (char) (((c - 0x00010000) & 0x3FF) + 0xDC00);
  774. }
  775. /**
  776. * Returns whether the given character is a high surrogate
  777. *
  778. * @param c The character to check.
  779. */
  780. public static boolean isHighSurrogate(int c) {
  781. return (0xD800 <= c && c <= 0xDBFF);
  782. }
  783. /**
  784. * Returns whether the given character is a low surrogate
  785. *
  786. * @param c The character to check.
  787. */
  788. public static boolean isLowSurrogate(int c) {
  789. return (0xDC00 <= c && c <= 0xDFFF);
  790. }
  791. /**
  792. * Returns true if the specified character is valid. This method
  793. * also checks the surrogate character range from 0x10000 to 0x10FFFF.
  794. * <p>
  795. * If the program chooses to apply the mask directly to the
  796. * <code>CHARS</code> array, then they are responsible for checking
  797. * the surrogate character range.
  798. *
  799. * @param c The character to check.
  800. */
  801. public static boolean isValid(int c) {
  802. return (c < 0x10000 && (CHARS[c] & MASK_VALID) != 0) ||
  803. (0x10000 <= c && c <= 0x10FFFF);
  804. } // isValid(int):boolean
  805. /**
  806. * Returns true if the specified character is invalid.
  807. *
  808. * @param c The character to check.
  809. */
  810. public static boolean isInvalid(int c) {
  811. return !isValid(c);
  812. } // isInvalid(int):boolean
  813. /**
  814. * Returns true if the specified character can be considered content.
  815. *
  816. * @param c The character to check.
  817. */
  818. public static boolean isContent(int c) {
  819. return (c < 0x10000 && (CHARS[c] & MASK_CONTENT) != 0) ||
  820. (0x10000 <= c && c <= 0x10FFFF);
  821. } // isContent(int):boolean
  822. /**
  823. * Returns true if the specified character can be considered markup.
  824. * Markup characters include '<', '&', and '%'.
  825. *
  826. * @param c The character to check.
  827. */
  828. public static boolean isMarkup(int c) {
  829. return c == '<' || c == '&' || c == '%';
  830. } // isMarkup(int):boolean
  831. /**
  832. * Returns true if the specified character is a space character
  833. * as defined by production [3] in the XML 1.0 specification.
  834. *
  835. * @param c The character to check.
  836. */
  837. public static boolean isSpace(int c) {
  838. return c <= 0x20 && (CHARS[c] & MASK_SPACE) != 0;
  839. } // isSpace(int):boolean
  840. /**
  841. * Returns true if the specified character is a valid name start
  842. * character as defined by production [5] in the XML 1.0
  843. * specification.
  844. *
  845. * @param c The character to check.
  846. */
  847. public static boolean isNameStart(int c) {
  848. return c < 0x10000 && (CHARS[c] & MASK_NAME_START) != 0;
  849. } // isNameStart(int):boolean
  850. /**
  851. * Returns true if the specified character is a valid name
  852. * character as defined by production [4] in the XML 1.0
  853. * specification.
  854. *
  855. * @param c The character to check.
  856. */
  857. public static boolean isName(int c) {
  858. return c < 0x10000 && (CHARS[c] & MASK_NAME) != 0;
  859. } // isName(int):boolean
  860. /**
  861. * Returns true if the specified character is a valid NCName start
  862. * character as defined by production [4] in Namespaces in XML
  863. * recommendation.
  864. *
  865. * @param c The character to check.
  866. */
  867. public static boolean isNCNameStart(int c) {
  868. return c < 0x10000 && (CHARS[c] & MASK_NCNAME_START) != 0;
  869. } // isNCNameStart(int):boolean
  870. /**
  871. * Returns true if the specified character is a valid NCName
  872. * character as defined by production [5] in Namespaces in XML
  873. * recommendation.
  874. *
  875. * @param c The character to check.
  876. */
  877. public static boolean isNCName(int c) {
  878. return c < 0x10000 && (CHARS[c] & MASK_NCNAME) != 0;
  879. } // isNCName(int):boolean
  880. /**
  881. * Returns true if the specified character is a valid Pubid
  882. * character as defined by production [13] in the XML 1.0
  883. * specification.
  884. *
  885. * @param c The character to check.
  886. */
  887. public static boolean isPubid(int c) {
  888. return c < 0x10000 && (CHARS[c] & MASK_PUBID) != 0;
  889. } // isPubid(int):boolean
  890. /*
  891. * [5] Name ::= (Letter | '_' | ':') (NameChar)*
  892. */
  893. /**
  894. * Check to see if a string is a valid Name according to [5]
  895. * in the XML 1.0 Recommendation
  896. *
  897. * @param name string to check
  898. * @return true if name is a valid Name
  899. */
  900. public static boolean isValidName(String name) {
  901. if (name.length() == 0)
  902. return false;
  903. char ch = name.charAt(0);
  904. if( isNameStart(ch) == false)
  905. return false;
  906. for (int i = 1; i < name.length(); i++ ) {
  907. ch = name.charAt(i);
  908. if( isName( ch ) == false ){
  909. return false;
  910. }
  911. }
  912. return true;
  913. } // isValidName(String):boolean
  914. /*
  915. * from the namespace rec
  916. * [4] NCName ::= (Letter | '_') (NCNameChar)*
  917. */
  918. /**
  919. * Check to see if a string is a valid NCName according to [4]
  920. * from the XML Namespaces 1.0 Recommendation
  921. *
  922. * @param name string to check
  923. * @return true if name is a valid NCName
  924. */
  925. public static boolean isValidNCName(String ncName) {
  926. if (ncName.length() == 0)
  927. return false;
  928. char ch = ncName.charAt(0);
  929. if( isNCNameStart(ch) == false)
  930. return false;
  931. for (int i = 1; i < ncName.length(); i++ ) {
  932. ch = ncName.charAt(i);
  933. if( isNCName( ch ) == false ){
  934. return false;
  935. }
  936. }
  937. return true;
  938. } // isValidNCName(String):boolean
  939. /*
  940. * [7] Nmtoken ::= (NameChar)+
  941. */
  942. /**
  943. * Check to see if a string is a valid Nmtoken according to [7]
  944. * in the XML 1.0 Recommendation
  945. *
  946. * @param nmtoken string to check
  947. * @return true if nmtoken is a valid Nmtoken
  948. */
  949. public static boolean isValidNmtoken(String nmtoken) {
  950. if (nmtoken.length() == 0)
  951. return false;
  952. for (int i = 0; i < nmtoken.length(); i++ ) {
  953. char ch = nmtoken.charAt(i);
  954. if( ! isName( ch ) ){
  955. return false;
  956. }
  957. }
  958. return true;
  959. } // isValidName(String):boolean
  960. // encodings
  961. /**
  962. * Returns true if the encoding name is a valid IANA encoding.
  963. * This method does not verify that there is a decoder available
  964. * for this encoding, only that the characters are valid for an
  965. * IANA encoding name.
  966. *
  967. * @param ianaEncoding The IANA encoding name.
  968. */
  969. public static boolean isValidIANAEncoding(String ianaEncoding) {
  970. if (ianaEncoding != null) {
  971. int length = ianaEncoding.length();
  972. if (length > 0) {
  973. char c = ianaEncoding.charAt(0);
  974. if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
  975. for (int i = 1; i < length; i++) {
  976. c = ianaEncoding.charAt(i);
  977. if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z') &&
  978. (c < '0' || c > '9') && c != '.' && c != '_' &&
  979. c != '-') {
  980. return false;
  981. }
  982. }
  983. return true;
  984. }
  985. }
  986. }
  987. return false;
  988. } // isValidIANAEncoding(String):boolean
  989. /**
  990. * Returns true if the encoding name is a valid Java encoding.
  991. * This method does not verify that there is a decoder available
  992. * for this encoding, only that the characters are valid for an
  993. * Java encoding name.
  994. *
  995. * @param javaEncoding The Java encoding name.
  996. */
  997. public static boolean isValidJavaEncoding(String javaEncoding) {
  998. if (javaEncoding != null) {
  999. int length = javaEncoding.length();
  1000. if (length > 0) {
  1001. for (int i = 1; i < length; i++) {
  1002. char c = javaEncoding.charAt(i);
  1003. if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z') &&
  1004. (c < '0' || c > '9') && c != '.' && c != '_' &&
  1005. c != '-') {
  1006. return false;
  1007. }
  1008. }
  1009. return true;
  1010. }
  1011. }
  1012. return false;
  1013. } // isValidIANAEncoding(String):boolean
  1014. } // class XMLChar