iv-phonic 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -27,7 +27,6 @@ ext/include/iv/xorshift.h
27
27
  ext/include/iv/location.h
28
28
  ext/include/iv/ast_info.h
29
29
  ext/include/iv/none.h
30
- ext/include/iv/algorithm.h
31
30
  ext/include/iv/ustring.h
32
31
  ext/include/iv/ast_serializer.h
33
32
  ext/include/iv/utils.h
@@ -36,6 +35,7 @@ ext/include/iv/alloc.h
36
35
  ext/include/iv/chars.h
37
36
  ext/include/iv/fixedcontainer.h
38
37
  ext/include/iv/ustringpiece.h
38
+ ext/include/iv/character.h
39
39
  ext/include/iv/ucdata.h
40
40
  ext/iv/phonic/factory.h
41
41
  ext/iv/phonic/ast_fwd.h
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ directory "ext/include/iv"
10
10
 
11
11
  HOE = Hoe.spec 'iv-phonic' do
12
12
  developer('Constellation', 'utatane.tea@gmail.com')
13
- self.version = '0.0.7'
13
+ self.version = '0.0.8'
14
14
  self.readme_file = 'README.rdoc'
15
15
  self.history_file = 'ChangeLog'
16
16
  self.extra_rdoc_files = FileList['*.rdoc']
