1 // This file was generated AUTOMATICALLY from a template file Wed Jan 15 12:01:14 UTC 2020
2 /*
3  * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5  *
6  * This code is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License version 2 only, as
8  * published by the Free Software Foundation.  Oracle designates this
9  * particular file as subject to the "Classpath" exception as provided
10  * by Oracle in the LICENSE file that accompanied this code.
11  *
12  * This code is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15  * version 2 for more details (a copy is included in the LICENSE file that
16  * accompanied this code).
17  *
18  * You should have received a copy of the GNU General Public License version
19  * 2 along with this work; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
21  *
22  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
23  * or visit www.oracle.com if you need additional information or have any
24  * questions.
25  */

26
27 package java.lang;
28
29 import jdk.internal.HotSpotIntrinsicCandidate;
30
31 /** The CharacterData class encapsulates the large tables found in
32     Java.lang.Character. */

33
34 class CharacterDataLatin1 extends CharacterData {
35
36     /* The character properties are currently encoded into 32 bits in the following manner:
37         1 bit   mirrored property
38         4 bits  directionality property
39         9 bits  signed offset used for converting case
40         1 bit   if 1, adding the signed offset converts the character to lowercase
41         1 bit   if 1, subtracting the signed offset converts the character to uppercase
42         1 bit   if 1, this character has a titlecase equivalent (possibly itself)
43         3 bits  0  may not be part of an identifier
44                 1  ignorable control; may continue a Unicode identifier or Java identifier
45                 2  may continue a Java identifier but not a Unicode identifier (unused)
46                 3  may continue a Unicode identifier or Java identifier
47                 4  is a Java whitespace character
48                 5  may start or continue a Java identifier;
49                    may continue but not start a Unicode identifier (underscores)
50                 6  may start or continue a Java identifier but not a Unicode identifier ($)
51                 7  may start or continue a Unicode identifier or Java identifier
52                 Thus:
53                    5, 6, 7 may start a Java identifier
54                    1, 2, 3, 5, 6, 7 may continue a Java identifier
55                    7 may start a Unicode identifier
56                    1, 3, 5, 7 may continue a Unicode identifier
57                    1 is ignorable within an identifier
58                    4 is Java whitespace
59         2 bits  0  this character has no numeric property
60                 1  adding the digit offset to the character code and then
61                    masking with 0x1F will produce the desired numeric value
62                 2  this character has a "strange" numeric value
63                 3  a Java supradecimal digit: adding the digit offset to the
64                    character code, then masking with 0x1F, then adding 10
65                    will produce the desired numeric value
66         5 bits  digit offset
67         5 bits  character type
68
69         The encoding of character properties is subject to change at any time.
70      */

71
72     int getProperties(int ch) {
73         char offset = (char)ch;
74         int props = A[offset];
75         return props;
76     }
77
78     int getPropertiesEx(int ch) {
79         char offset = (char)ch;
80         int props = B[offset];
81         return props;
82     }
83
84     @HotSpotIntrinsicCandidate
85     boolean isDigit(int ch) {
86         return '0' <= ch && ch <= '9';
87     }
88
89     @HotSpotIntrinsicCandidate
90     boolean isLowerCase(int ch) {
91         int props = getProperties(ch);
92         return (props & 0x1F) == Character.LOWERCASE_LETTER;
93     }
94
95     @HotSpotIntrinsicCandidate
96     boolean isUpperCase(int ch) {
97         int props = getProperties(ch);
98         return (props & 0x1F) == Character.UPPERCASE_LETTER;
99     }
100
101     boolean isOtherLowercase(int ch) {
102         int props = getPropertiesEx(ch);
103         return (props & 0x0001) != 0;
104     }
105
106     boolean isOtherUppercase(int ch) {
107         int props = getPropertiesEx(ch);
108         return (props & 0x0002) != 0;
109     }
110
111     boolean isOtherAlphabetic(int ch) {
112         int props = getPropertiesEx(ch);
113         return (props & 0x0004) != 0;
114     }
115
116     boolean isIdeographic(int ch) {
117         int props = getPropertiesEx(ch);
118         return (props & 0x0010) != 0;
119     }
120
121     int getType(int ch) {
122         int props = getProperties(ch);
123         return (props & 0x1F);
124     }
125
126     boolean isJavaIdentifierStart(int ch) {
127         int props = getProperties(ch);
128         return ((props & 0x00007000) >= 0x00005000);
129     }
130
131     boolean isJavaIdentifierPart(int ch) {
132         int props = getProperties(ch);
133         return ((props & 0x00003000) != 0);
134     }
135
136     boolean isUnicodeIdentifierStart(int ch) {
137         int props = getProperties(ch);
138         return ((props & 0x00007000) == 0x00007000);
139     }
140
141     boolean isUnicodeIdentifierPart(int ch) {
142         int props = getProperties(ch);
143         return ((props & 0x00001000) != 0);
144     }
145
146     boolean isIdentifierIgnorable(int ch) {
147         int props = getProperties(ch);
148         return ((props & 0x00007000) == 0x00001000);
149     }
150
151     int toLowerCase(int ch) {
152         int mapChar = ch;
153         int val = getProperties(ch);
154
155         if (((val & 0x00020000) != 0) && 
156                 ((val & 0x07FC0000) != 0x07FC0000)) { 
157             int offset = val << 5 >> (5+18);
158             mapChar = ch + offset;
159         }
160         return mapChar;
161     }
162
163     int toUpperCase(int ch) {
164         int mapChar = ch;
165         int val = getProperties(ch);
166
167         if ((val & 0x00010000) != 0) {
168             if ((val & 0x07FC0000) != 0x07FC0000) {
169                 int offset = val  << 5 >> (5+18);
170                 mapChar =  ch - offset;
171             } else if (ch == 0x00B5) {
172                 mapChar = 0x039C;
173             }
174         }
175         return mapChar;
176     }
177
178     int toTitleCase(int ch) {
179         return toUpperCase(ch);
180     }
181
182     // Digit values for codePoints in the 0-255 range. Contents generated using:
183     // for (char i = 0; i < 256; i++) {
184     //     int v = -1;
185     //     if (i >= '0' && i <= '9') { v = i - '0'; } 
186     //     else if (i >= 'A' && i <= 'Z') { v = i - 'A' + 10; }
187     //     else if (i >= 'a' && i <= 'z') { v = i - 'a' + 10; }
188     //     if (i % 20 == 0) System.out.println();
189     //     System.out.printf("%2d, ", v);
190     // }
191     //
192     // Analysis has shown that generating the whole array allows the JIT to generate
193     // better code compared to a slimmed down array, such as one cutting off after 'z'
194     private static final byte[] DIGITS = new byte[] {
195         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
196         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
197         -1, -1, -1, -1, -1, -1, -1, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, -1, -1,
198         -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
199         25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1, 10, 11, 12,
200         13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
201         33, 34, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
202         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
203         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
204         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
205         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
206         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
207         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
208
209     int digit(int ch, int radix) {
210         int value = DIGITS[ch];
211         return (value >= 0 && value < radix && radix >= Character.MIN_RADIX
212                 && radix <= Character.MAX_RADIX) ? value : -1;
213     }
214
215     int getNumericValue(int ch) {
216         int val = getProperties(ch);
217         int retval = -1;
218
219         switch (val & 0xC00) {
220             default// cannot occur
221             case (0x00000000):         // not numeric
222                 retval = -1;
223                 break;
224             case (0x00000400):              // simple numeric
225                 retval = ch + ((val & 0x3E0) >> 5) & 0x1F;
226                 break;
227             case (0x00000800)      :       // "strange" numeric
228                  retval = -2; 
229                  break;
230             case (0x00000C00):           // Java supradecimal
231                 retval = (ch + ((val & 0x3E0) >> 5) & 0x1F) + 10;
232                 break;
233         }
234         return retval;
235     }
236
237     @HotSpotIntrinsicCandidate
238     boolean isWhitespace(int ch) {
239         int props = getProperties(ch);
240         return ((props & 0x00007000) == 0x00004000);
241     }
242
243     byte getDirectionality(int ch) {
244         int val = getProperties(ch);
245         byte directionality = (byte)((val & 0x78000000) >> 27);
246
247         if (directionality == 0xF ) {
248             directionality = -1;
249         }
250         return directionality;
251     }
252
253     boolean isMirrored(int ch) {
254         int props = getProperties(ch);
255         return ((props & 0x80000000) != 0);
256     }
257
258     int toUpperCaseEx(int ch) {
259         int mapChar = ch;
260         int val = getProperties(ch);
261
262         if ((val & 0x00010000) != 0) {
263             if ((val & 0x07FC0000) != 0x07FC0000) {
264                 int offset = val  << 5 >> (5+18);
265                 mapChar =  ch - offset;
266             }
267             else {
268                 switch(ch) {
269                     // map overflow characters
270                     case 0x00B5 : mapChar = 0x039C; break;
271                     default       : mapChar = Character.ERROR; break;
272                 }
273             }
274         }
275         return mapChar;
276     }
277
278     static char[] sharpsMap = new char[] {'S', 'S'};
279
280     char[] toUpperCaseCharArray(int ch) {
281         char[] upperMap = {(char)ch};
282         if (ch == 0x00DF) {
283             upperMap = sharpsMap;
284         }
285         return upperMap;
286     }
287
288     static final CharacterDataLatin1 instance = new CharacterDataLatin1();
289     private CharacterDataLatin1() {};
290
291     // The following tables and code generated using:
292   // java GenerateCharacter -template /home/jenkins/workspace/build-scripts/jobs/jdk11u/jdk11u-linux-x64-hotspot/workspace/build/src/make/data/characterdata/CharacterDataLatin1.java.template -spec /home/jenkins/workspace/build-scripts/jobs/jdk11u/jdk11u-linux-x64-hotspot/workspace/build/src/make/data/unicodedata/UnicodeData.txt -specialcasing /home/jenkins/workspace/build-scripts/jobs/jdk11u/jdk11u-linux-x64-hotspot/workspace/build/src/make/data/unicodedata/SpecialCasing.txt -proplist /home/jenkins/workspace/build-scripts/jobs/jdk11u/jdk11u-linux-x64-hotspot/workspace/build/src/make/data/unicodedata/PropList.txt -o /home/jenkins/workspace/build-scripts/jobs/jdk11u/jdk11u-linux-x64-hotspot/workspace/build/src/build/linux-x86_64-normal-server-release/support/gensrc/java.base/java/lang/CharacterDataLatin1.java -usecharforbyte -latin1 8
293   // The A table has 256 entries for a total of 1024 bytes.
294
295   static final int A[] = {
296     0x4800100F,  //   0   Cc, ignorable
297     0x4800100F,  //   1   Cc, ignorable
298     0x4800100F,  //   2   Cc, ignorable
299     0x4800100F,  //   3   Cc, ignorable
300     0x4800100F,  //   4   Cc, ignorable
301     0x4800100F,  //   5   Cc, ignorable
302     0x4800100F,  //   6   Cc, ignorable
303     0x4800100F,  //   7   Cc, ignorable
304     0x4800100F,  //   8   Cc, ignorable
305     0x5800400F,  //   9   Cc, S, whitespace
306     0x5000400F,  //  10   Cc, B, whitespace
307     0x5800400F,  //  11   Cc, S, whitespace
308     0x6000400F,  //  12   Cc, WS, whitespace
309     0x5000400F,  //  13   Cc, B, whitespace
310     0x4800100F,  //  14   Cc, ignorable
311     0x4800100F,  //  15   Cc, ignorable
312     0x4800100F,  //  16   Cc, ignorable
313     0x4800100F,  //  17   Cc, ignorable
314     0x4800100F,  //  18   Cc, ignorable
315     0x4800100F,  //  19   Cc, ignorable
316     0x4800100F,  //  20   Cc, ignorable
317     0x4800100F,  //  21   Cc, ignorable
318     0x4800100F,  //  22   Cc, ignorable
319     0x4800100F,  //  23   Cc, ignorable
320     0x4800100F,  //  24   Cc, ignorable
321     0x4800100F,  //  25   Cc, ignorable
322     0x4800100F,  //  26   Cc, ignorable
323     0x4800100F,  //  27   Cc, ignorable
324     0x5000400F,  //  28   Cc, B, whitespace
325     0x5000400F,  //  29   Cc, B, whitespace
326     0x5000400F,  //  30   Cc, B, whitespace
327     0x5800400F,  //  31   Cc, S, whitespace
328     0x6000400C,  //  32   Zs, WS, whitespace
329     0x68000018,  //  33   Po, ON
330     0x68000018,  //  34   Po, ON
331     0x28000018,  //  35   Po, ET
332     0x2800601A,  //  36   Sc, ET, currency
333     0x28000018,  //  37   Po, ET
334     0x68000018,  //  38   Po, ON
335     0x68000018,  //  39   Po, ON
336     -0x17FFFFEB,  //  40   No, hasUpper (subtract 511), hasLower (add 511), hasTitle, identifier start, supradecimal 31
337     -0x17FFFFEA,  //  41   Nl, hasUpper (subtract 511), hasLower (add 511), hasTitle, identifier start, supradecimal 31
338     0x68000018,  //  42   Po, ON
339     0x20000019,  //  43   Sm, ES
340     0x38000018,  //  44   Po, CS
341     0x20000014,  //  45   Pd, ES
342     0x38000018,  //  46   Po, CS
343     0x38000018,  //  47   Po, CS
344     0x18003609,  //  48   Nd, EN, identifier part, decimal 16
345     0x18003609,  //  49   Nd, EN, identifier part, decimal 16
346     0x18003609,  //  50   Nd, EN, identifier part, decimal 16
347     0x18003609,  //  51   Nd, EN, identifier part, decimal 16
348     0x18003609,  //  52   Nd, EN, identifier part, decimal 16
349     0x18003609,  //  53   Nd, EN, identifier part, decimal 16
350     0x18003609,  //  54   Nd, EN, identifier part, decimal 16
351     0x18003609,  //  55   Nd, EN, identifier part, decimal 16
352     0x18003609,  //  56   Nd, EN, identifier part, decimal 16
353     0x18003609,  //  57   Nd, EN, identifier part, decimal 16
354     0x38000018,  //  58   Po, CS
355     0x68000018,  //  59   Po, ON
356     -0x17FFFFE7,  //  60   Me, hasUpper (subtract 511), hasLower (add 511), hasTitle, identifier start, supradecimal 31
357     0x68000019,  //  61   Sm, ON
358     -0x17FFFFE7,  //  62   Me, hasUpper (subtract 511), hasLower (add 511), hasTitle, identifier start, supradecimal 31
359     0x68000018,  //  63   Po, ON
360     0x68000018,  //  64   Po, ON
361     0x00827FE1,  //  65   Lu, L, hasLower (add 32), identifier start, supradecimal 31
362     0x00827FE1,  //  66   Lu, L, hasLower (add 32), identifier start, supradecimal 31
363     0x00827FE1,  //  67   Lu, L, hasLower (add 32), identifier start, supradecimal 31
364     0x00827FE1,  //  68   Lu, L, hasLower (add 32), identifier start, supradecimal 31
365     0x00827FE1,  //  69   Lu, L, hasLower (add 32), identifier start, supradecimal 31
366     0x00827FE1,  //  70   Lu, L, hasLower (add 32), identifier start, supradecimal 31
367     0x00827FE1,  //  71   Lu, L, hasLower (add 32), identifier start, supradecimal 31
368     0x00827FE1,  //  72   Lu, L, hasLower (add 32), identifier start, supradecimal 31
369     0x00827FE1,  //  73   Lu, L, hasLower (add 32), identifier start, supradecimal 31
370     0x00827FE1,  //  74   Lu, L, hasLower (add 32), identifier start, supradecimal 31
371     0x00827FE1,  //  75   Lu, L, hasLower (add 32), identifier start, supradecimal 31
372     0x00827FE1,  //  76   Lu, L, hasLower (add 32), identifier start, supradecimal 31
373     0x00827FE1,  //  77   Lu, L, hasLower (add 32), identifier start, supradecimal 31
374     0x00827FE1,  //  78   Lu, L, hasLower (add 32), identifier start, supradecimal 31
375     0x00827FE1,  //  79   Lu, L, hasLower (add 32), identifier start, supradecimal 31
376     0x00827FE1,  //  80   Lu, L, hasLower (add 32), identifier start, supradecimal 31
377     0x00827FE1,  //  81   Lu, L, hasLower (add 32), identifier start, supradecimal 31
378     0x00827FE1,  //  82   Lu, L, hasLower (add 32), identifier start, supradecimal 31
379     0x00827FE1,  //  83   Lu, L, hasLower (add 32), identifier start, supradecimal 31
380     0x00827FE1,  //  84   Lu, L, hasLower (add 32), identifier start, supradecimal 31
381     0x00827FE1,  //  85   Lu, L, hasLower (add 32), identifier start, supradecimal 31
382     0x00827FE1,  //  86   Lu, L, hasLower (add 32), identifier start, supradecimal 31
383     0x00827FE1,  //  87   Lu, L, hasLower (add 32), identifier start, supradecimal 31
384     0x00827FE1,  //  88   Lu, L, hasLower (add 32), identifier start, supradecimal 31
385     0x00827FE1,  //  89   Lu, L, hasLower (add 32), identifier start, supradecimal 31
386     0x00827FE1,  //  90   Lu, L, hasLower (add 32), identifier start, supradecimal 31
387     -0x17FFFFEB,  //  91   No, hasUpper (subtract 511), hasLower (add 511), hasTitle, identifier start, supradecimal 31
388     0x68000018,  //  92   Po, ON
389     -0x17FFFFEA,  //  93   Nl, hasUpper (subtract 511), hasLower (add 511), hasTitle, identifier start, supradecimal 31
390     0x6800001B,  //  94   Sk, ON
391     0x68005017,  //  95   Pc, ON, underscore
392     0x6800001B,  //  96   Sk, ON
393     0x00817FE2,  //  97   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
394     0x00817FE2,  //  98   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
395     0x00817FE2,  //  99   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
396     0x00817FE2,  // 100   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
397     0x00817FE2,  // 101   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
398     0x00817FE2,  // 102   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
399     0x00817FE2,  // 103   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
400     0x00817FE2,  // 104   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
401     0x00817FE2,  // 105   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
402     0x00817FE2,  // 106   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
403     0x00817FE2,  // 107   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
404     0x00817FE2,  // 108   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
405     0x00817FE2,  // 109   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
406     0x00817FE2,  // 110   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
407     0x00817FE2,  // 111   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
408     0x00817FE2,  // 112   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
409     0x00817FE2,  // 113   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
410     0x00817FE2,  // 114   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
411     0x00817FE2,  // 115   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
412     0x00817FE2,  // 116   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
413     0x00817FE2,  // 117   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
414     0x00817FE2,  // 118   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
415     0x00817FE2,  // 119   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
416     0x00817FE2,  // 120   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
417     0x00817FE2,  // 121   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
418     0x00817FE2,  // 122   Ll, L, hasUpper (subtract 32), identifier start, supradecimal 31
419     -0x17FFFFEB,  // 123   No, hasUpper (subtract 511), hasLower (add 511), hasTitle, identifier start, supradecimal 31
420     0x68000019,  // 124   Sm, ON
421     -0x17FFFFEA,  // 125   Nl, hasUpper (subtract 511), hasLower (add 511), hasTitle, identifier start, supradecimal 31
422     0x68000019,  // 126   Sm, ON
423     0x4800100F,  // 127   Cc, ignorable
424     0x4800100F,  // 128   Cc, ignorable
425     0x4800100F,  // 129   Cc, ignorable
426     0x4800100F,  // 130   Cc, ignorable
427     0x4800100F,  // 131   Cc, ignorable
428     0x4800100F,  // 132   Cc, ignorable
429     0x5000100F,  // 133   Cc, B, ignorable
430     0x4800100F,  // 134   Cc, ignorable
431     0x4800100F,  // 135   Cc, ignorable
432     0x4800100F,  // 136   Cc, ignorable
433     0x4800100F,  // 137   Cc, ignorable
434     0x4800100F,  // 138   Cc, ignorable
435     0x4800100F,  // 139   Cc, ignorable
436     0x4800100F,  // 140   Cc, ignorable
437     0x4800100F,  // 141   Cc, ignorable
438     0x4800100F,  // 142   Cc, ignorable
439     0x4800100F,  // 143   Cc, ignorable
440     0x4800100F,  // 144   Cc, ignorable
441     0x4800100F,  // 145   Cc, ignorable
442     0x4800100F,  // 146   Cc, ignorable
443     0x4800100F,  // 147   Cc, ignorable
444     0x4800100F,  // 148   Cc, ignorable
445     0x4800100F,  // 149   Cc, ignorable
446     0x4800100F,  // 150   Cc, ignorable
447     0x4800100F,  // 151   Cc, ignorable
448     0x4800100F,  // 152   Cc, ignorable
449     0x4800100F,  // 153   Cc, ignorable
450     0x4800100F,  // 154   Cc, ignorable
451     0x4800100F,  // 155   Cc, ignorable
452     0x4800100F,  // 156   Cc, ignorable
453     0x4800100F,  // 157   Cc, ignorable
454     0x4800100F,  // 158   Cc, ignorable
455     0x4800100F,  // 159   Cc, ignorable
456     0x3800000C,  // 160   Zs, CS
457     0x68000018,  // 161   Po, ON
458     0x2800601A,  // 162   Sc, ET, currency
459     0x2800601A,  // 163   Sc, ET, currency
460     0x2800601A,  // 164   Sc, ET, currency
461     0x2800601A,  // 165   Sc, ET, currency
462     0x6800001C,  // 166   So, ON
463     0x68000018,  // 167   Po, ON
464     0x6800001B,  // 168   Sk, ON
465     0x6800001C,  // 169   So, ON
466     -0xFFFF8FFB,  // 170   Sk, hasUpper (subtract 511), hasLower (add 511), hasTitle, supradecimal 31
467     -0x17FFFFE3,  // 171   Lt, hasUpper (subtract 511), hasLower (add 511), hasTitle, identifier start, supradecimal 31
468     0x68000019,  // 172   Sm, ON
469     0x48001010,  // 173   Cf, ignorable
470     0x6800001C,  // 174   So, ON
471     0x6800001B,  // 175   Sk, ON
472     0x2800001C,  // 176   So, ET
473     0x28000019,  // 177   Sm, ET
474     0x1800060B,  // 178   No, EN, decimal 16
475     0x1800060B,  // 179   No, EN, decimal 16
476     0x6800001B,  // 180   Sk, ON
477     0x07FD7002,  // 181   Ll, L, hasUpper (subtract 511), identifier start
478     0x68000018,  // 182   Po, ON
479     0x68000018,  // 183   Po, ON
480     0x6800001B,  // 184   Sk, ON
481     0x1800050B,  // 185   No, EN, decimal 8
482     -0xFFFF8FFB,  // 186   Sk, hasUpper (subtract 511), hasLower (add 511), hasTitle, supradecimal 31
483     -0x17FFFFE2,  // 187   Ll, hasUpper (subtract 511), hasLower (add 511), hasTitle, identifier start, supradecimal 31
484     0x6800080B,  // 188   No, ON, strange
485     0x6800080B,  // 189   No, ON, strange
486     0x6800080B,  // 190   No, ON, strange
487     0x68000018,  // 191   Po, ON
488     0x00827001,  // 192   Lu, L, hasLower (add 32), identifier start
489     0x00827001,  // 193   Lu, L, hasLower (add 32), identifier start
490     0x00827001,  // 194   Lu, L, hasLower (add 32), identifier start
491     0x00827001,  // 195   Lu, L, hasLower (add 32), identifier start
492     0x00827001,  // 196   Lu, L, hasLower (add 32), identifier start
493     0x00827001,  // 197   Lu, L, hasLower (add 32), identifier start
494     0x00827001,  // 198   Lu, L, hasLower (add 32), identifier start
495     0x00827001,  // 199   Lu, L, hasLower (add 32), identifier start
496     0x00827001,  // 200   Lu, L, hasLower (add 32), identifier start
497     0x00827001,  // 201   Lu, L, hasLower (add 32), identifier start
498     0x00827001,  // 202   Lu, L, hasLower (add 32), identifier start
499     0x00827001,  // 203   Lu, L, hasLower (add 32), identifier start
500     0x00827001,  // 204   Lu, L, hasLower (add 32), identifier start
501     0x00827001,  // 205   Lu, L, hasLower (add 32), identifier start
502     0x00827001,  // 206   Lu, L, hasLower (add 32), identifier start
503     0x00827001,  // 207   Lu, L, hasLower (add 32), identifier start
504     0x00827001,  // 208   Lu, L, hasLower (add 32), identifier start
505     0x00827001,  // 209   Lu, L, hasLower (add 32), identifier start
506     0x00827001,  // 210   Lu, L, hasLower (add 32), identifier start
507     0x00827001,  // 211   Lu, L, hasLower (add 32), identifier start
508     0x00827001,  // 212   Lu, L, hasLower (add 32), identifier start
509     0x00827001,  // 213   Lu, L, hasLower (add 32), identifier start
510     0x00827001,  // 214   Lu, L, hasLower (add 32), identifier start
511     0x68000019,  // 215   Sm, ON
512     0x00827001,  // 216   Lu, L, hasLower (add 32), identifier start
513     0x00827001,  // 217   Lu, L, hasLower (add 32), identifier start
514     0x00827001,  // 218   Lu, L, hasLower (add 32), identifier start
515     0x00827001,  // 219   Lu, L, hasLower (add 32), identifier start
516     0x00827001,  // 220   Lu, L, hasLower (add 32), identifier start
517     0x00827001,  // 221   Lu, L, hasLower (add 32), identifier start
518     0x00827001,  // 222   Lu, L, hasLower (add 32), identifier start
519     0x07FD7002,  // 223   Ll, L, hasUpper (subtract 511), identifier start
520     0x00817002,  // 224   Ll, L, hasUpper (subtract 32), identifier start
521     0x00817002,  // 225   Ll, L, hasUpper (subtract 32), identifier start
522     0x00817002,  // 226   Ll, L, hasUpper (subtract 32), identifier start
523     0x00817002,  // 227   Ll, L, hasUpper (subtract 32), identifier start
524     0x00817002,  // 228   Ll, L, hasUpper (subtract 32), identifier start
525     0x00817002,  // 229   Ll, L, hasUpper (subtract 32), identifier start
526     0x00817002,  // 230   Ll, L, hasUpper (subtract 32), identifier start
527     0x00817002,  // 231   Ll, L, hasUpper (subtract 32), identifier start
528     0x00817002,  // 232   Ll, L, hasUpper (subtract 32), identifier start
529     0x00817002,  // 233   Ll, L, hasUpper (subtract 32), identifier start
530     0x00817002,  // 234   Ll, L, hasUpper (subtract 32), identifier start
531     0x00817002,  // 235   Ll, L, hasUpper (subtract 32), identifier start
532     0x00817002,  // 236   Ll, L, hasUpper (subtract 32), identifier start
533     0x00817002,  // 237   Ll, L, hasUpper (subtract 32), identifier start
534     0x00817002,  // 238   Ll, L, hasUpper (subtract 32), identifier start
535     0x00817002,  // 239   Ll, L, hasUpper (subtract 32), identifier start
536     0x00817002,  // 240   Ll, L, hasUpper (subtract 32), identifier start
537     0x00817002,  // 241   Ll, L, hasUpper (subtract 32), identifier start
538     0x00817002,  // 242   Ll, L, hasUpper (subtract 32), identifier start
539     0x00817002,  // 243   Ll, L, hasUpper (subtract 32), identifier start
540     0x00817002,  // 244   Ll, L, hasUpper (subtract 32), identifier start
541     0x00817002,  // 245   Ll, L, hasUpper (subtract 32), identifier start
542     0x00817002,  // 246   Ll, L, hasUpper (subtract 32), identifier start
543     0x68000019,  // 247   Sm, ON
544     0x00817002,  // 248   Ll, L, hasUpper (subtract 32), identifier start
545     0x00817002,  // 249   Ll, L, hasUpper (subtract 32), identifier start
546     0x00817002,  // 250   Ll, L, hasUpper (subtract 32), identifier start
547     0x00817002,  // 251   Ll, L, hasUpper (subtract 32), identifier start
548     0x00817002,  // 252   Ll, L, hasUpper (subtract 32), identifier start
549     0x00817002,  // 253   Ll, L, hasUpper (subtract 32), identifier start
550     0x00817002,  // 254   Ll, L, hasUpper (subtract 32), identifier start
551     0x061D7002   // 255   Ll, L, hasUpper (subtract 391), identifier start
552   };
553
554   // The B table has 256 entries for a total of 512 bytes.
555
556   static final char B[] = {
557     0x0000,  //   0   unassigned, L
558     0x0000,  //   1   unassigned, L
559     0x0000,  //   2   unassigned, L
560     0x0000,  //   3   unassigned, L
561     0x0000,  //   4   unassigned, L
562     0x0000,  //   5   unassigned, L
563     0x0000,  //   6   unassigned, L
564     0x0000,  //   7   unassigned, L
565     0x0000,  //   8   unassigned, L
566     0x0000,  //   9   unassigned, L
567     0x0000,  //  10   unassigned, L
568     0x0000,  //  11   unassigned, L
569     0x0000,  //  12   unassigned, L
570     0x0000,  //  13   unassigned, L
571     0x0000,  //  14   unassigned, L
572     0x0000,  //  15   unassigned, L
573     0x0000,  //  16   unassigned, L
574     0x0000,  //  17   unassigned, L
575     0x0000,  //  18   unassigned, L
576     0x0000,  //  19   unassigned, L
577     0x0000,  //  20   unassigned, L
578     0x0000,  //  21   unassigned, L
579     0x0000,  //  22   unassigned, L
580     0x0000,  //  23   unassigned, L
581     0x0000,  //  24   unassigned, L
582     0x0000,  //  25   unassigned, L
583     0x0000,  //  26   unassigned, L
584     0x0000,  //  27   unassigned, L
585     0x0000,  //  28   unassigned, L
586     0x0000,  //  29   unassigned, L
587     0x0000,  //  30   unassigned, L
588     0x0000,  //  31   unassigned, L
589     0x0000,  //  32   unassigned, L
590     0x0000,  //  33   unassigned, L
591     0x0000,  //  34   unassigned, L
592     0x0000,  //  35   unassigned, L
593     0x0000,  //  36   unassigned, L
594     0x0000,  //  37   unassigned, L
595     0x0000,  //  38   unassigned, L
596     0x0000,  //  39   unassigned, L
597     0x0000,  //  40   unassigned, L
598     0x0000,  //  41   unassigned, L
599     0x0000,  //  42   unassigned, L
600     0x0000,  //  43   unassigned, L
601     0x0000,  //  44   unassigned, L
602     0x0000,  //  45   unassigned, L
603     0x0000,  //  46   unassigned, L
604     0x0000,  //  47   unassigned, L
605     0x0000,  //  48   unassigned, L
606     0x0000,  //  49   unassigned, L
607     0x0000,  //  50   unassigned, L
608     0x0000,  //  51   unassigned, L
609     0x0000,  //  52   unassigned, L
610     0x0000,  //  53   unassigned, L
611     0x0000,  //  54   unassigned, L
612     0x0000,  //  55   unassigned, L
613     0x0000,  //  56   unassigned, L
614     0x0000,  //  57   unassigned, L
615     0x0000,  //  58   unassigned, L
616     0x0000,  //  59   unassigned, L
617     0x0000,  //  60   unassigned, L
618     0x0000,  //  61   unassigned, L
619     0x0000,  //  62   unassigned, L
620     0x0000,  //  63   unassigned, L
621     0x0000,  //  64   unassigned, L
622     0x0000,  //  65   unassigned, L
623     0x0000,  //  66   unassigned, L
624     0x0000,  //  67   unassigned, L
625     0x0000,  //  68   unassigned, L
626     0x0000,  //  69   unassigned, L
627     0x0000,  //  70   unassigned, L
628     0x0000,  //  71   unassigned, L
629     0x0000,  //  72   unassigned, L
630     0x0000,  //  73   unassigned, L
631     0x0000,  //  74   unassigned, L
632     0x0000,  //  75   unassigned, L
633     0x0000,  //  76   unassigned, L
634     0x0000,  //  77   unassigned, L
635     0x0000,  //  78   unassigned, L
636     0x0000,  //  79   unassigned, L
637     0x0000,  //  80   unassigned, L
638     0x0000,  //  81   unassigned, L
639     0x0000,  //  82   unassigned, L
640     0x0000,  //  83   unassigned, L
641     0x0000,  //  84   unassigned, L
642     0x0000,  //  85   unassigned, L
643     0x0000,  //  86   unassigned, L
644     0x0000,  //  87   unassigned, L
645     0x0000,  //  88   unassigned, L
646     0x0000,  //  89   unassigned, L
647     0x0000,  //  90   unassigned, L
648     0x0000,  //  91   unassigned, L
649     0x0000,  //  92   unassigned, L
650     0x0000,  //  93   unassigned, L
651     0x0000,  //  94   unassigned, L
652     0x0000,  //  95   unassigned, L
653     0x0000,  //  96   unassigned, L
654     0x0000,  //  97   unassigned, L
655     0x0000,  //  98   unassigned, L
656     0x0000,  //  99   unassigned, L
657     0x0000,  // 100   unassigned, L
658     0x0000,  // 101   unassigned, L
659     0x0000,  // 102   unassigned, L
660     0x0000,  // 103   unassigned, L
661     0x0000,  // 104   unassigned, L
662     0x0000,  // 105   unassigned, L
663     0x0000,  // 106   unassigned, L
664     0x0000,  // 107   unassigned, L
665     0x0000,  // 108   unassigned, L
666     0x0000,  // 109   unassigned, L
667     0x0000,  // 110   unassigned, L
668     0x0000,  // 111   unassigned, L
669     0x0000,  // 112   unassigned, L
670     0x0000,  // 113   unassigned, L
671     0x0000,  // 114   unassigned, L
672     0x0000,  // 115   unassigned, L
673     0x0000,  // 116   unassigned, L
674     0x0000,  // 117   unassigned, L
675     0x0000,  // 118   unassigned, L
676     0x0000,  // 119   unassigned, L
677     0x0000,  // 120   unassigned, L
678     0x0000,  // 121   unassigned, L
679     0x0000,  // 122   unassigned, L
680     0x0000,  // 123   unassigned, L
681     0x0000,  // 124   unassigned, L
682     0x0000,  // 125   unassigned, L
683     0x0000,  // 126   unassigned, L
684     0x0000,  // 127   unassigned, L
685     0x0000,  // 128   unassigned, L
686     0x0000,  // 129   unassigned, L
687     0x0000,  // 130   unassigned, L
688     0x0000,  // 131   unassigned, L
689     0x0000,  // 132   unassigned, L
690     0x0000,  // 133   unassigned, L
691     0x0000,  // 134   unassigned, L
692     0x0000,  // 135   unassigned, L
693     0x0000,  // 136   unassigned, L
694     0x0000,  // 137   unassigned, L
695     0x0000,  // 138   unassigned, L
696     0x0000,  // 139   unassigned, L
697     0x0000,  // 140   unassigned, L
698     0x0000,  // 141   unassigned, L
699     0x0000,  // 142   unassigned, L
700     0x0000,  // 143   unassigned, L
701     0x0000,  // 144   unassigned, L
702     0x0000,  // 145   unassigned, L
703     0x0000,  // 146   unassigned, L
704     0x0000,  // 147   unassigned, L
705     0x0000,  // 148   unassigned, L
706     0x0000,  // 149   unassigned, L
707     0x0000,  // 150   unassigned, L
708     0x0000,  // 151   unassigned, L
709     0x0000,  // 152   unassigned, L
710     0x0000,  // 153   unassigned, L
711     0x0000,  // 154   unassigned, L
712     0x0000,  // 155   unassigned, L
713     0x0000,  // 156   unassigned, L
714     0x0000,  // 157   unassigned, L
715     0x0000,  // 158   unassigned, L
716     0x0000,  // 159   unassigned, L
717     0x0000,  // 160   unassigned, L
718     0x0000,  // 161   unassigned, L
719     0x0000,  // 162   unassigned, L
720     0x0000,  // 163   unassigned, L
721     0x0000,  // 164   unassigned, L
722     0x0000,  // 165   unassigned, L
723     0x0000,  // 166   unassigned, L
724     0x0000,  // 167   unassigned, L
725     0x0000,  // 168   unassigned, L
726     0x0000,  // 169   unassigned, L
727     0x0001,  // 170   Lu, L
728     0x0000,  // 171   unassigned, L
729     0x0000,  // 172   unassigned, L
730     0x0000,  // 173   unassigned, L
731     0x0000,  // 174   unassigned, L
732     0x0000,  // 175   unassigned, L
733     0x0000,  // 176   unassigned, L
734     0x0000,  // 177   unassigned, L
735     0x0000,  // 178   unassigned, L
736     0x0000,  // 179   unassigned, L
737     0x0000,  // 180   unassigned, L
738     0x0000,  // 181   unassigned, L
739     0x0000,  // 182   unassigned, L
740     0x0000,  // 183   unassigned, L
741     0x0000,  // 184   unassigned, L
742     0x0000,  // 185   unassigned, L
743     0x0001,  // 186   Lu, L
744     0x0000,  // 187   unassigned, L
745     0x0000,  // 188   unassigned, L
746     0x0000,  // 189   unassigned, L
747     0x0000,  // 190   unassigned, L
748     0x0000,  // 191   unassigned, L
749     0x0000,  // 192   unassigned, L
750     0x0000,  // 193   unassigned, L
751     0x0000,  // 194   unassigned, L
752     0x0000,  // 195   unassigned, L
753     0x0000,  // 196   unassigned, L
754     0x0000,  // 197   unassigned, L
755     0x0000,  // 198   unassigned, L
756     0x0000,  // 199   unassigned, L
757     0x0000,  // 200   unassigned, L
758     0x0000,  // 201   unassigned, L
759     0x0000,  // 202   unassigned, L
760     0x0000,  // 203   unassigned, L
761     0x0000,  // 204   unassigned, L
762     0x0000,  // 205   unassigned, L
763     0x0000,  // 206   unassigned, L
764     0x0000,  // 207   unassigned, L
765     0x0000,  // 208   unassigned, L
766     0x0000,  // 209   unassigned, L
767     0x0000,  // 210   unassigned, L
768     0x0000,  // 211   unassigned, L
769     0x0000,  // 212   unassigned, L
770     0x0000,  // 213   unassigned, L
771     0x0000,  // 214   unassigned, L
772     0x0000,  // 215   unassigned, L
773     0x0000,  // 216   unassigned, L
774     0x0000,  // 217   unassigned, L
775     0x0000,  // 218   unassigned, L
776     0x0000,  // 219   unassigned, L
777     0x0000,  // 220   unassigned, L
778     0x0000,  // 221   unassigned, L
779     0x0000,  // 222   unassigned, L
780     0x0000,  // 223   unassigned, L
781     0x0000,  // 224   unassigned, L
782     0x0000,  // 225   unassigned, L
783     0x0000,  // 226   unassigned, L
784     0x0000,  // 227   unassigned, L
785     0x0000,  // 228   unassigned, L
786     0x0000,  // 229   unassigned, L
787     0x0000,  // 230   unassigned, L
788     0x0000,  // 231   unassigned, L
789     0x0000,  // 232   unassigned, L
790     0x0000,  // 233   unassigned, L
791     0x0000,  // 234   unassigned, L
792     0x0000,  // 235   unassigned, L
793     0x0000,  // 236   unassigned, L
794     0x0000,  // 237   unassigned, L
795     0x0000,  // 238   unassigned, L
796     0x0000,  // 239   unassigned, L
797     0x0000,  // 240   unassigned, L
798     0x0000,  // 241   unassigned, L
799     0x0000,  // 242   unassigned, L
800     0x0000,  // 243   unassigned, L
801     0x0000,  // 244   unassigned, L
802     0x0000,  // 245   unassigned, L
803     0x0000,  // 246   unassigned, L
804     0x0000,  // 247   unassigned, L
805     0x0000,  // 248   unassigned, L
806     0x0000,  // 249   unassigned, L
807     0x0000,  // 250   unassigned, L
808     0x0000,  // 251   unassigned, L
809     0x0000,  // 252   unassigned, L
810     0x0000,  // 253   unassigned, L
811     0x0000,  // 254   unassigned, L
812     0x0000   // 255   unassigned, L
813   };
814
815   // In all, the character property tables require 1024 bytes.
816
817     static {
818         
819     }        
820 }
821
822