1. // This file was generated AUTOMATICALLY from a template file Wed Sep 15 03:12:52 PDT 2004
  2. /* @(#)CharacterData01.java.template 1.3 03/07/26
  3. *
  4. * Copyright 1994-2002 Sun Microsystems, Inc. All Rights Reserved.
  5. *
  6. * This software is the proprietary information of Sun Microsystems, Inc.
  7. * Use is subject to license terms.
  8. *
  9. */
  10. package java.lang;
  11. /** The CharacterData class encapsulates the large tables once found in
  12. * java.lang.Character.
  13. */
  14. class CharacterData01 {
  15. /* The character properties are currently encoded into 32 bits in the following manner:
  16. 1 bit mirrored property
  17. 4 bits directionality property
  18. 9 bits signed offset used for converting case
  19. 1 bit if 1, adding the signed offset converts the character to lowercase
  20. 1 bit if 1, subtracting the signed offset converts the character to uppercase
  21. 1 bit if 1, this character has a titlecase equivalent (possibly itself)
  22. 3 bits 0 may not be part of an identifier
  23. 1 ignorable control; may continue a Unicode identifier or Java identifier
  24. 2 may continue a Java identifier but not a Unicode identifier (unused)
  25. 3 may continue a Unicode identifier or Java identifier
  26. 4 is a Java whitespace character
  27. 5 may start or continue a Java identifier;
  28. may continue but not start a Unicode identifier (underscores)
  29. 6 may start or continue a Java identifier but not a Unicode identifier ($)
  30. 7 may start or continue a Unicode identifier or Java identifier
  31. Thus:
  32. 5, 6, 7 may start a Java identifier
  33. 1, 2, 3, 5, 6, 7 may continue a Java identifier
  34. 7 may start a Unicode identifier
  35. 1, 3, 5, 7 may continue a Unicode identifier
  36. 1 is ignorable within an identifier
  37. 4 is Java whitespace
  38. 2 bits 0 this character has no numeric property
  39. 1 adding the digit offset to the character code and then
  40. masking with 0x1F will produce the desired numeric value
  41. 2 this character has a "strange" numeric value
  42. 3 a Java supradecimal digit: adding the digit offset to the
  43. character code, then masking with 0x1F, then adding 10
  44. will produce the desired numeric value
  45. 5 bits digit offset
  46. 5 bits character type
  47. The encoding of character properties is subject to change at any time.
  48. */
  49. static int getProperties(int ch) {
  50. char offset = (char)ch;
  51. int props = A[Y[(X[offset>>5]<<4)|((offset>>1)&0xF)]|(offset&0x1)];
  52. return props;
  53. }
  54. static int getType(int ch) {
  55. int props = getProperties(ch);
  56. return (props & 0x1F);
  57. }
  58. static boolean isLowerCase(int ch) {
  59. int type = getType(ch);
  60. return (type == Character.LOWERCASE_LETTER);
  61. }
  62. static boolean isUpperCase(int ch) {
  63. int type = getType(ch);
  64. return (type == Character.UPPERCASE_LETTER);
  65. }
  66. static boolean isTitleCase(int ch) {
  67. int type = getType(ch);
  68. return (type == Character.TITLECASE_LETTER);
  69. }
  70. static boolean isDigit(int ch) {
  71. int type = getType(ch);
  72. return (type == Character.DECIMAL_DIGIT_NUMBER);
  73. }
  74. static boolean isDefined(int ch) {
  75. int type = getType(ch);
  76. return (type != Character.UNASSIGNED);
  77. }
  78. static boolean isLetter(int ch) {
  79. int type = getType(ch);
  80. return (((((1 << Character.UPPERCASE_LETTER) |
  81. (1 << Character.LOWERCASE_LETTER) |
  82. (1 << Character.TITLECASE_LETTER) |
  83. (1 << Character.MODIFIER_LETTER) |
  84. (1 << Character.OTHER_LETTER)) >> type) & 1) != 0);
  85. }
  86. static boolean isLetterOrDigit(int ch) {
  87. int type = getType(ch);
  88. return (((((1 << Character.UPPERCASE_LETTER) |
  89. (1 << Character.LOWERCASE_LETTER) |
  90. (1 << Character.TITLECASE_LETTER) |
  91. (1 << Character.MODIFIER_LETTER) |
  92. (1 << Character.OTHER_LETTER) |
  93. (1 << Character.DECIMAL_DIGIT_NUMBER)) >> type) & 1) != 0);
  94. }
  95. static boolean isSpaceChar(int ch) {
  96. int type = getType(ch);
  97. return (((((1 << Character.SPACE_SEPARATOR) |
  98. (1 << Character.LINE_SEPARATOR) |
  99. (1 << Character.PARAGRAPH_SEPARATOR)) >> type) & 1) != 0);
  100. }
  101. static boolean isJavaIdentifierStart(int ch) {
  102. int props = getProperties(ch);
  103. return ((props & 0x00007000) >= 0x00005000);
  104. }
  105. static boolean isJavaIdentifierPart(int ch) {
  106. int props = getProperties(ch);
  107. return ((props & 0x00003000) != 0);
  108. }
  109. static boolean isUnicodeIdentifierStart(int ch) {
  110. int props = getProperties(ch);
  111. return ((props & 0x00007000) == 0x00007000);
  112. }
  113. static boolean isUnicodeIdentifierPart(int ch) {
  114. int props = getProperties(ch);
  115. return ((props & 0x00001000) != 0);
  116. }
  117. static boolean isIdentifierIgnorable(int ch) {
  118. int props = getProperties(ch);
  119. return ((props & 0x00007000) == 0x00001000);
  120. }
  121. static int toLowerCase(int ch) {
  122. int mapChar = ch;
  123. int val = getProperties(ch);
  124. if ((val & 0x00020000) != 0) {
  125. int offset = val << 5 >> (5+18);
  126. mapChar = ch + offset;
  127. }
  128. return mapChar;
  129. }
  130. static int toUpperCase(int ch) {
  131. int mapChar = ch;
  132. int val = getProperties(ch);
  133. if ((val & 0x00010000) != 0) {
  134. int offset = val << 5 >> (5+18);
  135. mapChar = ch - offset;
  136. }
  137. return mapChar;
  138. }
  139. static int toTitleCase(int ch) {
  140. int mapChar = ch;
  141. int val = getProperties(ch);
  142. if ((val & 0x00008000) != 0) {
  143. // There is a titlecase equivalent. Perform further checks:
  144. if ((val & 0x00010000) == 0) {
  145. // The character does not have an uppercase equivalent, so it must
  146. // already be uppercase; so add 1 to get the titlecase form.
  147. mapChar = ch + 1;
  148. }
  149. else if ((val & 0x00020000) == 0) {
  150. // The character does not have a lowercase equivalent, so it must
  151. // already be lowercase; so subtract 1 to get the titlecase form.
  152. mapChar = ch - 1;
  153. }
  154. // else {
  155. // The character has both an uppercase equivalent and a lowercase
  156. // equivalent, so it must itself be a titlecase form; return it.
  157. // return ch;
  158. //}
  159. }
  160. else if ((val & 0x00010000) != 0) {
  161. // This character has no titlecase equivalent but it does have an
  162. // uppercase equivalent, so use that (subtract the signed case offset).
  163. mapChar = toUpperCase(ch);
  164. }
  165. return mapChar;
  166. }
  167. static int digit(int ch, int radix) {
  168. int value = -1;
  169. if (radix >= Character.MIN_RADIX && radix <= Character.MAX_RADIX) {
  170. int val = getProperties(ch);
  171. int kind = val & 0x1F;
  172. if (kind == Character.DECIMAL_DIGIT_NUMBER) {
  173. value = ch + ((val & 0x3E0) >> 5) & 0x1F;
  174. }
  175. else if ((val & 0xC00) == 0x00000C00) {
  176. // Java supradecimal digit
  177. value = (ch + ((val & 0x3E0) >> 5) & 0x1F) + 10;
  178. }
  179. }
  180. return (value < radix) ? value : -1;
  181. }
  182. static int getNumericValue(int ch) {
  183. int val = getProperties(ch);
  184. int retval = -1;
  185. switch (val & 0xC00) {
  186. default: // cannot occur
  187. case (0x00000000): // not numeric
  188. retval = -1;
  189. break;
  190. case (0x00000400): // simple numeric
  191. retval = ch + ((val & 0x3E0) >> 5) & 0x1F;
  192. break;
  193. case (0x00000800) : // "strange" numeric
  194. switch(ch) {
  195. case 0x10113: retval = 40; break; // AEGEAN NUMBER FORTY
  196. case 0x10114: retval = 50; break; // AEGEAN NUMBER FIFTY
  197. case 0x10115: retval = 60; break; // AEGEAN NUMBER SIXTY
  198. case 0x10116: retval = 70; break; // AEGEAN NUMBER SEVENTY
  199. case 0x10117: retval = 80; break; // AEGEAN NUMBER EIGHTY
  200. case 0x10118: retval = 90; break; // AEGEAN NUMBER NINETY
  201. case 0x10119: retval = 100; break; // AEGEAN NUMBER ONE HUNDRED
  202. case 0x1011A: retval = 200; break; // AEGEAN NUMBER TWO HUNDRED
  203. case 0x1011B: retval = 300; break; // AEGEAN NUMBER THREE HUNDRED
  204. case 0x1011C: retval = 400; break; // AEGEAN NUMBER FOUR HUNDRED
  205. case 0x1011D: retval = 500; break; // AEGEAN NUMBER FIVE HUNDRED
  206. case 0x1011E: retval = 600; break; // AEGEAN NUMBER SIX HUNDRED
  207. case 0x1011F: retval = 700; break; // AEGEAN NUMBER SEVEN HUNDRED
  208. case 0x10120: retval = 800; break; // AEGEAN NUMBER EIGHT HUNDRED
  209. case 0x10121: retval = 900; break; // AEGEAN NUMBER NINE HUNDRED
  210. case 0x10122: retval = 1000; break; // AEGEAN NUMBER ONE THOUSAND
  211. case 0x10123: retval = 2000; break; // AEGEAN NUMBER TWO THOUSAND
  212. case 0x10124: retval = 3000; break; // AEGEAN NUMBER THREE THOUSAND
  213. case 0x10125: retval = 4000; break; // AEGEAN NUMBER FOUR THOUSAND
  214. case 0x10126: retval = 5000; break; // AEGEAN NUMBER FIVE THOUSAND
  215. case 0x10127: retval = 6000; break; // AEGEAN NUMBER SIX THOUSAND
  216. case 0x10128: retval = 7000; break; // AEGEAN NUMBER SEVEN THOUSAND
  217. case 0x10129: retval = 8000; break; // AEGEAN NUMBER EIGHT THOUSAND
  218. case 0x1012A: retval = 9000; break; // AEGEAN NUMBER NINE THOUSAND
  219. case 0x1012B: retval = 10000; break; // AEGEAN NUMBER TEN THOUSAND
  220. case 0x1012C: retval = 20000; break; // AEGEAN NUMBER TWENTY THOUSAND
  221. case 0x1012D: retval = 30000; break; // AEGEAN NUMBER THIRTY THOUSAND
  222. case 0x1012E: retval = 40000; break; // AEGEAN NUMBER FORTY THOUSAND
  223. case 0x1012F: retval = 50000; break; // AEGEAN NUMBER FIFTY THOUSAND
  224. case 0x10130: retval = 60000; break; // AEGEAN NUMBER SIXTY THOUSAND
  225. case 0x10131: retval = 70000; break; // AEGEAN NUMBER SEVENTY THOUSAND
  226. case 0x10132: retval = 80000; break; // AEGEAN NUMBER EIGHTY THOUSAND
  227. case 0x10133: retval = 90000; break; // AEGEAN NUMBER NINETY THOUSAND
  228. case 0x10323: retval = 50; break; // OLD ITALIC NUMERAL FIFTY
  229. default: retval = -2; break;
  230. }
  231. break;
  232. case (0x00000C00): // Java supradecimal
  233. retval = (ch + ((val & 0x3E0) >> 5) & 0x1F) + 10;
  234. break;
  235. }
  236. return retval;
  237. }
  238. static boolean isWhitespace(int ch) {
  239. int props = getProperties(ch);
  240. return ((props & 0x00007000) == 0x00004000);
  241. }
  242. static byte getDirectionality(int ch) {
  243. int val = getProperties(ch);
  244. byte directionality = (byte)((val & 0x78000000) >> 27);
  245. if (directionality == 0xF ) {
  246. directionality = Character.DIRECTIONALITY_UNDEFINED;
  247. }
  248. return directionality;
  249. }
  250. static boolean isMirrored(int ch) {
  251. int props = getProperties(ch);
  252. return ((props & 0x80000000) != 0);
  253. }
  254. // may need to implement for JSR 204
  255. // static int toUpperCaseEx(int ch);
  256. // static char[] toUpperCaseCharArray(int ch);
  257. // The following tables and code generated using:
  258. // java GenerateCharacter -plane 1 -template ../../tools/GenerateCharacter/CharacterData01.java.template -spec ../../tools/GenerateCharacter/UnicodeData.txt -specialcasing ../../tools/GenerateCharacter/SpecialCasing.txt -o C:/BUILD_AREA/jdk1.5.0/control/build/windows-i586/gensrc/java/lang/CharacterData01.java -string -usecharforbyte 11 4 1
  259. // The X table has 2048 entries for a total of 4096 bytes.
  260. static final char X[] = (
  261. "\000\001\002\003\004\004\004\005\006\007\003\003\003\003\003\003\003\003\003"+
  262. "\003\003\003\003\003\010\011\012\003\013\003\003\003\014\015\016\004\017\020"+
  263. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  264. "\003\003\003\003\003\003\003\021\022\003\003\003\003\003\003\003\003\003\003"+
  265. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  266. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  267. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  268. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  269. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  270. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  271. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  272. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  273. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  274. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  275. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  276. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  277. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  278. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  279. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  280. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  281. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  282. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  283. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  284. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  285. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  286. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  287. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  288. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  289. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  290. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  291. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  292. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  293. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  294. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  295. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  296. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  297. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  298. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  299. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  300. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  301. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  302. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  303. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  304. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  305. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  306. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  307. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  308. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  309. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  310. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  311. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  312. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  313. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  314. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  315. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  316. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  317. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  318. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  319. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  320. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  321. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  322. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  323. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  324. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  325. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  326. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  327. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  328. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  329. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  330. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  331. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  332. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  333. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  334. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  335. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  336. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  337. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  338. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  339. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  340. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  341. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  342. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  343. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  344. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  345. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  346. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  347. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  348. "\003\003\003\003\003\003\003\003\003\003\003\023\023\023\023\023\023\023\024"+
  349. "\023\025\023\026\027\030\031\003\003\003\003\003\003\003\003\003\032\032\033"+
  350. "\003\003\003\003\003\034\035\036\037\040\041\042\043\044\045\046\047\050\034"+
  351. "\035\051\037\052\053\054\043\055\056\057\060\061\062\063\064\065\066\067\003"+
  352. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  353. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  354. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  355. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  356. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  357. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  358. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  359. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  360. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  361. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  362. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  363. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  364. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  365. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  366. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  367. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003"+
  368. "\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003").toCharArray();
  369. // The Y table has 896 entries for a total of 1792 bytes.
  370. static final char Y[] = (
  371. "\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"+
  372. "\004\000\000\000\000\000\000\000\000\000\004\000\002\000\000\000\000\000\000"+
  373. "\000\006\000\000\000\000\000\000\000\006\006\006\006\006\006\006\006\006\006"+
  374. "\006\006\006\006\006\006\006\000\000\000\000\000\000\000\000\000\000\000\000"+
  375. "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\006"+
  376. "\006\010\012\006\014\016\016\016\016\020\022\024\024\024\024\024\024\024\024"+
  377. "\024\024\024\024\024\024\024\024\006\026\030\030\030\030\000\000\000\000\000"+
  378. "\000\000\000\000\000\000\000\000\000\000\004\032\034\006\006\006\006\006\006"+
  379. "\000\000\000\000\000\000\000\000\000\000\000\000\000\036\006\006\006\006\006"+
  380. "\006\006\006\006\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000"+
  381. "\000\040\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042"+
  382. "\042\042\042\044\044\044\044\044\044\044\044\044\044\044\044\044\044\044\044"+
  383. "\044\044\044\044\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"+
  384. "\000\000\000\000\000\000\000\000\006\046\046\046\046\046\006\006\006\006\006"+
  385. "\006\006\006\006\006\006\050\050\050\006\052\050\050\050\050\050\050\050\050"+
  386. "\050\050\050\050\050\050\050\050\050\050\050\050\050\050\054\052\006\052\054"+
  387. "\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030"+
  388. "\030\030\030\030\030\030\030\030\006\006\006\006\006\030\030\030\012\006\030"+
  389. "\030\030\030\030\030\030\030\030\030\030\030\030\056\060\062\030\056\064\064"+
  390. "\066\070\070\070\072\062\062\062\074\076\062\062\062\030\030\030\030\030\030"+
  391. "\030\030\030\030\030\030\030\030\030\062\062\030\030\030\030\030\030\030\030"+
  392. "\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\006\100\100"+
  393. "\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100\100"+
  394. "\100\100\100\100\100\100\102\006\006\006\006\104\104\104\104\104\104\104\104"+
  395. "\104\104\104\104\104\106\106\106\106\106\106\106\106\106\106\106\106\106\104"+
  396. "\104\104\104\104\104\104\104\104\104\104\104\104\106\106\106\110\106\106\106"+
  397. "\106\106\106\106\106\106\104\104\104\104\104\104\104\104\104\104\104\104\104"+
  398. "\106\106\106\106\106\106\106\106\106\106\106\106\106\112\104\006\112\114\112"+
  399. "\114\104\112\104\104\104\104\106\106\116\116\106\106\106\116\106\106\106\106"+
  400. "\106\104\104\104\104\104\104\104\104\104\104\104\104\104\106\106\106\106\106"+
  401. "\106\106\106\106\106\106\106\106\104\114\104\112\114\104\104\104\112\104\104"+
  402. "\104\112\106\106\106\106\106\106\106\106\106\106\106\106\106\104\114\104\112"+
  403. "\104\104\112\112\006\104\104\104\112\106\106\106\106\106\106\106\106\106\106"+
  404. "\106\106\106\104\104\104\104\104\104\104\104\104\104\104\104\104\106\106\106"+
  405. "\106\106\106\106\106\106\106\106\106\106\104\104\104\104\104\104\104\106\106"+
  406. "\106\106\106\106\106\106\106\104\106\106\106\106\106\106\106\106\106\106\106"+
  407. "\106\106\104\104\104\104\104\104\104\104\104\104\104\104\104\106\106\106\106"+
  408. "\106\106\106\106\106\106\106\106\106\104\104\104\104\104\104\104\104\106\106"+
  409. "\006\006\104\104\104\104\104\104\104\104\104\104\104\104\120\106\106\106\106"+
  410. "\106\106\106\106\106\106\106\106\122\106\106\106\104\104\104\104\104\104\104"+
  411. "\104\104\104\104\104\120\106\106\106\106\106\106\106\106\106\106\106\106\122"+
  412. "\106\106\106\104\104\104\104\104\104\104\104\104\104\104\104\120\106\106\106"+
  413. "\106\106\106\106\106\106\106\106\106\122\106\106\106\104\104\104\104\104\104"+
  414. "\104\104\104\104\104\104\120\106\106\106\106\106\106\106\106\106\106\106\106"+
  415. "\122\106\106\106\104\104\104\104\104\104\104\104\104\104\104\104\120\106\106"+
  416. "\106\106\106\106\106\106\106\106\106\106\122\106\106\106\006\006\124\124\124"+
  417. "\124\124\126\126\126\126\126\130\130\130\130\130\132\132\132\132\132\134\134"+
  418. "\134\134\134").toCharArray();
  419. // The A table has 94 entries for a total of 376 bytes.
  420. static final int A[] = new int[94];
  421. static final String A_DATA =
  422. "\000\u7005\000\u7005\u7800\000\000\u7005\000\u7005\u7800\000\u7800\000\u7800"+
  423. "\000\000\030\u6800\030\000\034\u7800\000\u7800\000\000\u074B\000\u074B\000"+
  424. "\u074B\000\u074B\000\u046B\000\u058B\000\u080B\000\u080B\000\u080B\u7800\000"+
  425. "\000\034\000\034\000\034\000\u042B\000\u048B\000\u050B\000\u080B\000\u700A"+
  426. "\u7800\000\u7800\000\000\030\242\u7001\242\u7001\241\u7002\241\u7002\000\u3409"+
  427. "\000\u3409\u0800\u7005\u0800\u7005\u0800\u7005\u7800\000\u7800\000\u0800\u7005"+
  428. "\000\034\000\u3008\000\u3008\u4000\u3006\u4000\u3006\u4000\u3006\000\u3008"+
  429. "\000\u3008\000\u3008\u4800\u1010\u4800\u1010\u4800\u1010\u4800\u1010\u4000"+
  430. "\u3006\u4000\u3006\000\034\000\034\u4000\u3006\u6800\034\u6800\034\u6800\034"+
  431. "\u7800\000\000\u7001\000\u7001\000\u7002\000\u7002\000\u7002\u7800\000\000"+
  432. "\u7001\u7800\000\u7800\000\000\u7001\u7800\000\000\u7002\000\u7001\000\031"+
  433. "\000\u7002\000\031\u1800\u3649\u1800\u3649\u1800\u3509\u1800\u3509\u1800\u37C9"+
  434. "\u1800\u37C9\u1800\u3689\u1800\u3689\u1800\u3549\u1800\u3549";
  435. // In all, the character property tables require 6264 bytes.
  436. static {
  437. { // THIS CODE WAS AUTOMATICALLY CREATED BY GenerateCharacter:
  438. char[] data = A_DATA.toCharArray();
  439. assert (data.length == (94 * 2));
  440. int i = 0, j = 0;
  441. while (i < (94 * 2)) {
  442. int entry = data[i++] << 16;
  443. A[j++] = entry | data[i++];
  444. }
  445. }
  446. }
  447. }