@@ -70,10 +70,11 @@ class Scope : private Noncopyable<Scope<Factory> >::type {
70
70
  FunctionLiteral<Factory>*>::type FunctionLiterals;
71
71
  typedef Scope<Factory> this_type;
72
72
 
73
- explicit Scope(Factory* factory)
73
+ explicit Scope(Factory* factory, bool is_global)
74
74
  : up_(NULL),
75
75
  vars_(typename Variables::allocator_type(factory)),
76
- funcs_(typename FunctionLiterals::allocator_type(factory)) {
76
+ funcs_(typename FunctionLiterals::allocator_type(factory)),
77
+ is_global_(is_global) {
77
78
  }
78
79
  void AddUnresolved(Identifier<Factory>* name, bool is_const) {
79
80
  vars_.push_back(std::make_pair(name, is_const));
@@ -90,6 +91,9 @@ class Scope : private Noncopyable<Scope<Factory> >::type {
90
91
  inline const Variables& variables() const {
91
92
  return vars_;
92
93
  }
94
+ inline bool IsGlobal() const {
95
+ return is_global_;
96
+ }
93
97
  this_type* GetUpperScope() {
94
98
  return up_;
95
99
  }
@@ -97,6 +101,7 @@ class Scope : private Noncopyable<Scope<Factory> >::type {
97
101
  this_type* up_;
98
102
  Variables vars_;
99
103
  FunctionLiterals funcs_;
104
+ bool is_global_;
100
105
  };
101
106
 
102
107
  template<typename Factory>
@@ -1255,7 +1260,7 @@ class FunctionLiteral : public FunctionLiteralBase<Factory> {
1255
1260
  type_(type),
1256
1261
  params_(typename Identifiers::allocator_type(factory)),
1257
1262
  body_(typename Statements::allocator_type(factory)),
1258
- scope_(factory),
1263
+ scope_(factory, type == GLOBAL),
1259
1264
  strict_(false) {
1260
1265
  }
1261
1266
 
@@ -0,0 +1,878 @@
1
+ // This header is from java.lang.Character.java in Apache Harmony
2
+ //
3
+ // Licensed to the ASF
4
+ // Apache License
5
+ //
6
+ #ifndef _IV_CHARACTER_H_
7
+ #define _IV_CHARACTER_H_
8
+ #include <cassert>
9
+ #include <algorithm>
10
+ #include <tr1/cstdint>
11
+ #include <tr1/array>
12
+ namespace iv {
13
+ namespace core {
14
+ namespace character {
15
+
16
+ static const uint16_t kMinValue = 0;
17
+ static const uint16_t kMaxValue = 0xFFFF;
18
+
19
+ static const int kMinRadix = 2;
20
+ static const int kMaxRadix = 36;
21
+
22
+ enum Category {
23
+ UNASSIGNED = 0, // Cn
24
+ UPPERCASE_LETTER = 1, // Lu
25
+ LOWERCASE_LETTER = 2, // Ll
26
+ TITLECASE_LETTER = 3, // Lt
27
+ MODIFIER_LETTER = 4, // Lm
28
+ OTHER_LETTER = 5, // Lo
29
+ NON_SPACING_MARK = 6, // Mn
30
+ ENCLOSING_MARK = 7, // Me
31
+ COMBINING_SPACING_MARK = 8, // Mc
32
+ DECIMAL_DIGIT_NUMBER = 9, // Nd
33
+ LETTER_NUMBER = 10, // Nl
34
+ OTHER_NUMBER = 11, // No
35
+ SPACE_SEPARATOR = 12, // Zs
36
+ LINE_SEPARATOR = 13, // Zl
37
+ PARAGRAPH_SEPARATOR = 14, // Zp
38
+ CONTROL = 15, // Cc
39
+ FORMAT = 16, // Cf
40
+ PRIVATE_USE = 18, // Co
41
+ SURROGATE = 19, // Cs
42
+ DASH_PUNCTUATION = 20, // Pd
43
+ START_PUNCTUATION = 21, // Ps
44
+ END_PUNCTUATION = 22, // Pe
45
+ CONNECTOR_PUNCTUATION = 23, // Pc
46
+ OTHER_PUNCTUATION = 24, // Po
47
+ MATH_SYMBOL = 25, // Sm
48
+ CURRENCY_SYMBOL = 26, // Sc
49
+ MODIFIER_SYMBOL = 27, // Sk
50
+ OTHER_SYMBOL = 28, // So
51
+ INITIAL_QUOTE_PUNCTUATION = 29, // Pi
52
+ FINAL_QUOTE_PUNCTUATION = 30 // Pf
53
+ };
54
+
55
+ enum CategoryFlag {
56
+ Cn = 1 << UNASSIGNED,
57
+ Lu = 1 << UPPERCASE_LETTER,
58
+ Ll = 1 << LOWERCASE_LETTER,
59
+ Lt = 1 << TITLECASE_LETTER,
60
+ Lm = 1 << MODIFIER_LETTER,
61
+ Lo = 1 << OTHER_LETTER,
62
+ Mn = 1 << NON_SPACING_MARK,
63
+ Me = 1 << ENCLOSING_MARK,
64
+ Mc = 1 << COMBINING_SPACING_MARK,
65
+ Nd = 1 << DECIMAL_DIGIT_NUMBER,
66
+ Nl = 1 << LETTER_NUMBER,
67
+ No = 1 << OTHER_NUMBER,
68
+ Zs = 1 << SPACE_SEPARATOR,
69
+ Zl = 1 << LINE_SEPARATOR,
70
+ Zp = 1 << PARAGRAPH_SEPARATOR,
71
+ Cc = 1 << CONTROL,
72
+ Cf = 1 << FORMAT,
73
+ Co = 1 << PRIVATE_USE,
74
+ Cs = 1 << SURROGATE,
75
+ Pd = 1 << DASH_PUNCTUATION,
76
+ Ps = 1 << START_PUNCTUATION,
77
+ Pe = 1 << END_PUNCTUATION,
78
+ Pc = 1 << CONNECTOR_PUNCTUATION,
79
+ Po = 1 << OTHER_PUNCTUATION,
80
+ Sm = 1 << MATH_SYMBOL,
81
+ Sc = 1 << CURRENCY_SYMBOL,
82
+ Sk = 1 << MODIFIER_SYMBOL,
83
+ So = 1 << OTHER_SYMBOL,
84
+ Pi = 1 << INITIAL_QUOTE_PUNCTUATION,
85
+ Pf = 1 << FINAL_QUOTE_PUNCTUATION
86
+ };
87
+
88
+ // unicode bidirectional constant
89
+ static const int kDirectionalityUndefined = -1;
90
+ static const int kDirectionalityLeftToRight = 0; // L
91
+ static const int kDirectionalityRightToLeft = 1; // R
92
+ static const int kDirectionalityRightToLeftArabic = 2; // AL
93
+ static const int kDirectionalityEnuropeanNumber = 3; // EN
94
+ static const int kDirectionalityEnuropeanNumberSeparator = 4; // ES
95
+ static const int kDirectionalityEnuropeanNumberTerminator = 5; // ET
96
+ static const int kDirectionalityEnuropeanArabicNumber = 6; // AN
97
+ static const int kDirectionalityCommonNumberSeparator = 7; // CS
98
+ static const int kDirectionalityNonspacingMark = 8; // NSM
99
+ static const int kDirectionalityBoundaryNeutral = 9; // BN
100
+ static const int kDirectionalityParagraphSeparator = 10; // B
101
+ static const int kDirectionalitySegmentSeparator = 11; // S
102
+ static const int kDirectionalityWhiteSpace = 12; // WS
103
+ static const int kDirectionalityOtherNeutrals = 13; // ON
104
+ static const int kDirectionalityLeftToRightEmbedding = 14; // LRE
105
+ static const int kDirectionalityLeftToRightOverride = 15; // LRO
106
+ static const int kDirectionalityRightToLeftEmbedding = 16; // RLE
107
+ static const int kDirectionalityRightToLeftOverride = 17; // RLO
108
+ static const int kDirectionalityPopDirectionalFormat = 18; // PDF
109
+
110
+ static const uint16_t kMinHighSurrogate = 0xD800;
111
+ static const uint16_t kMaxHighSurrogate = 0xDBFF;
112
+
113
+ static const uint16_t kMaxLowSurrogate = 0xDFFF;
114
+ static const uint16_t kMinLowSurrogate = 0xD800;
115
+
116
+ static const uint16_t kMinSurrogate = 0xD800;
117
+ static const uint16_t kMaxSurrogate = 0xDFFF;
118
+
119
+ static const int kMinSupplementaryCodePoint = 0x10000;
120
+ static const int kMinCodePoint = 0x0000000;
121
+ static const int kMaxCodePoint = 0x10FFFF;
122
+
123
+ static const int kSize = 16;
124
+
125
+ static const std::tr1::array<uint8_t, 1000> kCategoryCache = { {
126
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
127
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
128
+ 12, 24, 24, 24, 26, 24, 24, 24, 21, 22, 24, 25, 24, 20, 24, 24,
129
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 24, 24, 25, 25, 25, 24,
130
+ 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
131
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 24, 22, 27, 23,
132
+ 27, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
133
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 25, 22, 25, 15,
134
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
135
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
136
+ 12, 24, 26, 26, 26, 26, 28, 28, 27, 28, 2, 29, 25, 16, 28, 27,
137
+ 28, 25, 11, 11, 27, 2, 28, 24, 27, 11, 2, 30, 11, 11, 11, 24,
138
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
139
+ 1, 1, 1, 1, 1, 1, 1, 25, 1, 1, 1, 1, 1, 1, 1, 2,
140
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
141
+ 2, 2, 2, 2, 2, 2, 2, 25, 2, 2, 2, 2, 2, 2, 2, 2,
142
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
143
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
144
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
145
+ 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1,
146
+ 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2,
147
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
148
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
149
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2,
150
+ 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1,
151
+ 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1,
152
+ 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1,
153
+ 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 5, 1, 2, 2, 2,
154
+ 5, 5, 5, 5, 1, 3, 2, 1, 3, 2, 1, 3, 2, 1, 2, 1,
155
+ 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2,
156
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
157
+ 2, 1, 3, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2,
158
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
159
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
160
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
161
+ 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2,
162
+ 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
163
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
164
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
165
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
166
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
167
+ 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
168
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
169
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
170
+ 4, 4, 27, 27, 27, 27, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
171
+ 4, 4, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
172
+ 4, 4, 4, 4, 4, 27, 27, 27, 27, 27, 27, 27, 4, 27, 4, 27,
173
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
174
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
175
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
176
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
177
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
178
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
179
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
180
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
181
+ 1, 2, 1, 2, 4, 27, 1, 2, 0, 0, 4, 2, 2, 2, 24, 0,
182
+ 0, 0, 0, 0, 27, 27, 1, 24, 1, 1, 1, 0, 1, 0, 1, 1,
183
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
184
+ 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
185
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
186
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1,
187
+ 2, 2, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2,
188
+ 1, 2, 1, 2, 1, 2, 1, 2
189
+ } };
190
+
191
+ static const std::tr1::array<uint16_t, 1327> kCategoryKeys = { {
192
+ 0x3E8, 0x3EF, 0x3F4, 0x3F5, 0x3F6, 0x3F7, 0x3F8, 0x3F9, 0x3FB, 0x3FD,
193
+ 0x430, 0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, 0x468,
194
+ 0x469, 0x46A, 0x46B, 0x46C, 0x46D, 0x46E, 0x46F, 0x470, 0x471, 0x472,
195
+ 0x473, 0x474, 0x475, 0x476, 0x477, 0x478, 0x479, 0x47A, 0x47B, 0x47C,
196
+ 0x47D, 0x47E, 0x47F, 0x480, 0x481, 0x482, 0x483, 0x488, 0x48A, 0x4C0,
197
+ 0x4C2, 0x4CE, 0x4D0, 0x531, 0x559, 0x55A, 0x561, 0x589, 0x591, 0x5BE,
198
+ 0x5BF, 0x5C0, 0x5C1, 0x5C3, 0x5C4, 0x5C6, 0x5D0, 0x5F0, 0x5F3, 0x600,
199
+ 0x606, 0x609, 0x60B, 0x60C, 0x60E, 0x610, 0x61B, 0x61E, 0x620, 0x640,
200
+ 0x641, 0x64B, 0x660, 0x66A, 0x66E, 0x670, 0x671, 0x6D4, 0x6D6, 0x6DD,
201
+ 0x6DF, 0x6E5, 0x6E7, 0x6E9, 0x6EA, 0x6EE, 0x6F0, 0x6FA, 0x6FD, 0x6FF,
202
+ 0x700, 0x70F, 0x710, 0x711, 0x712, 0x730, 0x74D, 0x7A6, 0x7B1, 0x7C0,
203
+ 0x7CA, 0x7EB, 0x7F4, 0x7F6, 0x7F7, 0x7FA, 0x800, 0x816, 0x81A, 0x81B,
204
+ 0x824, 0x825, 0x828, 0x829, 0x830, 0x840, 0x859, 0x85E, 0x900, 0x903,
205
+ 0x904, 0x93A, 0x93B, 0x93C, 0x93D, 0x93E, 0x941, 0x949, 0x94D, 0x94E,
206
+ 0x950, 0x951, 0x958, 0x962, 0x964, 0x966, 0x970, 0x972, 0x979, 0x981,
207
+ 0x982, 0x985, 0x98F, 0x993, 0x9AA, 0x9B2, 0x9B6, 0x9BC, 0x9BE, 0x9C1,
208
+ 0x9C7, 0x9CB, 0x9CD, 0x9D7, 0x9DC, 0x9DF, 0x9E2, 0x9E6, 0x9F0, 0x9F2,
209
+ 0x9F4, 0x9FA, 0xA01, 0xA03, 0xA05, 0xA0F, 0xA13, 0xA2A, 0xA32, 0xA35,
210
+ 0xA38, 0xA3C, 0xA3E, 0xA41, 0xA47, 0xA4B, 0xA51, 0xA59, 0xA5E, 0xA66,
211
+ 0xA70, 0xA72, 0xA75, 0xA81, 0xA83, 0xA85, 0xA8F, 0xA93, 0xAAA, 0xAB2,
212
+ 0xAB5, 0xABC, 0xABE, 0xAC1, 0xAC7, 0xAC9, 0xACB, 0xACD, 0xAD0, 0xAE0,
213
+ 0xAE2, 0xAE6, 0xAF1, 0xB01, 0xB02, 0xB05, 0xB0F, 0xB13, 0xB2A, 0xB32,
214
+ 0xB35, 0xB3C, 0xB3D, 0xB3E, 0xB3F, 0xB40, 0xB41, 0xB47, 0xB4B, 0xB4D,
215
+ 0xB56, 0xB5C, 0xB5F, 0xB62, 0xB66, 0xB70, 0xB72, 0xB82, 0xB85, 0xB8E,
216
+ 0xB92, 0xB99, 0xB9C, 0xB9E, 0xBA3, 0xBA8, 0xBAE, 0xBBE, 0xBC0, 0xBC1,
217
+ 0xBC6, 0xBCA, 0xBCD, 0xBD0, 0xBD7, 0xBE6, 0xBF0, 0xBF3, 0xBF9, 0xC01,
218
+ 0xC05, 0xC0E, 0xC12, 0xC2A, 0xC35, 0xC3D, 0xC3E, 0xC41, 0xC46, 0xC4A,
219
+ 0xC55, 0xC58, 0xC60, 0xC62, 0xC66, 0xC78, 0xC7F, 0xC82, 0xC85, 0xC8E,
220
+ 0xC92, 0xCAA, 0xCB5, 0xCBC, 0xCBD, 0xCBE, 0xCBF, 0xCC0, 0xCC6, 0xCC7,
221
+ 0xCCA, 0xCCC, 0xCD5, 0xCDE, 0xCE0, 0xCE2, 0xCE6, 0xCF1, 0xD02, 0xD05,
222
+ 0xD0E, 0xD12, 0xD3D, 0xD3E, 0xD41, 0xD46, 0xD4A, 0xD4D, 0xD57, 0xD60,
223
+ 0xD62, 0xD66, 0xD70, 0xD79, 0xD7A, 0xD82, 0xD85, 0xD9A, 0xDB3, 0xDBD,
224
+ 0xDC0, 0xDCA, 0xDCF, 0xDD2, 0xDD6, 0xDD8, 0xDF2, 0xDF4, 0xE01, 0xE31,
225
+ 0xE32, 0xE34, 0xE3F, 0xE40, 0xE46, 0xE47, 0xE4F, 0xE50, 0xE5A, 0xE81,
226
+ 0xE84, 0xE87, 0xE8A, 0xE8D, 0xE94, 0xE99, 0xEA1, 0xEA5, 0xEA7, 0xEAA,
227
+ 0xEAD, 0xEB1, 0xEB2, 0xEB4, 0xEBB, 0xEBD, 0xEC0, 0xEC6, 0xEC8, 0xED0,
228
+ 0xEDC, 0xF00, 0xF01, 0xF04, 0xF13, 0xF18, 0xF1A, 0xF20, 0xF2A, 0xF34,
229
+ 0xF35, 0xF36, 0xF37, 0xF38, 0xF39, 0xF3A, 0xF3B, 0xF3C, 0xF3D, 0xF3E,
230
+ 0xF40, 0xF49, 0xF71, 0xF7F, 0xF80, 0xF85, 0xF86, 0xF88, 0xF8D, 0xF99,
231
+ 0xFBE, 0xFC6, 0xFC7, 0xFCE, 0xFD0, 0xFD5, 0xFD9, 0x1000, 0x102B, 0x102D,
232
+ 0x1031, 0x1032, 0x1038, 0x1039, 0x103B, 0x103D, 0x103F, 0x1040, 0x104A, 0x1050,
233
+ 0x1056, 0x1058, 0x105A, 0x105E, 0x1061, 0x1062, 0x1065, 0x1067, 0x106E, 0x1071,
234
+ 0x1075, 0x1082, 0x1083, 0x1085, 0x1087, 0x108D, 0x108E, 0x108F, 0x1090, 0x109A,
235
+ 0x109D, 0x109E, 0x10A0, 0x10D0, 0x10FB, 0x1100, 0x124A, 0x1250, 0x1258, 0x125A,
236
+ 0x1260, 0x128A, 0x1290, 0x12B2, 0x12B8, 0x12C0, 0x12C2, 0x12C8, 0x12D8, 0x1312,
237
+ 0x1318, 0x135D, 0x1360, 0x1361, 0x1369, 0x1380, 0x1390, 0x13A0, 0x1400, 0x1401,
238
+ 0x166D, 0x166F, 0x1680, 0x1681, 0x169B, 0x16A0, 0x16EB, 0x16EE, 0x1700, 0x170E,
239
+ 0x1712, 0x1720, 0x1732, 0x1735, 0x1740, 0x1752, 0x1760, 0x176E, 0x1772, 0x1780,
240
+ 0x17B4, 0x17B6, 0x17B7, 0x17BE, 0x17C6, 0x17C7, 0x17C9, 0x17D4, 0x17D7, 0x17D8,
241
+ 0x17DB, 0x17DC, 0x17DD, 0x17E0, 0x17F0, 0x1800, 0x1806, 0x1807, 0x180B, 0x180E,
242
+ 0x1810, 0x1820, 0x1843, 0x1844, 0x1880, 0x18A9, 0x18B0, 0x1900, 0x1920, 0x1923,
243
+ 0x1927, 0x1929, 0x1930, 0x1932, 0x1933, 0x1939, 0x1940, 0x1944, 0x1946, 0x1950,
244
+ 0x1970, 0x1980, 0x19B0, 0x19C1, 0x19C8, 0x19D0, 0x19DA, 0x19DE, 0x1A00, 0x1A17,
245
+ 0x1A19, 0x1A1E, 0x1A20, 0x1A55, 0x1A58, 0x1A60, 0x1A63, 0x1A65, 0x1A6D, 0x1A73,
246
+ 0x1A7F, 0x1A80, 0x1A90, 0x1AA0, 0x1AA7, 0x1AA8, 0x1B00, 0x1B04, 0x1B05, 0x1B34,
247
+ 0x1B36, 0x1B3B, 0x1B3D, 0x1B42, 0x1B43, 0x1B45, 0x1B50, 0x1B5A, 0x1B61, 0x1B6B,
248
+ 0x1B74, 0x1B80, 0x1B82, 0x1B83, 0x1BA1, 0x1BA2, 0x1BA6, 0x1BA8, 0x1BAA, 0x1BAE,
249
+ 0x1BB0, 0x1BC0, 0x1BE6, 0x1BE8, 0x1BEA, 0x1BED, 0x1BEF, 0x1BF2, 0x1BFC, 0x1C00,
250
+ 0x1C24, 0x1C2C, 0x1C34, 0x1C36, 0x1C3B, 0x1C40, 0x1C4D, 0x1C50, 0x1C5A, 0x1C78,
251
+ 0x1C7E, 0x1CD0, 0x1CD3, 0x1CD4, 0x1CE1, 0x1CE2, 0x1CE9, 0x1CED, 0x1CEE, 0x1CF2,
252
+ 0x1D00, 0x1D2C, 0x1D62, 0x1D78, 0x1D79, 0x1D9B, 0x1DC0, 0x1DFC, 0x1E00, 0x1E95,
253
+ 0x1E9E, 0x1EFF, 0x1F08, 0x1F10, 0x1F18, 0x1F20, 0x1F28, 0x1F30, 0x1F38, 0x1F40,
254
+ 0x1F48, 0x1F50, 0x1F59, 0x1F5B, 0x1F5D, 0x1F5F, 0x1F60, 0x1F68, 0x1F70, 0x1F80,
255
+ 0x1F88, 0x1F90, 0x1F98, 0x1FA0, 0x1FA8, 0x1FB0, 0x1FB6, 0x1FB8, 0x1FBC, 0x1FBD,
256
+ 0x1FBE, 0x1FBF, 0x1FC2, 0x1FC6, 0x1FC8, 0x1FCC, 0x1FCD, 0x1FD0, 0x1FD6, 0x1FD8,
257
+ 0x1FDD, 0x1FE0, 0x1FE8, 0x1FED, 0x1FF2, 0x1FF6, 0x1FF8, 0x1FFC, 0x1FFD, 0x2000,
258
+ 0x200B, 0x2010, 0x2016, 0x2018, 0x2019, 0x201A, 0x201B, 0x201D, 0x201E, 0x201F,
259
+ 0x2020, 0x2028, 0x202A, 0x202F, 0x2030, 0x2039, 0x203B, 0x203F, 0x2041, 0x2044,
260
+ 0x2045, 0x2046, 0x2047, 0x2052, 0x2053, 0x2054, 0x2055, 0x205F, 0x2060, 0x206A,
261
+ 0x2070, 0x2074, 0x207A, 0x207D, 0x207E, 0x207F, 0x2080, 0x208A, 0x208D, 0x2090,
262
+ 0x20A0, 0x20D0, 0x20DD, 0x20E1, 0x20E2, 0x20E5, 0x2100, 0x2102, 0x2103, 0x2107,
263
+ 0x2108, 0x210A, 0x210B, 0x210E, 0x2110, 0x2113, 0x2114, 0x2115, 0x2116, 0x2118,
264
+ 0x2119, 0x211E, 0x2124, 0x212A, 0x212E, 0x2130, 0x2134, 0x2135, 0x2139, 0x213A,
265
+ 0x213C, 0x213E, 0x2140, 0x2145, 0x2146, 0x214A, 0x214C, 0x214E, 0x2150, 0x2160,
266
+ 0x2183, 0x2185, 0x2189, 0x2190, 0x2195, 0x219A, 0x219C, 0x21A0, 0x21A1, 0x21A3,
267
+ 0x21A4, 0x21A6, 0x21A7, 0x21AE, 0x21AF, 0x21CE, 0x21D0, 0x21D2, 0x21D5, 0x21F4,
268
+ 0x2300, 0x2308, 0x230C, 0x2320, 0x2322, 0x2329, 0x232B, 0x237C, 0x237D, 0x239B,
269
+ 0x23B4, 0x23DC, 0x23E2, 0x2400, 0x2440, 0x2460, 0x249C, 0x24EA, 0x2500, 0x25B7,
270
+ 0x25B8, 0x25C1, 0x25C2, 0x25F8, 0x2600, 0x266F, 0x2670, 0x2701, 0x2768, 0x2776,
271
+ 0x2794, 0x27C0, 0x27C5, 0x27C7, 0x27CC, 0x27CE, 0x27E6, 0x27F0, 0x2800, 0x2900,
272
+ 0x2983, 0x2999, 0x29D8, 0x29DC, 0x29FC, 0x29FE, 0x2B00, 0x2B30, 0x2B45, 0x2B47,
273
+ 0x2B50, 0x2C00, 0x2C30, 0x2C60, 0x2C62, 0x2C65, 0x2C67, 0x2C6D, 0x2C71, 0x2C73,
274
+ 0x2C75, 0x2C76, 0x2C7D, 0x2C7E, 0x2C81, 0x2CE3, 0x2CE5, 0x2CEB, 0x2CEF, 0x2CF9,
275
+ 0x2CFD, 0x2CFE, 0x2D00, 0x2D30, 0x2D6F, 0x2D7F, 0x2D80, 0x2DA0, 0x2DA8, 0x2DB0,
276
+ 0x2DB8, 0x2DC0, 0x2DC8, 0x2DD0, 0x2DD8, 0x2DE0, 0x2E00, 0x2E02, 0x2E06, 0x2E09,
277
+ 0x2E0A, 0x2E0B, 0x2E0C, 0x2E0D, 0x2E0E, 0x2E17, 0x2E18, 0x2E1A, 0x2E1B, 0x2E1C,
278
+ 0x2E1D, 0x2E1E, 0x2E20, 0x2E21, 0x2E22, 0x2E23, 0x2E24, 0x2E25, 0x2E26, 0x2E27,
279
+ 0x2E28, 0x2E29, 0x2E2A, 0x2E2F, 0x2E30, 0x2E80, 0x2E9B, 0x2F00, 0x2FF0, 0x3000,
280
+ 0x3001, 0x3004, 0x3005, 0x3006, 0x3007, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C,
281
+ 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0x3012, 0x3014, 0x3015, 0x3016, 0x3017,
282
+ 0x3018, 0x3019, 0x301A, 0x301B, 0x301C, 0x301D, 0x301E, 0x3020, 0x3021, 0x302A,
283
+ 0x3030, 0x3031, 0x3036, 0x3038, 0x303B, 0x303C, 0x303D, 0x303E, 0x3041, 0x3099,
284
+ 0x309B, 0x309D, 0x309F, 0x30A1, 0x30FB, 0x30FC, 0x30FF, 0x3105, 0x3131, 0x3190,
285
+ 0x3192, 0x3196, 0x31A0, 0x31C0, 0x31F0, 0x3200, 0x3220, 0x322A, 0x3251, 0x3260,
286
+ 0x3280, 0x328A, 0x32B1, 0x32C0, 0x3300, 0x3400, 0x4DC0, 0x4E00, 0xA000, 0xA015,
287
+ 0xA016, 0xA490, 0xA4D0, 0xA4F8, 0xA4FE, 0xA500, 0xA60C, 0xA60D, 0xA610, 0xA620,
288
+ 0xA62A, 0xA640, 0xA641, 0xA642, 0xA643, 0xA644, 0xA645, 0xA646, 0xA647, 0xA648,
289
+ 0xA649, 0xA64A, 0xA64B, 0xA64C, 0xA64D, 0xA64E, 0xA64F, 0xA650, 0xA651, 0xA652,
290
+ 0xA653, 0xA654, 0xA655, 0xA656, 0xA657, 0xA658, 0xA659, 0xA65A, 0xA65B, 0xA65C,
291
+ 0xA65D, 0xA65E, 0xA65F, 0xA660, 0xA661, 0xA662, 0xA663, 0xA664, 0xA665, 0xA666,
292
+ 0xA667, 0xA668, 0xA669, 0xA66A, 0xA66B, 0xA66C, 0xA66D, 0xA66E, 0xA66F, 0xA670,
293
+ 0xA673, 0xA67C, 0xA67E, 0xA67F, 0xA680, 0xA681, 0xA682, 0xA683, 0xA684, 0xA685,
294
+ 0xA686, 0xA687, 0xA688, 0xA689, 0xA68A, 0xA68B, 0xA68C, 0xA68D, 0xA68E, 0xA68F,
295
+ 0xA690, 0xA691, 0xA692, 0xA693, 0xA694, 0xA695, 0xA696, 0xA697, 0xA6A0, 0xA6E6,
296
+ 0xA6F0, 0xA6F2, 0xA700, 0xA717, 0xA720, 0xA722, 0xA72F, 0xA732, 0xA733, 0xA734,
297
+ 0xA735, 0xA736, 0xA737, 0xA738, 0xA739, 0xA73A, 0xA73B, 0xA73C, 0xA73D, 0xA73E,
298
+ 0xA73F, 0xA740, 0xA741, 0xA742, 0xA743, 0xA744, 0xA745, 0xA746, 0xA747, 0xA748,
299
+ 0xA749, 0xA74A, 0xA74B, 0xA74C, 0xA74D, 0xA74E, 0xA74F, 0xA750, 0xA751, 0xA752,
300
+ 0xA753, 0xA754, 0xA755, 0xA756, 0xA757, 0xA758, 0xA759, 0xA75A, 0xA75B, 0xA75C,
301
+ 0xA75D, 0xA75E, 0xA75F, 0xA760, 0xA761, 0xA762, 0xA763, 0xA764, 0xA765, 0xA766,
302
+ 0xA767, 0xA768, 0xA769, 0xA76A, 0xA76B, 0xA76C, 0xA76D, 0xA76E, 0xA76F, 0xA770,
303
+ 0xA771, 0xA779, 0xA77D, 0xA77F, 0xA780, 0xA781, 0xA782, 0xA783, 0xA784, 0xA785,
304
+ 0xA786, 0xA787, 0xA788, 0xA789, 0xA78B, 0xA790, 0xA7A0, 0xA7FA, 0xA7FB, 0xA802,
305
+ 0xA803, 0xA806, 0xA807, 0xA80B, 0xA80C, 0xA823, 0xA825, 0xA827, 0xA828, 0xA830,
306
+ 0xA836, 0xA838, 0xA840, 0xA874, 0xA880, 0xA882, 0xA8B4, 0xA8C4, 0xA8CE, 0xA8D0,
307
+ 0xA8E0, 0xA8F2, 0xA8F8, 0xA8FB, 0xA900, 0xA90A, 0xA926, 0xA92E, 0xA930, 0xA947,
308
+ 0xA952, 0xA95F, 0xA960, 0xA980, 0xA983, 0xA984, 0xA9B3, 0xA9B4, 0xA9B6, 0xA9BA,
309
+ 0xA9BC, 0xA9BD, 0xA9C1, 0xA9CF, 0xA9D0, 0xA9DE, 0xAA00, 0xAA29, 0xAA2F, 0xAA31,
310
+ 0xAA33, 0xAA35, 0xAA40, 0xAA43, 0xAA44, 0xAA4C, 0xAA50, 0xAA5C, 0xAA60, 0xAA70,
311
+ 0xAA71, 0xAA77, 0xAA7A, 0xAA80, 0xAAB0, 0xAAB2, 0xAAB5, 0xAAB7, 0xAAB9, 0xAABE,
312
+ 0xAAC0, 0xAADB, 0xAADD, 0xAADE, 0xAB01, 0xAB09, 0xAB11, 0xAB20, 0xAB28, 0xABC0,
313
+ 0xABE3, 0xABE5, 0xABE6, 0xABE8, 0xABE9, 0xABEB, 0xABEC, 0xABED, 0xABF0, 0xAC00,
314
+ 0xD7B0, 0xD7CB, 0xD800, 0xE000, 0xF900, 0xFA30, 0xFA70, 0xFB00, 0xFB13, 0xFB1D,
315
+ 0xFB1F, 0xFB29, 0xFB2A, 0xFB38, 0xFB3E, 0xFB40, 0xFB43, 0xFB46, 0xFBB2, 0xFBD3,
316
+ 0xFD3E, 0xFD50, 0xFD92, 0xFDF0, 0xFDFC, 0xFE00, 0xFE10, 0xFE17, 0xFE18, 0xFE19,
317
+ 0xFE20, 0xFE30, 0xFE31, 0xFE33, 0xFE35, 0xFE45, 0xFE47, 0xFE49, 0xFE4D, 0xFE50,
318
+ 0xFE54, 0xFE58, 0xFE59, 0xFE5A, 0xFE5B, 0xFE5C, 0xFE5D, 0xFE5E, 0xFE5F, 0xFE62,
319
+ 0xFE64, 0xFE68, 0xFE6A, 0xFE70, 0xFE76, 0xFEFF, 0xFF01, 0xFF04, 0xFF05, 0xFF08,
320
+ 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF10, 0xFF1A, 0xFF1C, 0xFF1F,
321
+ 0xFF21, 0xFF3B, 0xFF3C, 0xFF3D, 0xFF3E, 0xFF3F, 0xFF40, 0xFF41, 0xFF5B, 0xFF5C,
322
+ 0xFF5D, 0xFF5E, 0xFF5F, 0xFF60, 0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF66, 0xFF70,
323
+ 0xFF71, 0xFF9E, 0xFFA0, 0xFFC2, 0xFFCA, 0xFFD2, 0xFFDA, 0xFFE0, 0xFFE2, 0xFFE3,
324
+ 0xFFE4, 0xFFE5, 0xFFE8, 0xFFE9, 0xFFED, 0xFFF9, 0xFFFC
325
+ } };
326
+
327
+ static const std::tr1::array<uint16_t, 2654> kCategoryValues = { {
328
+ 0x3EE, 0x201, 0x3F3, 0x2, 0x3F4, 0x1, 0x3F5, 0x2, 0x3F6, 0x19,
329
+ 0x3F7, 0x1, 0x3F8, 0x2, 0x3FA, 0x1, 0x3FC, 0x2, 0x42F, 0x1,
330
+ 0x45F, 0x2, 0x460, 0x1, 0x461, 0x2, 0x462, 0x1, 0x463, 0x2,
331
+ 0x464, 0x1, 0x465, 0x2, 0x466, 0x1, 0x467, 0x2, 0x468, 0x1,
332
+ 0x469, 0x2, 0x46A, 0x1, 0x46B, 0x2, 0x46C, 0x1, 0x46D, 0x2,
333
+ 0x46E, 0x1, 0x46F, 0x2, 0x470, 0x1, 0x471, 0x2, 0x472, 0x1,
334
+ 0x473, 0x2, 0x474, 0x1, 0x475, 0x2, 0x476, 0x1, 0x477, 0x2,
335
+ 0x478, 0x1, 0x479, 0x2, 0x47A, 0x1, 0x47B, 0x2, 0x47C, 0x1,
336
+ 0x47D, 0x2, 0x47E, 0x1, 0x47F, 0x2, 0x480, 0x1, 0x481, 0x2,
337
+ 0x482, 0x1C, 0x487, 0x6, 0x489, 0x7, 0x4BF, 0x201, 0x4C1, 0x1,
338
+ 0x4CD, 0x102, 0x4CF, 0x2, 0x527, 0x201, 0x556, 0x1, 0x559, 0x4,
339
+ 0x55F, 0x18, 0x587, 0x2, 0x58A, 0x1814, 0x5BD, 0x6, 0x5BE, 0x14,
340
+ 0x5BF, 0x6, 0x5C0, 0x18, 0x5C2, 0x6, 0x5C3, 0x18, 0x5C5, 0x6,
341
+ 0x5C7, 0x618, 0x5EA, 0x5, 0x5F2, 0x5, 0x5F4, 0x18, 0x603, 0x10,
342
+ 0x608, 0x19, 0x60A, 0x18, 0x60B, 0x1A, 0x60D, 0x18, 0x60F, 0x1C,
343
+ 0x61A, 0x6, 0x61B, 0x18, 0x61F, 0x18, 0x63F, 0x5, 0x640, 0x4,
344
+ 0x64A, 0x5, 0x65F, 0x6, 0x669, 0x9, 0x66D, 0x18, 0x66F, 0x5,
345
+ 0x670, 0x6, 0x6D3, 0x5, 0x6D5, 0x518, 0x6DC, 0x6, 0x6DE, 0x101C,
346
+ 0x6E4, 0x6, 0x6E6, 0x4, 0x6E8, 0x6, 0x6E9, 0x1C, 0x6ED, 0x6,
347
+ 0x6EF, 0x5, 0x6F9, 0x9, 0x6FC, 0x5, 0x6FE, 0x1C, 0x6FF, 0x5,
348
+ 0x70D, 0x18, 0x70F, 0x10, 0x710, 0x5, 0x711, 0x6, 0x72F, 0x5,
349
+ 0x74A, 0x6, 0x7A5, 0x5, 0x7B0, 0x6, 0x7B1, 0x5, 0x7C9, 0x9,
350
+ 0x7EA, 0x5, 0x7F3, 0x6, 0x7F5, 0x4, 0x7F6, 0x1C, 0x7F9, 0x18,
351
+ 0x7FA, 0x4, 0x815, 0x5, 0x819, 0x6, 0x81A, 0x4, 0x823, 0x6,
352
+ 0x824, 0x4, 0x827, 0x6, 0x828, 0x4, 0x82D, 0x6, 0x83E, 0x18,
353
+ 0x858, 0x5, 0x85B, 0x6, 0x85E, 0x18, 0x902, 0x6, 0x903, 0x8,
354
+ 0x939, 0x5, 0x93A, 0x6, 0x93B, 0x8, 0x93C, 0x6, 0x93D, 0x5,
355
+ 0x940, 0x8, 0x948, 0x6, 0x94C, 0x8, 0x94D, 0x6, 0x94F, 0x8,
356
+ 0x950, 0x5, 0x957, 0x6, 0x961, 0x5, 0x963, 0x6, 0x965, 0x18,
357
+ 0x96F, 0x9, 0x971, 0x418, 0x977, 0x5, 0x97F, 0x5, 0x981, 0x6,
358
+ 0x983, 0x8, 0x98C, 0x5, 0x990, 0x5, 0x9A8, 0x5, 0x9B0, 0x5,
359
+ 0x9B2, 0x5, 0x9B9, 0x5, 0x9BD, 0x506, 0x9C0, 0x8, 0x9C4, 0x6,
360
+ 0x9C8, 0x8, 0x9CC, 0x8, 0x9CE, 0x605, 0x9D7, 0x8, 0x9DD, 0x5,
361
+ 0x9E1, 0x5, 0x9E3, 0x6, 0x9EF, 0x9, 0x9F1, 0x5, 0x9F3, 0x1A,
362
+ 0x9F9, 0xB, 0x9FB, 0x1A1C, 0xA02, 0x6, 0xA03, 0x8, 0xA0A, 0x5,
363
+ 0xA10, 0x5, 0xA28, 0x5, 0xA30, 0x5, 0xA33, 0x5, 0xA36, 0x5,
364
+ 0xA39, 0x5, 0xA3C, 0x6, 0xA40, 0x8, 0xA42, 0x6, 0xA48, 0x6,
365
+ 0xA4D, 0x6, 0xA51, 0x6, 0xA5C, 0x5, 0xA5E, 0x5, 0xA6F, 0x9,
366
+ 0xA71, 0x6, 0xA74, 0x5, 0xA75, 0x6, 0xA82, 0x6, 0xA83, 0x8,
367
+ 0xA8D, 0x5, 0xA91, 0x5, 0xAA8, 0x5, 0xAB0, 0x5, 0xAB3, 0x5,
368
+ 0xAB9, 0x5, 0xABD, 0x506, 0xAC0, 0x8, 0xAC5, 0x6, 0xAC8, 0x6,
369
+ 0xAC9, 0x8, 0xACC, 0x8, 0xACD, 0x6, 0xAD0, 0x5, 0xAE1, 0x5,
370
+ 0xAE3, 0x6, 0xAEF, 0x9, 0xAF1, 0x1A, 0xB01, 0x6, 0xB03, 0x8,
371
+ 0xB0C, 0x5, 0xB10, 0x5, 0xB28, 0x5, 0xB30, 0x5, 0xB33, 0x5,
372
+ 0xB39, 0x5, 0xB3C, 0x6, 0xB3D, 0x5, 0xB3E, 0x8, 0xB3F, 0x6,
373
+ 0xB40, 0x8, 0xB44, 0x6, 0xB48, 0x8, 0xB4C, 0x8, 0xB4D, 0x6,
374
+ 0xB57, 0x806, 0xB5D, 0x5, 0xB61, 0x5, 0xB63, 0x6, 0xB6F, 0x9,
375
+ 0xB71, 0x51C, 0xB77, 0xB, 0xB83, 0x506, 0xB8A, 0x5, 0xB90, 0x5,
376
+ 0xB95, 0x5, 0xB9A, 0x5, 0xB9C, 0x5, 0xB9F, 0x5, 0xBA4, 0x5,
377
+ 0xBAA, 0x5, 0xBB9, 0x5, 0xBBF, 0x8, 0xBC0, 0x6, 0xBC2, 0x8,
378
+ 0xBC8, 0x8, 0xBCC, 0x8, 0xBCD, 0x6, 0xBD0, 0x5, 0xBD7, 0x8,
379
+ 0xBEF, 0x9, 0xBF2, 0xB, 0xBF8, 0x1C, 0xBFA, 0x1A1C, 0xC03, 0x8,
380
+ 0xC0C, 0x5, 0xC10, 0x5, 0xC28, 0x5, 0xC33, 0x5, 0xC39, 0x5,
381
+ 0xC3D, 0x5, 0xC40, 0x6, 0xC44, 0x8, 0xC48, 0x6, 0xC4D, 0x6,
382
+ 0xC56, 0x6, 0xC59, 0x5, 0xC61, 0x5, 0xC63, 0x6, 0xC6F, 0x9,
383
+ 0xC7E, 0xB, 0xC7F, 0x1C, 0xC83, 0x8, 0xC8C, 0x5, 0xC90, 0x5,
384
+ 0xCA8, 0x5, 0xCB3, 0x5, 0xCB9, 0x5, 0xCBC, 0x6, 0xCBD, 0x5,
385
+ 0xCBE, 0x8, 0xCBF, 0x6, 0xCC4, 0x8, 0xCC6, 0x6, 0xCC8, 0x8,
386
+ 0xCCB, 0x8, 0xCCD, 0x6, 0xCD6, 0x8, 0xCDE, 0x5, 0xCE1, 0x5,
387
+ 0xCE3, 0x6, 0xCEF, 0x9, 0xCF2, 0x5, 0xD03, 0x8, 0xD0C, 0x5,
388
+ 0xD10, 0x5, 0xD3A, 0x5, 0xD3D, 0x5, 0xD40, 0x8, 0xD44, 0x6,
389
+ 0xD48, 0x8, 0xD4C, 0x8, 0xD4E, 0x605, 0xD57, 0x8, 0xD61, 0x5,
390
+ 0xD63, 0x6, 0xD6F, 0x9, 0xD75, 0xB, 0xD79, 0x1C, 0xD7F, 0x5,
391
+ 0xD83, 0x8, 0xD96, 0x5, 0xDB1, 0x5, 0xDBB, 0x5, 0xDBD, 0x5,
392
+ 0xDC6, 0x5, 0xDCA, 0x6, 0xDD1, 0x8, 0xDD4, 0x6, 0xDD6, 0x6,
393
+ 0xDDF, 0x8, 0xDF3, 0x8, 0xDF4, 0x18, 0xE30, 0x5, 0xE31, 0x6,
394
+ 0xE33, 0x5, 0xE3A, 0x6, 0xE3F, 0x1A, 0xE45, 0x5, 0xE46, 0x4,
395
+ 0xE4E, 0x6, 0xE4F, 0x18, 0xE59, 0x9, 0xE5B, 0x18, 0xE82, 0x5,
396
+ 0xE84, 0x5, 0xE88, 0x5, 0xE8A, 0x5, 0xE8D, 0x5, 0xE97, 0x5,
397
+ 0xE9F, 0x5, 0xEA3, 0x5, 0xEA5, 0x5, 0xEA7, 0x5, 0xEAB, 0x5,
398
+ 0xEB0, 0x5, 0xEB1, 0x6, 0xEB3, 0x5, 0xEB9, 0x6, 0xEBC, 0x6,
399
+ 0xEBD, 0x5, 0xEC4, 0x5, 0xEC6, 0x4, 0xECD, 0x6, 0xED9, 0x9,
400
+ 0xEDD, 0x5, 0xF00, 0x5, 0xF03, 0x1C, 0xF12, 0x18, 0xF17, 0x1C,
401
+ 0xF19, 0x6, 0xF1F, 0x1C, 0xF29, 0x9, 0xF33, 0xB, 0xF34, 0x1C,
402
+ 0xF35, 0x6, 0xF36, 0x1C, 0xF37, 0x6, 0xF38, 0x1C, 0xF39, 0x6,
403
+ 0xF3A, 0x15, 0xF3B, 0x16, 0xF3C, 0x15, 0xF3D, 0x16, 0xF3F, 0x8,
404
+ 0xF47, 0x5, 0xF6C, 0x5, 0xF7E, 0x6, 0xF7F, 0x8, 0xF84, 0x6,
405
+ 0xF85, 0x18, 0xF87, 0x6, 0xF8C, 0x5, 0xF97, 0x6, 0xFBC, 0x6,
406
+ 0xFC5, 0x1C, 0xFC6, 0x6, 0xFCC, 0x1C, 0xFCF, 0x1C, 0xFD4, 0x18,
407
+ 0xFD8, 0x1C, 0xFDA, 0x18, 0x102A, 0x5, 0x102C, 0x8, 0x1030, 0x6,
408
+ 0x1031, 0x8, 0x1037, 0x6, 0x1038, 0x8, 0x103A, 0x6, 0x103C, 0x8,
409
+ 0x103E, 0x6, 0x103F, 0x5, 0x1049, 0x9, 0x104F, 0x18, 0x1055, 0x5,
410
+ 0x1057, 0x8, 0x1059, 0x6, 0x105D, 0x5, 0x1060, 0x6, 0x1061, 0x5,
411
+ 0x1064, 0x8, 0x1066, 0x5, 0x106D, 0x8, 0x1070, 0x5, 0x1074, 0x6,
412
+ 0x1081, 0x5, 0x1082, 0x6, 0x1084, 0x8, 0x1086, 0x6, 0x108C, 0x8,
413
+ 0x108D, 0x6, 0x108E, 0x5, 0x108F, 0x8, 0x1099, 0x9, 0x109C, 0x8,
414
+ 0x109D, 0x6, 0x109F, 0x1C, 0x10C5, 0x1, 0x10FA, 0x5, 0x10FC, 0x1804,
415
+ 0x1248, 0x5, 0x124D, 0x5, 0x1256, 0x5, 0x1258, 0x5, 0x125D, 0x5,
416
+ 0x1288, 0x5, 0x128D, 0x5, 0x12B0, 0x5, 0x12B5, 0x5, 0x12BE, 0x5,
417
+ 0x12C0, 0x5, 0x12C5, 0x5, 0x12D6, 0x5, 0x1310, 0x5, 0x1315, 0x5,
418
+ 0x135A, 0x5, 0x135F, 0x6, 0x1360, 0x1C, 0x1368, 0x18, 0x137C, 0xB,
419
+ 0x138F, 0x5, 0x1399, 0x1C, 0x13F4, 0x5, 0x1400, 0x14, 0x166C, 0x5,
420
+ 0x166E, 0x18, 0x167F, 0x5, 0x1680, 0xC, 0x169A, 0x5, 0x169C, 0x1516,
421
+ 0x16EA, 0x5, 0x16ED, 0x18, 0x16F0, 0xA, 0x170C, 0x5, 0x1711, 0x5,
422
+ 0x1714, 0x6, 0x1731, 0x5, 0x1734, 0x6, 0x1736, 0x18, 0x1751, 0x5,
423
+ 0x1753, 0x6, 0x176C, 0x5, 0x1770, 0x5, 0x1773, 0x6, 0x17B3, 0x5,
424
+ 0x17B5, 0x10, 0x17B6, 0x8, 0x17BD, 0x6, 0x17C5, 0x8, 0x17C6, 0x6,
425
+ 0x17C8, 0x8, 0x17D3, 0x6, 0x17D6, 0x18, 0x17D7, 0x4, 0x17DA, 0x18,
426
+ 0x17DB, 0x1A, 0x17DC, 0x5, 0x17DD, 0x6, 0x17E9, 0x9, 0x17F9, 0xB,
427
+ 0x1805, 0x18, 0x1806, 0x14, 0x180A, 0x18, 0x180D, 0x6, 0x180E, 0xC,
428
+ 0x1819, 0x9, 0x1842, 0x5, 0x1843, 0x4, 0x1877, 0x5, 0x18A8, 0x5,
429
+ 0x18AA, 0x605, 0x18F5, 0x5, 0x191C, 0x5, 0x1922, 0x6, 0x1926, 0x8,
430
+ 0x1928, 0x6, 0x192B, 0x8, 0x1931, 0x8, 0x1932, 0x6, 0x1938, 0x8,
431
+ 0x193B, 0x6, 0x1940, 0x1C, 0x1945, 0x18, 0x194F, 0x9, 0x196D, 0x5,
432
+ 0x1974, 0x5, 0x19AB, 0x5, 0x19C0, 0x8, 0x19C7, 0x5, 0x19C9, 0x8,
433
+ 0x19D9, 0x9, 0x19DA, 0xB, 0x19FF, 0x1C, 0x1A16, 0x5, 0x1A18, 0x6,
434
+ 0x1A1B, 0x8, 0x1A1F, 0x18, 0x1A54, 0x5, 0x1A57, 0x806, 0x1A5E, 0x6,
435
+ 0x1A62, 0x806, 0x1A64, 0x8, 0x1A6C, 0x6, 0x1A72, 0x8, 0x1A7C, 0x6,
436
+ 0x1A7F, 0x6, 0x1A89, 0x9, 0x1A99, 0x9, 0x1AA6, 0x18, 0x1AA7, 0x4,
437
+ 0x1AAD, 0x18, 0x1B03, 0x6, 0x1B04, 0x8, 0x1B33, 0x5, 0x1B35, 0x806,
438
+ 0x1B3A, 0x6, 0x1B3C, 0x806, 0x1B41, 0x8, 0x1B42, 0x6, 0x1B44, 0x8,
439
+ 0x1B4B, 0x5, 0x1B59, 0x9, 0x1B60, 0x18, 0x1B6A, 0x1C, 0x1B73, 0x6,
440
+ 0x1B7C, 0x1C, 0x1B81, 0x6, 0x1B82, 0x8, 0x1BA0, 0x5, 0x1BA1, 0x8,
441
+ 0x1BA5, 0x6, 0x1BA7, 0x8, 0x1BA9, 0x6, 0x1BAA, 0x8, 0x1BAF, 0x5,
442
+ 0x1BB9, 0x9, 0x1BE5, 0x5, 0x1BE7, 0x806, 0x1BE9, 0x6, 0x1BEC, 0x8,
443
+ 0x1BEE, 0x608, 0x1BF1, 0x6, 0x1BF3, 0x8, 0x1BFF, 0x18, 0x1C23, 0x5,
444
+ 0x1C2B, 0x8, 0x1C33, 0x6, 0x1C35, 0x8, 0x1C37, 0x6, 0x1C3F, 0x18,
445
+ 0x1C49, 0x9, 0x1C4F, 0x5, 0x1C59, 0x9, 0x1C77, 0x5, 0x1C7D, 0x4,
446
+ 0x1C7F, 0x18, 0x1CD2, 0x6, 0x1CD3, 0x18, 0x1CE0, 0x6, 0x1CE1, 0x8,
447
+ 0x1CE8, 0x6, 0x1CEC, 0x5, 0x1CED, 0x6, 0x1CF1, 0x5, 0x1CF2, 0x8,
448
+ 0x1D2B, 0x2, 0x1D61, 0x4, 0x1D77, 0x2, 0x1D78, 0x4, 0x1D9A, 0x2,
449
+ 0x1DBF, 0x4, 0x1DE6, 0x6, 0x1DFF, 0x6, 0x1E94, 0x201, 0x1E9D, 0x2,
450
+ 0x1EFE, 0x201, 0x1F07, 0x2, 0x1F0F, 0x1, 0x1F15, 0x2, 0x1F1D, 0x1,
451
+ 0x1F27, 0x2, 0x1F2F, 0x1, 0x1F37, 0x2, 0x1F3F, 0x1, 0x1F45, 0x2,
452
+ 0x1F4D, 0x1, 0x1F57, 0x2, 0x1F59, 0x1, 0x1F5B, 0x1, 0x1F5D, 0x1,
453
+ 0x1F5F, 0x1, 0x1F67, 0x2, 0x1F6F, 0x1, 0x1F7D, 0x2, 0x1F87, 0x2,
454
+ 0x1F8F, 0x3, 0x1F97, 0x2, 0x1F9F, 0x3, 0x1FA7, 0x2, 0x1FAF, 0x3,
455
+ 0x1FB4, 0x2, 0x1FB7, 0x2, 0x1FBB, 0x1, 0x1FBC, 0x3, 0x1FBD, 0x1B,
456
+ 0x1FBE, 0x2, 0x1FC1, 0x1B, 0x1FC4, 0x2, 0x1FC7, 0x2, 0x1FCB, 0x1,
457
+ 0x1FCC, 0x3, 0x1FCF, 0x1B, 0x1FD3, 0x2, 0x1FD7, 0x2, 0x1FDB, 0x1,
458
+ 0x1FDF, 0x1B, 0x1FE7, 0x2, 0x1FEC, 0x1, 0x1FEF, 0x1B, 0x1FF4, 0x2,
459
+ 0x1FF7, 0x2, 0x1FFB, 0x1, 0x1FFC, 0x3, 0x1FFE, 0x1B, 0x200A, 0xC,
460
+ 0x200F, 0x10, 0x2015, 0x14, 0x2017, 0x18, 0x2018, 0x1D, 0x2019, 0x1E,
461
+ 0x201A, 0x15, 0x201C, 0x1D, 0x201D, 0x1E, 0x201E, 0x15, 0x201F, 0x1D,
462
+ 0x2027, 0x18, 0x2029, 0xE0D, 0x202E, 0x10, 0x202F, 0xC, 0x2038, 0x18,
463
+ 0x203A, 0x1D1E, 0x203E, 0x18, 0x2040, 0x17, 0x2043, 0x18, 0x2044, 0x19,
464
+ 0x2045, 0x15, 0x2046, 0x16, 0x2051, 0x18, 0x2052, 0x19, 0x2053, 0x18,
465
+ 0x2054, 0x17, 0x205E, 0x18, 0x205F, 0xC, 0x2064, 0x10, 0x206F, 0x10,
466
+ 0x2071, 0x40B, 0x2079, 0xB, 0x207C, 0x19, 0x207D, 0x15, 0x207E, 0x16,
467
+ 0x207F, 0x4, 0x2089, 0xB, 0x208C, 0x19, 0x208E, 0x1516, 0x209C, 0x4,
468
+ 0x20B9, 0x1A, 0x20DC, 0x6, 0x20E0, 0x7, 0x20E1, 0x6, 0x20E4, 0x7,
469
+ 0x20F0, 0x6, 0x2101, 0x1C, 0x2102, 0x1, 0x2106, 0x1C, 0x2107, 0x1,
470
+ 0x2109, 0x1C, 0x210A, 0x2, 0x210D, 0x1, 0x210F, 0x2, 0x2112, 0x1,
471
+ 0x2113, 0x2, 0x2114, 0x1C, 0x2115, 0x1, 0x2117, 0x1C, 0x2118, 0x19,
472
+ 0x211D, 0x1, 0x2123, 0x1C, 0x2129, 0x1C01, 0x212D, 0x1, 0x212F, 0x21C,
473
+ 0x2133, 0x1, 0x2134, 0x2, 0x2138, 0x5, 0x2139, 0x2, 0x213B, 0x1C,
474
+ 0x213D, 0x2, 0x213F, 0x1, 0x2144, 0x19, 0x2145, 0x1, 0x2149, 0x2,
475
+ 0x214B, 0x191C, 0x214D, 0x1C, 0x214F, 0x1C02, 0x215F, 0xB, 0x2182, 0xA,
476
+ 0x2184, 0x102, 0x2188, 0xA, 0x2189, 0xB, 0x2194, 0x19, 0x2199, 0x1C,
477
+ 0x219B, 0x19, 0x219F, 0x1C, 0x21A0, 0x19, 0x21A2, 0x1C, 0x21A3, 0x19,
478
+ 0x21A5, 0x1C, 0x21A6, 0x19, 0x21AD, 0x1C, 0x21AE, 0x19, 0x21CD, 0x1C,
479
+ 0x21CF, 0x19, 0x21D1, 0x1C, 0x21D4, 0x1C19, 0x21F3, 0x1C, 0x22FF, 0x19,
480
+ 0x2307, 0x1C, 0x230B, 0x19, 0x231F, 0x1C, 0x2321, 0x19, 0x2328, 0x1C,
481
+ 0x232A, 0x1516, 0x237B, 0x1C, 0x237C, 0x19, 0x239A, 0x1C, 0x23B3, 0x19,
482
+ 0x23DB, 0x1C, 0x23E1, 0x19, 0x23F3, 0x1C, 0x2426, 0x1C, 0x244A, 0x1C,
483
+ 0x249B, 0xB, 0x24E9, 0x1C, 0x24FF, 0xB, 0x25B6, 0x1C, 0x25B7, 0x19,
484
+ 0x25C0, 0x1C, 0x25C1, 0x19, 0x25F7, 0x1C, 0x25FF, 0x19, 0x266E, 0x1C,
485
+ 0x266F, 0x19, 0x26FF, 0x1C, 0x2767, 0x1C, 0x2775, 0x1615, 0x2793, 0xB,
486
+ 0x27BF, 0x1C, 0x27C4, 0x19, 0x27C6, 0x1516, 0x27CA, 0x19, 0x27CC, 0x19,
487
+ 0x27E5, 0x19, 0x27EF, 0x1615, 0x27FF, 0x19, 0x28FF, 0x1C, 0x2982, 0x19,
488
+ 0x2998, 0x1516, 0x29D7, 0x19, 0x29DB, 0x1615, 0x29FB, 0x19, 0x29FD, 0x1615,
489
+ 0x2AFF, 0x19, 0x2B2F, 0x1C, 0x2B44, 0x19, 0x2B46, 0x1C, 0x2B4C, 0x19,
490
+ 0x2B59, 0x1C, 0x2C2E, 0x1, 0x2C5E, 0x2, 0x2C61, 0x201, 0x2C64, 0x1,
491
+ 0x2C66, 0x2, 0x2C6C, 0x102, 0x2C70, 0x1, 0x2C72, 0x201, 0x2C74, 0x2,
492
+ 0x2C75, 0x1, 0x2C7C, 0x2, 0x2C7D, 0x4, 0x2C80, 0x1, 0x2CE2, 0x201,
493
+ 0x2CE4, 0x2, 0x2CEA, 0x1C, 0x2CEE, 0x102, 0x2CF1, 0x6, 0x2CFC, 0x18,
494
+ 0x2CFD, 0xB, 0x2CFF, 0x18, 0x2D25, 0x2, 0x2D65, 0x5, 0x2D70, 0x418,
495
+ 0x2D7F, 0x6, 0x2D96, 0x5, 0x2DA6, 0x5, 0x2DAE, 0x5, 0x2DB6, 0x5,
496
+ 0x2DBE, 0x5, 0x2DC6, 0x5, 0x2DCE, 0x5, 0x2DD6, 0x5, 0x2DDE, 0x5,
497
+ 0x2DFF, 0x6, 0x2E01, 0x18, 0x2E05, 0x1E1D, 0x2E08, 0x18, 0x2E09, 0x1D,
498
+ 0x2E0A, 0x1E, 0x2E0B, 0x18, 0x2E0C, 0x1D, 0x2E0D, 0x1E, 0x2E16, 0x18,
499
+ 0x2E17, 0x14, 0x2E19, 0x18, 0x2E1A, 0x14, 0x2E1B, 0x18, 0x2E1C, 0x1D,
500
+ 0x2E1D, 0x1E, 0x2E1F, 0x18, 0x2E20, 0x1D, 0x2E21, 0x1E, 0x2E22, 0x15,
501
+ 0x2E23, 0x16, 0x2E24, 0x15, 0x2E25, 0x16, 0x2E26, 0x15, 0x2E27, 0x16,
502
+ 0x2E28, 0x15, 0x2E29, 0x16, 0x2E2E, 0x18, 0x2E2F, 0x4, 0x2E31, 0x18,
503
+ 0x2E99, 0x1C, 0x2EF3, 0x1C, 0x2FD5, 0x1C, 0x2FFB, 0x1C, 0x3000, 0xC,
504
+ 0x3003, 0x18, 0x3004, 0x1C, 0x3005, 0x4, 0x3006, 0x5, 0x3007, 0xA,
505
+ 0x3008, 0x15, 0x3009, 0x16, 0x300A, 0x15, 0x300B, 0x16, 0x300C, 0x15,
506
+ 0x300D, 0x16, 0x300E, 0x15, 0x300F, 0x16, 0x3010, 0x15, 0x3011, 0x16,
507
+ 0x3013, 0x1C, 0x3014, 0x15, 0x3015, 0x16, 0x3016, 0x15, 0x3017, 0x16,
508
+ 0x3018, 0x15, 0x3019, 0x16, 0x301A, 0x15, 0x301B, 0x16, 0x301C, 0x14,
509
+ 0x301D, 0x15, 0x301F, 0x16, 0x3020, 0x1C, 0x3029, 0xA, 0x302F, 0x6,
510
+ 0x3030, 0x14, 0x3035, 0x4, 0x3037, 0x1C, 0x303A, 0xA, 0x303B, 0x4,
511
+ 0x303C, 0x5, 0x303D, 0x18, 0x303F, 0x1C, 0x3096, 0x5, 0x309A, 0x6,
512
+ 0x309C, 0x1B, 0x309E, 0x4, 0x30A0, 0x514, 0x30FA, 0x5, 0x30FB, 0x18,
513
+ 0x30FE, 0x4, 0x30FF, 0x5, 0x312D, 0x5, 0x318E, 0x5, 0x3191, 0x1C,
514
+ 0x3195, 0xB, 0x319F, 0x1C, 0x31BA, 0x5, 0x31E3, 0x1C, 0x31FF, 0x5,
515
+ 0x321E, 0x1C, 0x3229, 0xB, 0x3250, 0x1C, 0x325F, 0xB, 0x327F, 0x1C,
516
+ 0x3289, 0xB, 0x32B0, 0x1C, 0x32BF, 0xB, 0x32FE, 0x1C, 0x33FF, 0x1C,
517
+ 0x4DB5, 0x5, 0x4DFF, 0x1C, 0x9FCB, 0x5, 0xA014, 0x5, 0xA015, 0x4,
518
+ 0xA48C, 0x5, 0xA4C6, 0x1C, 0xA4F7, 0x5, 0xA4FD, 0x4, 0xA4FF, 0x18,
519
+ 0xA60B, 0x5, 0xA60C, 0x4, 0xA60F, 0x18, 0xA61F, 0x5, 0xA629, 0x9,
520
+ 0xA62B, 0x5, 0xA640, 0x1, 0xA641, 0x2, 0xA642, 0x1, 0xA643, 0x2,
521
+ 0xA644, 0x1, 0xA645, 0x2, 0xA646, 0x1, 0xA647, 0x2, 0xA648, 0x1,
522
+ 0xA649, 0x2, 0xA64A, 0x1, 0xA64B, 0x2, 0xA64C, 0x1, 0xA64D, 0x2,
523
+ 0xA64E, 0x1, 0xA64F, 0x2, 0xA650, 0x1, 0xA651, 0x2, 0xA652, 0x1,
524
+ 0xA653, 0x2, 0xA654, 0x1, 0xA655, 0x2, 0xA656, 0x1, 0xA657, 0x2,
525
+ 0xA658, 0x1, 0xA659, 0x2, 0xA65A, 0x1, 0xA65B, 0x2, 0xA65C, 0x1,
526
+ 0xA65D, 0x2, 0xA65E, 0x1, 0xA65F, 0x2, 0xA660, 0x1, 0xA661, 0x2,
527
+ 0xA662, 0x1, 0xA663, 0x2, 0xA664, 0x1, 0xA665, 0x2, 0xA666, 0x1,
528
+ 0xA667, 0x2, 0xA668, 0x1, 0xA669, 0x2, 0xA66A, 0x1, 0xA66B, 0x2,
529
+ 0xA66C, 0x1, 0xA66D, 0x2, 0xA66E, 0x5, 0xA66F, 0x6, 0xA672, 0x7,
530
+ 0xA673, 0x18, 0xA67D, 0x6, 0xA67E, 0x18, 0xA67F, 0x4, 0xA680, 0x1,
531
+ 0xA681, 0x2, 0xA682, 0x1, 0xA683, 0x2, 0xA684, 0x1, 0xA685, 0x2,
532
+ 0xA686, 0x1, 0xA687, 0x2, 0xA688, 0x1, 0xA689, 0x2, 0xA68A, 0x1,
533
+ 0xA68B, 0x2, 0xA68C, 0x1, 0xA68D, 0x2, 0xA68E, 0x1, 0xA68F, 0x2,
534
+ 0xA690, 0x1, 0xA691, 0x2, 0xA692, 0x1, 0xA693, 0x2, 0xA694, 0x1,
535
+ 0xA695, 0x2, 0xA696, 0x1, 0xA697, 0x2, 0xA6E5, 0x5, 0xA6EF, 0xA,
536
+ 0xA6F1, 0x6, 0xA6F7, 0x18, 0xA716, 0x1B, 0xA71F, 0x4, 0xA721, 0x1B,
537
+ 0xA72E, 0x201, 0xA731, 0x2, 0xA732, 0x1, 0xA733, 0x2, 0xA734, 0x1,
538
+ 0xA735, 0x2, 0xA736, 0x1, 0xA737, 0x2, 0xA738, 0x1, 0xA739, 0x2,
539
+ 0xA73A, 0x1, 0xA73B, 0x2, 0xA73C, 0x1, 0xA73D, 0x2, 0xA73E, 0x1,
540
+ 0xA73F, 0x2, 0xA740, 0x1, 0xA741, 0x2, 0xA742, 0x1, 0xA743, 0x2,
541
+ 0xA744, 0x1, 0xA745, 0x2, 0xA746, 0x1, 0xA747, 0x2, 0xA748, 0x1,
542
+ 0xA749, 0x2, 0xA74A, 0x1, 0xA74B, 0x2, 0xA74C, 0x1, 0xA74D, 0x2,
543
+ 0xA74E, 0x1, 0xA74F, 0x2, 0xA750, 0x1, 0xA751, 0x2, 0xA752, 0x1,
544
+ 0xA753, 0x2, 0xA754, 0x1, 0xA755, 0x2, 0xA756, 0x1, 0xA757, 0x2,
545
+ 0xA758, 0x1, 0xA759, 0x2, 0xA75A, 0x1, 0xA75B, 0x2, 0xA75C, 0x1,
546
+ 0xA75D, 0x2, 0xA75E, 0x1, 0xA75F, 0x2, 0xA760, 0x1, 0xA761, 0x2,
547
+ 0xA762, 0x1, 0xA763, 0x2, 0xA764, 0x1, 0xA765, 0x2, 0xA766, 0x1,
548
+ 0xA767, 0x2, 0xA768, 0x1, 0xA769, 0x2, 0xA76A, 0x1, 0xA76B, 0x2,
549
+ 0xA76C, 0x1, 0xA76D, 0x2, 0xA76E, 0x1, 0xA76F, 0x2, 0xA770, 0x4,
550
+ 0xA778, 0x2, 0xA77C, 0x102, 0xA77E, 0x1, 0xA77F, 0x2, 0xA780, 0x1,
551
+ 0xA781, 0x2, 0xA782, 0x1, 0xA783, 0x2, 0xA784, 0x1, 0xA785, 0x2,
552
+ 0xA786, 0x1, 0xA787, 0x2, 0xA788, 0x4, 0xA78A, 0x1B, 0xA78E, 0x102,
553
+ 0xA791, 0x201, 0xA7A9, 0x201, 0xA7FA, 0x2, 0xA801, 0x5, 0xA802, 0x6,
554
+ 0xA805, 0x5, 0xA806, 0x6, 0xA80A, 0x5, 0xA80B, 0x6, 0xA822, 0x5,
555
+ 0xA824, 0x8, 0xA826, 0x6, 0xA827, 0x8, 0xA82B, 0x1C, 0xA835, 0xB,
556
+ 0xA837, 0x1C, 0xA839, 0x1C1A, 0xA873, 0x5, 0xA877, 0x18, 0xA881, 0x8,
557
+ 0xA8B3, 0x5, 0xA8C3, 0x8, 0xA8C4, 0x6, 0xA8CF, 0x18, 0xA8D9, 0x9,
558
+ 0xA8F1, 0x6, 0xA8F7, 0x5, 0xA8FA, 0x18, 0xA8FB, 0x5, 0xA909, 0x9,
559
+ 0xA925, 0x5, 0xA92D, 0x6, 0xA92F, 0x18, 0xA946, 0x5, 0xA951, 0x6,
560
+ 0xA953, 0x8, 0xA95F, 0x18, 0xA97C, 0x5, 0xA982, 0x6, 0xA983, 0x8,
561
+ 0xA9B2, 0x5, 0xA9B3, 0x6, 0xA9B5, 0x8, 0xA9B9, 0x6, 0xA9BB, 0x8,
562
+ 0xA9BC, 0x6, 0xA9C0, 0x8, 0xA9CD, 0x18, 0xA9CF, 0x4, 0xA9D9, 0x9,
563
+ 0xA9DF, 0x18, 0xAA28, 0x5, 0xAA2E, 0x6, 0xAA30, 0x8, 0xAA32, 0x6,
564
+ 0xAA34, 0x8, 0xAA36, 0x6, 0xAA42, 0x5, 0xAA43, 0x6, 0xAA4B, 0x5,
565
+ 0xAA4D, 0x806, 0xAA59, 0x9, 0xAA5F, 0x18, 0xAA6F, 0x5, 0xAA70, 0x4,
566
+ 0xAA76, 0x5, 0xAA79, 0x1C, 0xAA7B, 0x805, 0xAAAF, 0x5, 0xAAB1, 0x506,
567
+ 0xAAB4, 0x6, 0xAAB6, 0x5, 0xAAB8, 0x6, 0xAABD, 0x5, 0xAABF, 0x6,
568
+ 0xAAC2, 0x605, 0xAADC, 0x5, 0xAADD, 0x4, 0xAADF, 0x18, 0xAB06, 0x5,
569
+ 0xAB0E, 0x5, 0xAB16, 0x5, 0xAB26, 0x5, 0xAB2E, 0x5, 0xABE2, 0x5,
570
+ 0xABE4, 0x8, 0xABE5, 0x6, 0xABE7, 0x8, 0xABE8, 0x6, 0xABEA, 0x8,
571
+ 0xABEB, 0x18, 0xABEC, 0x8, 0xABED, 0x6, 0xABF9, 0x9, 0xD7A3, 0x5,
572
+ 0xD7C6, 0x5, 0xD7FB, 0x5, 0xDFFF, 0x13, 0xF8FF, 0x12, 0xFA2D, 0x5,
573
+ 0xFA6D, 0x5, 0xFAD9, 0x5, 0xFB06, 0x2, 0xFB17, 0x2, 0xFB1E, 0x506,
574
+ 0xFB28, 0x5, 0xFB29, 0x19, 0xFB36, 0x5, 0xFB3C, 0x5, 0xFB3E, 0x5,
575
+ 0xFB41, 0x5, 0xFB44, 0x5, 0xFBB1, 0x5, 0xFBC1, 0x1B, 0xFD3D, 0x5,
576
+ 0xFD3F, 0x1615, 0xFD8F, 0x5, 0xFDC7, 0x5, 0xFDFB, 0x5, 0xFDFD, 0x1C1A,
577
+ 0xFE0F, 0x6, 0xFE16, 0x18, 0xFE17, 0x15, 0xFE18, 0x16, 0xFE19, 0x18,
578
+ 0xFE26, 0x6, 0xFE30, 0x18, 0xFE32, 0x14, 0xFE34, 0x17, 0xFE44, 0x1516,
579
+ 0xFE46, 0x18, 0xFE48, 0x1516, 0xFE4C, 0x18, 0xFE4F, 0x17, 0xFE52, 0x18,
580
+ 0xFE57, 0x18, 0xFE58, 0x14, 0xFE59, 0x15, 0xFE5A, 0x16, 0xFE5B, 0x15,
581
+ 0xFE5C, 0x16, 0xFE5D, 0x15, 0xFE5E, 0x16, 0xFE61, 0x18, 0xFE63, 0x1419,
582
+ 0xFE66, 0x19, 0xFE69, 0x1A18, 0xFE6B, 0x18, 0xFE74, 0x5, 0xFEFC, 0x5,
583
+ 0xFEFF, 0x10, 0xFF03, 0x18, 0xFF04, 0x1A, 0xFF07, 0x18, 0xFF08, 0x15,
584
+ 0xFF09, 0x16, 0xFF0A, 0x18, 0xFF0B, 0x19, 0xFF0C, 0x18, 0xFF0D, 0x14,
585
+ 0xFF0F, 0x18, 0xFF19, 0x9, 0xFF1B, 0x18, 0xFF1E, 0x19, 0xFF20, 0x18,
586
+ 0xFF3A, 0x1, 0xFF3B, 0x15, 0xFF3C, 0x18, 0xFF3D, 0x16, 0xFF3E, 0x1B,
587
+ 0xFF3F, 0x17, 0xFF40, 0x1B, 0xFF5A, 0x2, 0xFF5B, 0x15, 0xFF5C, 0x19,
588
+ 0xFF5D, 0x16, 0xFF5E, 0x19, 0xFF5F, 0x15, 0xFF60, 0x16, 0xFF61, 0x18,
589
+ 0xFF62, 0x15, 0xFF63, 0x16, 0xFF65, 0x18, 0xFF6F, 0x5, 0xFF70, 0x4,
590
+ 0xFF9D, 0x5, 0xFF9F, 0x4, 0xFFBE, 0x5, 0xFFC7, 0x5, 0xFFCF, 0x5,
591
+ 0xFFD7, 0x5, 0xFFDC, 0x5, 0xFFE1, 0x1A, 0xFFE2, 0x19, 0xFFE3, 0x1B,
592
+ 0xFFE4, 0x1C, 0xFFE6, 0x1A, 0xFFE8, 0x1C, 0xFFEC, 0x19, 0xFFEE, 0x1C,
593
+ 0xFFFB, 0x10, 0xFFFD, 0x1C
594
+ } };
595
+
596
+ static const std::tr1::array<uint16_t, 1000 - 192> kLowerCaseCache = { {
597
+ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
598
+ 240, 241, 242, 243, 244, 245, 246, 215, 248, 249, 250, 251, 252, 253, 254, 223,
599
+ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
600
+ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
601
+ 257, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, 269, 269, 271, 271,
602
+ 273, 273, 275, 275, 277, 277, 279, 279, 281, 281, 283, 283, 285, 285, 287, 287,
603
+ 289, 289, 291, 291, 293, 293, 295, 295, 297, 297, 299, 299, 301, 301, 303, 303,
604
+ 105, 305, 307, 307, 309, 309, 311, 311, 312, 314, 314, 316, 316, 318, 318, 320,
605
+ 320, 322, 322, 324, 324, 326, 326, 328, 328, 329, 331, 331, 333, 333, 335, 335,
606
+ 337, 337, 339, 339, 341, 341, 343, 343, 345, 345, 347, 347, 349, 349, 351, 351,
607
+ 353, 353, 355, 355, 357, 357, 359, 359, 361, 361, 363, 363, 365, 365, 367, 367,
608
+ 369, 369, 371, 371, 373, 373, 375, 375, 255, 378, 378, 380, 380, 382, 382, 383,
609
+ 384, 595, 387, 387, 389, 389, 596, 392, 392, 598, 599, 396, 396, 397, 477, 601,
610
+ 603, 402, 402, 608, 611, 405, 617, 616, 409, 409, 410, 411, 623, 626, 414, 629,
611
+ 417, 417, 419, 419, 421, 421, 640, 424, 424, 643, 426, 427, 429, 429, 648, 432,
612
+ 432, 650, 651, 436, 436, 438, 438, 658, 441, 441, 442, 443, 445, 445, 446, 447,
613
+ 448, 449, 450, 451, 454, 454, 454, 457, 457, 457, 460, 460, 460, 462, 462, 464,
614
+ 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 477, 479, 479,
615
+ 481, 481, 483, 483, 485, 485, 487, 487, 489, 489, 491, 491, 493, 493, 495, 495,
616
+ 496, 499, 499, 499, 501, 501, 405, 447, 505, 505, 507, 507, 509, 509, 511, 511,
617
+ 513, 513, 515, 515, 517, 517, 519, 519, 521, 521, 523, 523, 525, 525, 527, 527,
618
+ 529, 529, 531, 531, 533, 533, 535, 535, 537, 537, 539, 539, 541, 541, 543, 543,
619
+ 414, 545, 547, 547, 549, 549, 551, 551, 553, 553, 555, 555, 557, 557, 559, 559,
620
+ 561, 561, 563, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575,
621
+ 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591,
622
+ 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607,
623
+ 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623,
624
+ 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639,
625
+ 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655,
626
+ 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
627
+ 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687,
628
+ 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703,
629
+ 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719,
630
+ 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735,
631
+ 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751,
632
+ 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767,
633
+ 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783,
634
+ 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799,
635
+ 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815,
636
+ 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831,
637
+ 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847,
638
+ 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863,
639
+ 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879,
640
+ 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895,
641
+ 896, 897, 898, 899, 900, 901, 940, 903, 941, 942, 943, 907, 972, 909, 973, 974,
642
+ 912, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959,
643
+ 960, 961, 930, 963, 964, 965, 966, 967, 968, 969, 970, 971, 940, 941, 942, 943,
644
+ 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959,
645
+ 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975,
646
+ 976, 977, 978, 979, 980, 981, 982, 983, 985, 985, 987, 987, 989, 989, 991, 991,
647
+ 993, 993, 995, 995, 997, 997, 999, 999
648
+ } };
649
+
650
+ static const std::tr1::array<uint16_t, 101> kLowerCaseKeys = { {
651
+ 0x41, 0xC0, 0xD8, 0x100, 0x130, 0x132, 0x139, 0x14A, 0x178, 0x179, 0x181, 0x182, 0x186, 0x187, 0x189, 0x18B, 0x18E, 0x18F, 0x190, 0x191, 0x193, 0x194, 0x196, 0x197, 0x198, 0x19C, 0x19D, 0x19F, 0x1A0, 0x1A6, 0x1A7, 0x1A9, 0x1AC, 0x1AE, 0x1AF, 0x1B1, 0x1B3, 0x1B7, 0x1B8, 0x1BC, 0x1C4, 0x1C5, 0x1C7, 0x1C8, 0x1CA, 0x1CB, 0x1DE, 0x1F1, 0x1F2, 0x1F6, 0x1F7, 0x1F8, 0x222, 0x386, 0x388, 0x38C, 0x38E, 0x391, 0x3A3, 0x3DA, 0x400, 0x410, 0x460, 0x48C, 0x4C1, 0x4C7, 0x4CB, 0x4D0, 0x4F8, 0x531, 0x1E00, 0x1EA0, 0x1F08, 0x1F18, 0x1F28, 0x1F38, 0x1F48, 0x1F59, 0x1F68, 0x1F88, 0x1F98, 0x1FA8, 0x1FB8, 0x1FBA, 0x1FBC, 0x1FC8, 0x1FCC, 0x1FD8, 0x1FDA, 0x1FE8, 0x1FEA, 0x1FEC, 0x1FF8, 0x1FFA, 0x1FFC, 0x2126, 0x212A, 0x212B, 0x2160, 0x24B6, 0xFF21 // NOLINT
652
+ } };
653
+
654
+ static const std::tr1::array<uint16_t, 202> kLowerCaseValues = { {
655
+ 0x5A, 0x20, 0xD6, 0x20, 0xDE, 0x20, 0x812E, 0x1, 0x130, 0xFF39, 0x8136, 0x1, 0x8147, 0x1, 0x8176, 0x1, 0x178, 0xFF87, 0x817D, 0x1, 0x181, 0xD2, 0x8184, 0x1, 0x186, 0xCE, 0x187, 0x1, 0x18A, 0xCD, 0x18B, 0x1, 0x18E, 0x4F, 0x18F, 0xCA, 0x190, 0xCB, 0x191, 0x1, 0x193, 0xCD, 0x194, 0xCF, 0x196, 0xD3, 0x197, 0xD1, 0x198, 0x1, 0x19C, 0xD3, 0x19D, 0xD5, 0x19F, 0xD6, 0x81A4, 0x1, 0x1A6, 0xDA, 0x1A7, 0x1, 0x1A9, 0xDA, 0x1AC, 0x1, 0x1AE, 0xDA, 0x1AF, 0x1, 0x1B2, 0xD9, 0x81B5, 0x1, 0x1B7, 0xDB, 0x1B8, 0x1, 0x1BC, 0x1, 0x1C4, 0x2, 0x1C5, 0x1, 0x1C7, 0x2, 0x1C8, 0x1, 0x1CA, 0x2, 0x81DB, 0x1, 0x81EE, 0x1, 0x1F1, 0x2, 0x81F4, 0x1, 0x1F6, 0xFF9F, 0x1F7, 0xFFC8, 0x821E, 0x1, 0x8232, 0x1, 0x386, 0x26, 0x38A, 0x25, 0x38C, 0x40, 0x38F, 0x3F, 0x3A1, 0x20, 0x3AB, 0x20, 0x83EE, 0x1, 0x40F, 0x50, 0x42F, 0x20, 0x8480, 0x1, 0x84BE, 0x1, 0x84C3, 0x1, 0x4C7, 0x1, 0x4CB, 0x1, 0x84F4, 0x1, 0x4F8, 0x1, 0x556, 0x30, 0x9E94, 0x1, 0x9EF8, 0x1, 0x1F0F, 0xFFF8, 0x1F1D, 0xFFF8, 0x1F2F, 0xFFF8, 0x1F3F, 0xFFF8, 0x1F4D, 0xFFF8, 0x9F5F, 0xFFF8, 0x1F6F, 0xFFF8, 0x1F8F, 0xFFF8, 0x1F9F, 0xFFF8, 0x1FAF, 0xFFF8, 0x1FB9, 0xFFF8, 0x1FBB, 0xFFB6, 0x1FBC, 0xFFF7, 0x1FCB, 0xFFAA, 0x1FCC, 0xFFF7, 0x1FD9, 0xFFF8, 0x1FDB, 0xFF9C, 0x1FE9, 0xFFF8, 0x1FEB, 0xFF90, 0x1FEC, 0xFFF9, 0x1FF9, 0xFF80, 0x1FFB, 0xFF82, 0x1FFC, 0xFFF7, 0x2126, 0xE2A3, 0x212A, 0xDF41, 0x212B, 0xDFBA, 0x216F, 0x10, 0x24CF, 0x1A, 0xFF3A, 0x20 // NOLINT
656
+ } };
657
+
658
+ static const std::tr1::array<uint16_t, 1000 - 181> kUpperCaseCache = { {
659
+ 924, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
660
+ 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
661
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 192, 193, 194, 195, 196,
662
+ 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
663
+ 213, 214, 247, 216, 217, 218, 219, 220, 221, 222, 376, 256, 256, 258, 258, 260,
664
+ 260, 262, 262, 264, 264, 266, 266, 268, 268, 270, 270, 272, 272, 274, 274, 276,
665
+ 276, 278, 278, 280, 280, 282, 282, 284, 284, 286, 286, 288, 288, 290, 290, 292,
666
+ 292, 294, 294, 296, 296, 298, 298, 300, 300, 302, 302, 304, 73, 306, 306, 308,
667
+ 308, 310, 310, 312, 313, 313, 315, 315, 317, 317, 319, 319, 321, 321, 323, 323,
668
+ 325, 325, 327, 327, 329, 330, 330, 332, 332, 334, 334, 336, 336, 338, 338, 340,
669
+ 340, 342, 342, 344, 344, 346, 346, 348, 348, 350, 350, 352, 352, 354, 354, 356,
670
+ 356, 358, 358, 360, 360, 362, 362, 364, 364, 366, 366, 368, 368, 370, 370, 372,
671
+ 372, 374, 374, 376, 377, 377, 379, 379, 381, 381, 83, 384, 385, 386, 386, 388,
672
+ 388, 390, 391, 391, 393, 394, 395, 395, 397, 398, 399, 400, 401, 401, 403, 404,
673
+ 502, 406, 407, 408, 408, 410, 411, 412, 413, 544, 415, 416, 416, 418, 418, 420,
674
+ 420, 422, 423, 423, 425, 426, 427, 428, 428, 430, 431, 431, 433, 434, 435, 435,
675
+ 437, 437, 439, 440, 440, 442, 443, 444, 444, 446, 503, 448, 449, 450, 451, 452,
676
+ 452, 452, 455, 455, 455, 458, 458, 458, 461, 461, 463, 463, 465, 465, 467, 467,
677
+ 469, 469, 471, 471, 473, 473, 475, 475, 398, 478, 478, 480, 480, 482, 482, 484,
678
+ 484, 486, 486, 488, 488, 490, 490, 492, 492, 494, 494, 496, 497, 497, 497, 500,
679
+ 500, 502, 503, 504, 504, 506, 506, 508, 508, 510, 510, 512, 512, 514, 514, 516,
680
+ 516, 518, 518, 520, 520, 522, 522, 524, 524, 526, 526, 528, 528, 530, 530, 532,
681
+ 532, 534, 534, 536, 536, 538, 538, 540, 540, 542, 542, 544, 545, 546, 546, 548,
682
+ 548, 550, 550, 552, 552, 554, 554, 556, 556, 558, 558, 560, 560, 562, 562, 564,
683
+ 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580,
684
+ 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 385, 390,
685
+ 597, 393, 394, 600, 399, 602, 400, 604, 605, 606, 607, 403, 609, 610, 404, 612,
686
+ 613, 614, 615, 407, 406, 618, 619, 620, 621, 622, 412, 624, 625, 413, 627, 628,
687
+ 415, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 422, 641, 642, 425, 644,
688
+ 645, 646, 647, 430, 649, 433, 434, 652, 653, 654, 655, 656, 657, 439, 659, 660,
689
+ 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676,
690
+ 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692,
691
+ 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708,
692
+ 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724,
693
+ 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740,
694
+ 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756,
695
+ 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772,
696
+ 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788,
697
+ 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804,
698
+ 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820,
699
+ 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836,
700
+ 921, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852,
701
+ 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868,
702
+ 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884,
703
+ 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900,
704
+ 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916,
705
+ 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932,
706
+ 933, 934, 935, 936, 937, 938, 939, 902, 904, 905, 906, 944, 913, 914, 915, 916,
707
+ 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 931, 932,
708
+ 933, 934, 935, 936, 937, 938, 939, 908, 910, 911, 975, 914, 920, 978, 979, 980,
709
+ 934, 928, 983, 984, 984, 986, 986, 988, 988, 990, 990, 992, 992, 994, 994, 996,
710
+ 996, 998, 998
711
+ } };
712
+
713
+ static const std::tr1::array<uint16_t, 113> kUpperCaseKeys = { {
714
+ 0x61, 0xB5, 0xE0, 0xF8, 0xFF, 0x101, 0x131, 0x133, 0x13A, 0x14B, 0x17A, 0x17F, 0x183, 0x188, 0x18C, 0x192, 0x195, 0x199, 0x1A1, 0x1A8, 0x1AD, 0x1B0, 0x1B4, 0x1B9, 0x1BD, 0x1BF, 0x1C5, 0x1C6, 0x1C8, 0x1C9, 0x1CB, 0x1CC, 0x1CE, 0x1DD, 0x1DF, 0x1F2, 0x1F3, 0x1F5, 0x1F9, 0x223, 0x253, 0x254, 0x256, 0x259, 0x25B, 0x260, 0x263, 0x268, 0x269, 0x26F, 0x272, 0x275, 0x280, 0x283, 0x288, 0x28A, 0x292, 0x345, 0x3AC, 0x3AD, 0x3B1, 0x3C2, 0x3C3, 0x3CC, 0x3CD, 0x3D0, 0x3D1, 0x3D5, 0x3D6, 0x3DB, 0x3F0, 0x3F1, 0x3F2, 0x430, 0x450, 0x461, 0x48D, 0x4C2, 0x4C8, 0x4CC, 0x4D1, 0x4F9, 0x561, 0x1E01, 0x1E9B, 0x1EA1, 0x1F00, 0x1F10, 0x1F20, 0x1F30, 0x1F40, 0x1F51, 0x1F60, 0x1F70, 0x1F72, 0x1F76, 0x1F78, 0x1F7A, 0x1F7C, 0x1F80, 0x1F90, 0x1FA0, 0x1FB0, 0x1FB3, 0x1FBE, 0x1FC3, 0x1FD0, 0x1FE0, 0x1FE5, 0x1FF3, 0x2170, 0x24D0, 0xFF41 // NOLINT
715
+ } };
716
+
717
+ static const std::tr1::array<uint16_t, 226> kUpperCaseValues = { {
718
+ 0x7A, 0xFFE0, 0xB5, 0x2E7, 0xF6, 0xFFE0, 0xFE, 0xFFE0, 0xFF, 0x79, 0x812F, 0xFFFF, 0x131, 0xFF18, 0x8137, 0xFFFF, 0x8148, 0xFFFF, 0x8177, 0xFFFF, 0x817E, 0xFFFF, 0x17F, 0xFED4, 0x8185, 0xFFFF, 0x188, 0xFFFF, 0x18C, 0xFFFF, 0x192, 0xFFFF, 0x195, 0x61, 0x199, 0xFFFF, 0x81A5, 0xFFFF, 0x1A8, 0xFFFF, 0x1AD, 0xFFFF, 0x1B0, 0xFFFF, 0x81B6, 0xFFFF, 0x1B9, 0xFFFF, 0x1BD, 0xFFFF, 0x1BF, 0x38, 0x1C5, 0xFFFF, 0x1C6, 0xFFFE, 0x1C8, 0xFFFF, 0x1C9, 0xFFFE, 0x1CB, 0xFFFF, 0x1CC, 0xFFFE, 0x81DC, 0xFFFF, 0x1DD, 0xFFB1, 0x81EF, 0xFFFF, 0x1F2, 0xFFFF, 0x1F3, 0xFFFE, 0x1F5, 0xFFFF, 0x821F, 0xFFFF, 0x8233, 0xFFFF, 0x253, 0xFF2E, 0x254, 0xFF32, 0x257, 0xFF33, 0x259, 0xFF36, 0x25B, 0xFF35, 0x260, 0xFF33, 0x263, 0xFF31, 0x268, 0xFF2F, 0x269, 0xFF2D, 0x26F, 0xFF2D, 0x272, 0xFF2B, 0x275, 0xFF2A, 0x280, 0xFF26, 0x283, 0xFF26, 0x288, 0xFF26, 0x28B, 0xFF27, 0x292, 0xFF25, 0x345, 0x54, 0x3AC, 0xFFDA, 0x3AF, 0xFFDB, 0x3C1, 0xFFE0, 0x3C2, 0xFFE1, 0x3CB, 0xFFE0, 0x3CC, 0xFFC0, 0x3CE, 0xFFC1, 0x3D0, 0xFFC2, 0x3D1, 0xFFC7, 0x3D5, 0xFFD1, 0x3D6, 0xFFCA, 0x83EF, 0xFFFF, 0x3F0, 0xFFAA, 0x3F1, 0xFFB0, 0x3F2, 0xFFB1, 0x44F, 0xFFE0, 0x45F, 0xFFB0, 0x8481, 0xFFFF, 0x84BF, 0xFFFF, 0x84C4, 0xFFFF, 0x4C8, 0xFFFF, 0x4CC, 0xFFFF, 0x84F5, 0xFFFF, 0x4F9, 0xFFFF, 0x586, 0xFFD0, 0x9E95, 0xFFFF, 0x1E9B, 0xFFC5, 0x9EF9, 0xFFFF, 0x1F07, 0x8, 0x1F15, 0x8, 0x1F27, 0x8, 0x1F37, 0x8, 0x1F45, 0x8, 0x9F57, 0x8, 0x1F67, 0x8, 0x1F71, 0x4A, 0x1F75, 0x56, 0x1F77, 0x64, 0x1F79, 0x80, 0x1F7B, 0x70, 0x1F7D, 0x7E, 0x1F87, 0x8, 0x1F97, 0x8, 0x1FA7, 0x8, 0x1FB1, 0x8, 0x1FB3, 0x9, 0x1FBE, 0xE3DB, 0x1FC3, 0x9, 0x1FD1, 0x8, 0x1FE1, 0x8, 0x1FE5, 0x7, 0x1FF3, 0x9, 0x217F, 0xFFF0, 0x24E9, 0xFFE6, 0xFF5A, 0xFFE0 // NOLINT
719
+ } };
720
+
721
+ inline Category GetCategory(uint16_t c) {
722
+ using std::upper_bound;
723
+ if (c < 1000) {
724
+ return static_cast<Category>(kCategoryCache[c]);
725
+ }
726
+ const int result =
727
+ upper_bound(kCategoryKeys.begin(),
728
+ kCategoryKeys.end(), c) - kCategoryKeys.begin() - 1;
729
+ assert(result < static_cast<int>(kCategoryKeys.size()));
730
+ const int high = kCategoryValues[result * 2];
731
+ if (c <= high) {
732
+ const int code = kCategoryValues[result * 2 + 1];
733
+ if (code < 0x100) {
734
+ return static_cast<Category>(code);
735
+ }
736
+ return static_cast<Category>((c & 1) == 1 ? code >> 8 : code & 0xff);
737
+ }
738
+ return UNASSIGNED;
739
+ }
740
+
741
+ inline bool IsASCII(uint16_t c) {
742
+ return !(c & ~0x7F);
743
+ }
744
+
745
+ inline bool IsASCIIAlpha(uint16_t c) {
746
+ return (c | 0x20) >= 'a' && (c | 0x20) <= 'z';
747
+ }
748
+
749
+ inline bool IsDecimalDigit(uint16_t c) {
750
+ return c >= '0' && c <= '9';
751
+ }
752
+
753
+ inline bool IsOctalDigit(uint16_t c) {
754
+ return c >= '0' && c <= '7';
755
+ }
756
+
757
+ inline bool IsHexDigit(uint16_t c) {
758
+ return IsDecimalDigit(c) || ((c | 0x20) >= 'a' && (c | 0x20) <= 'f');
759
+ }
760
+
761
+ inline bool IsDigit(uint16_t c) {
762
+ return IsDecimalDigit(c) ||
763
+ (c > 1631 && GetCategory(c) == DECIMAL_DIGIT_NUMBER);
764
+ }
765
+
766
+ inline bool IsASCIIAlphanumeric(uint16_t c) {
767
+ return IsDecimalDigit(c) || IsASCIIAlpha(c);
768
+ }
769
+
770
+ inline bool IsNonASCIIIdentifierStart(uint16_t c) {
771
+ return (1 << GetCategory(c)) & (Lu | Ll | Lt | Lm | Lo);
772
+ }
773
+
774
+ inline bool IsNonASCIIIdentifierPart(uint16_t c) {
775
+ return (1 << GetCategory(c)) & (Lu | Ll | Lt | Lm | Lo | Mn | Mc | Nd | Pc);
776
+ }
777
+
778
+ inline bool IsSeparatorSpace(uint16_t c) {
779
+ return GetCategory(c) == SPACE_SEPARATOR;
780
+ }
781
+
782
+ inline bool IsWhiteSpace(uint16_t c) {
783
+ return IsASCII(c) ?
784
+ (c == ' ' || c == '\t' || c == 0xB || c == 0xC) :
785
+ c == 0x00A0 || c == 0xFEFF || IsSeparatorSpace(c);
786
+ }
787
+
788
+ inline bool IsLineTerminator(uint16_t c) {
789
+ return c == '\r' || c == '\n' || (c & ~1) == 0x2028; // 0x2028 or 0x2029
790
+ }
791
+
792
+ inline bool IsIdentifierStart(uint16_t c) {
793
+ return IsASCII(c) ? c == '$' || c == '_' ||
794
+ c == '\\' || IsASCIIAlpha(c) :
795
+ IsNonASCIIIdentifierStart(c);
796
+ }
797
+
798
+ inline bool IsIdentifierPart(uint16_t c) {
799
+ return IsASCII(c) ? c == '$' || c == '_' ||
800
+ c == '\\' || IsASCIIAlphanumeric(c) :
801
+ IsNonASCIIIdentifierPart(c);
802
+ }
803
+
804
+ inline uint16_t ToLowerCase(uint16_t c) {
805
+ using std::upper_bound;
806
+ if ('A' <= c && c <= 'Z') {
807
+ return c + ('a' - 'A');
808
+ }
809
+ // lowercase not found until 192
810
+ if (c < 192) {
811
+ return c;
812
+ }
813
+ if (c < 1000) {
814
+ return kLowerCaseCache[c - 192];
815
+ }
816
+ std::tr1::array<uint16_t, 101>::const_iterator it =
817
+ upper_bound(kLowerCaseKeys.begin(),
818
+ kLowerCaseKeys.end(), c) - 1;
819
+ const int result = it - kLowerCaseKeys.begin();
820
+ assert(result < 101);
821
+ if (result >= 0) {
822
+ bool by2 = false;
823
+ const uint16_t start = kLowerCaseKeys[result];
824
+ uint16_t end = kLowerCaseValues[result * 2];
825
+ if ((start & 0x8000) != (end & 0x8000)) {
826
+ end ^= 0x8000;
827
+ by2 = true;
828
+ }
829
+ if (c <= end) {
830
+ if (by2 && (c & 1) != (start & 1)) {
831
+ return c;
832
+ }
833
+ const uint16_t mapping = kLowerCaseValues[result * 2 + 1];
834
+ return c + mapping;
835
+ }
836
+ }
837
+ return c;
838
+ }
839
+
840
+ inline uint16_t ToUpperCase(uint16_t c) {
841
+ using std::upper_bound;
842
+ if ('a' <= c && c <= 'z') {
843
+ return c - ('a' - 'A');
844
+ }
845
+ // uppercase not found until 181
846
+ if (c < 181) {
847
+ return c;
848
+ }
849
+ if (c < 1000) {
850
+ return kUpperCaseCache[c - 181];
851
+ }
852
+ std::tr1::array<uint16_t, 113>::const_iterator it =
853
+ upper_bound(kUpperCaseKeys.begin(),
854
+ kUpperCaseKeys.end(), c) - 1;
855
+ const int result = it - kUpperCaseKeys.begin();
856
+ assert(result < 113);
857
+ if (result >= 0) {
858
+ bool by2 = false;
859
+ const uint16_t start = *it;
860
+ uint16_t end = kUpperCaseValues[result * 2];
861
+ if ((start & 0x8000) != (end & 0x8000)) {
862
+ end ^= 0x8000;
863
+ by2 = true;
864
+ }
865
+ if (c <= end) {
866
+ if (by2 && (c & 1) != (start & 1)) {
867
+ return c;
868
+ }
869
+ const uint16_t mapping = kUpperCaseValues[result * 2 + 1];
870
+ return c + mapping;
871
+ }
872
+ }
873
+ return c;
874
+ }
875
+
876
+ } // namespace iv::core::character
877
+ } } // namespace iv::core
878
+ #endif // _IV_CHARACTER_H_