Line | Count | Source |
1 | | /* pr29.h --- Detect strings that are non-idempotent under NFKC in Unicode 3.2. |
2 | | Copyright (C) 2004-2025 Simon Josefsson |
3 | | |
4 | | This file is part of GNU Libidn. |
5 | | |
6 | | GNU Libidn is free software: you can redistribute it and/or |
7 | | modify it under the terms of either: |
8 | | |
9 | | * the GNU Lesser General Public License as published by the Free |
10 | | Software Foundation; either version 3 of the License, or (at |
11 | | your option) any later version. |
12 | | |
13 | | or |
14 | | |
15 | | * the GNU General Public License as published by the Free |
16 | | Software Foundation; either version 2 of the License, or (at |
17 | | your option) any later version. |
18 | | |
19 | | or both in parallel, as here. |
20 | | |
21 | | GNU Libidn is distributed in the hope that it will be useful, |
22 | | but WITHOUT ANY WARRANTY; without even the implied warranty of |
23 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
24 | | General Public License for more details. |
25 | | |
26 | | You should have received copies of the GNU General Public License and |
27 | | the GNU Lesser General Public License along with this program. If |
28 | | not, see <https://www.gnu.org/licenses/>. */ |
29 | | |
30 | | #include <config.h> |
31 | | |
32 | | #include "pr29.h" |
33 | | |
34 | | /* Get stringprep_utf8_to_ucs4. */ |
35 | | #include <stringprep.h> |
36 | | |
37 | | /* |
38 | | * The tables used in this file was extracted by Simon Josefsson from |
39 | | * pr-29.html and DerivedCombiningClass-3.2.0.txt, as published by |
40 | | * Unicode Inc., for the GNU Libidn project. |
41 | | * |
42 | | */ |
43 | | |
44 | | /* These are the characters with non-zero combination class, extracted |
45 | | from DerivedCombiningClass-3.2.0.txt. */ |
46 | | static uint32_t nzcc[] = { |
47 | | /* 1 # Mn [5] COMBINING TILDE OVERLAY.. |
48 | | * ..COMBINING LONG SOLIDUS OVERLAY */ |
49 | | 0x0334, |
50 | | 0x0335, |
51 | | 0x0336, |
52 | | 0x0337, |
53 | | 0x0338, |
54 | | /* 1 # Mn [2] COMBINING LONG VERTICAL LINE OVERLAY.. |
55 | | * ..COMBINING SHORT VERTICAL LINE OVERLAY */ |
56 | | 0x20D2, |
57 | | 0x20D3, |
58 | | /* 1 # Mn [3] COMBINING RING OVERLAY.. |
59 | | * ..COMBINING ANTICLOCKWISE RING OVERLAY */ |
60 | | 0x20D8, |
61 | | 0x20D9, |
62 | | 0x20DA, |
63 | | /* 1 # Mn [2] COMBINING REVERSE SOLIDUS OVERLAY.. |
64 | | * ..COMBINING DOUBLE VERTICAL STROKE OVERLAY */ |
65 | | 0x20E5, |
66 | | 0x20E6, |
67 | | /* 1 # Mn COMBINING LEFTWARDS ARROW OVERLAY */ |
68 | | 0x20EA, |
69 | | /* 1 # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1.. |
70 | | * ..MUSICAL SYMBOL COMBINING TREMOLO-3 */ |
71 | | 0x1D167, |
72 | | 0x1D168, |
73 | | 0x1D169, |
74 | | /* 7 # Mn DEVANAGARI SIGN NUKTA */ |
75 | | 0x093C, |
76 | | /* 7 # Mn BENGALI SIGN NUKTA */ |
77 | | 0x09BC, |
78 | | /* 7 # Mn GURMUKHI SIGN NUKTA */ |
79 | | 0x0A3C, |
80 | | /* 7 # Mn GUJARATI SIGN NUKTA */ |
81 | | 0x0ABC, |
82 | | /* 7 # Mn ORIYA SIGN NUKTA */ |
83 | | 0x0B3C, |
84 | | /* 7 # Mn MYANMAR SIGN DOT BELOW */ |
85 | | 0x1037, |
86 | | /* 8 # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK.. |
87 | | * ..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ |
88 | | 0x3099, |
89 | | 0x309A, |
90 | | /* 9 # Mn DEVANAGARI SIGN VIRAMA */ |
91 | | 0x094D, |
92 | | /* 9 # Mn BENGALI SIGN VIRAMA */ |
93 | | 0x09CD, |
94 | | /* 9 # Mn GURMUKHI SIGN VIRAMA */ |
95 | | 0x0A4D, |
96 | | /* 9 # Mn GUJARATI SIGN VIRAMA */ |
97 | | 0x0ACD, |
98 | | /* 9 # Mn ORIYA SIGN VIRAMA */ |
99 | | 0x0B4D, |
100 | | /* 9 # Mn TAMIL SIGN VIRAMA */ |
101 | | 0x0BCD, |
102 | | /* 9 # Mn TELUGU SIGN VIRAMA */ |
103 | | 0x0C4D, |
104 | | /* 9 # Mn KANNADA SIGN VIRAMA */ |
105 | | 0x0CCD, |
106 | | /* 9 # Mn MALAYALAM SIGN VIRAMA */ |
107 | | 0x0D4D, |
108 | | /* 9 # Mn SINHALA SIGN AL-LAKUNA */ |
109 | | 0x0DCA, |
110 | | /* 9 # Mn THAI CHARACTER PHINTHU */ |
111 | | 0x0E3A, |
112 | | /* 9 # Mn TIBETAN MARK HALANTA */ |
113 | | 0x0F84, |
114 | | /* 9 # Mn MYANMAR SIGN VIRAMA */ |
115 | | 0x1039, |
116 | | /* 9 # Mn TAGALOG SIGN VIRAMA */ |
117 | | 0x1714, |
118 | | /* 9 # Mn HANUNOO SIGN PAMUDPOD */ |
119 | | 0x1734, |
120 | | /* 9 # Mn KHMER SIGN COENG */ |
121 | | 0x17D2, |
122 | | /* 10 # Mn HEBREW POINT SHEVA */ |
123 | | 0x05B0, |
124 | | /* 11 # Mn HEBREW POINT HATAF SEGOL */ |
125 | | 0x05B1, |
126 | | /* 12 # Mn HEBREW POINT HATAF PATAH */ |
127 | | 0x05B2, |
128 | | /* 13 # Mn HEBREW POINT HATAF QAMATS */ |
129 | | 0x05B3, |
130 | | /* 14 # Mn HEBREW POINT HIRIQ */ |
131 | | 0x05B4, |
132 | | /* 15 # Mn HEBREW POINT TSERE */ |
133 | | 0x05B5, |
134 | | /* 16 # Mn HEBREW POINT SEGOL */ |
135 | | 0x05B6, |
136 | | /* 17 # Mn HEBREW POINT PATAH */ |
137 | | 0x05B7, |
138 | | /* 18 # Mn HEBREW POINT QAMATS */ |
139 | | 0x05B8, |
140 | | /* 19 # Mn HEBREW POINT HOLAM */ |
141 | | 0x05B9, |
142 | | /* 20 # Mn HEBREW POINT QUBUTS */ |
143 | | 0x05BB, |
144 | | /* 21 # Mn HEBREW POINT DAGESH OR MAPIQ */ |
145 | | 0x05BC, |
146 | | /* 22 # Mn HEBREW POINT METEG */ |
147 | | 0x05BD, |
148 | | /* 23 # Mn HEBREW POINT RAFE */ |
149 | | 0x05BF, |
150 | | /* 24 # Mn HEBREW POINT SHIN DOT */ |
151 | | 0x05C1, |
152 | | /* 25 # Mn HEBREW POINT SIN DOT */ |
153 | | 0x05C2, |
154 | | /* 26 # Mn HEBREW POINT JUDEO-SPANISH VARIKA */ |
155 | | 0xFB1E, |
156 | | /* 27 # Mn ARABIC FATHATAN */ |
157 | | 0x064B, |
158 | | /* 28 # Mn ARABIC DAMMATAN */ |
159 | | 0x064C, |
160 | | /* 29 # Mn ARABIC KASRATAN */ |
161 | | 0x064D, |
162 | | /* 30 # Mn ARABIC FATHA */ |
163 | | 0x064E, |
164 | | /* 31 # Mn ARABIC DAMMA */ |
165 | | 0x064F, |
166 | | /* 32 # Mn ARABIC KASRA */ |
167 | | 0x0650, |
168 | | /* 33 # Mn ARABIC SHADDA */ |
169 | | 0x0651, |
170 | | /* 34 # Mn ARABIC SUKUN */ |
171 | | 0x0652, |
172 | | /* 35 # Mn ARABIC LETTER SUPERSCRIPT ALEF */ |
173 | | 0x0670, |
174 | | /* 36 # Mn SYRIAC LETTER SUPERSCRIPT ALAPH */ |
175 | | 0x0711, |
176 | | /* 84 # Mn TELUGU LENGTH MARK */ |
177 | | 0x0C55, |
178 | | /* 91 # Mn TELUGU AI LENGTH MARK */ |
179 | | 0x0C56, |
180 | | /* 103 # Mn [2] THAI CHARACTER SARA U.. |
181 | | * ..THAI CHARACTER SARA UU */ |
182 | | 0x0E38, |
183 | | 0x0E39, |
184 | | /* 107 # Mn [4] THAI CHARACTER MAI EK.. |
185 | | * ..THAI CHARACTER MAI CHATTAWA */ |
186 | | 0x0E48, |
187 | | 0x0E49, |
188 | | 0x0E4A, |
189 | | 0x04EB, |
190 | | /* 118 # Mn [2] LAO VOWEL SIGN U.. |
191 | | * ..LAO VOWEL SIGN UU */ |
192 | | 0x0EB8, |
193 | | 0x0EB9, |
194 | | /* 122 # Mn [4] LAO TONE MAI EK.. |
195 | | * ..LAO TONE MAI CATAWA */ |
196 | | 0x0EC8, |
197 | | 0x0EC9, |
198 | | 0x0ECA, |
199 | | 0x0ECB, |
200 | | /* 129 # Mn TIBETAN VOWEL SIGN AA */ |
201 | | 0x0F71, |
202 | | /* 130 # Mn TIBETAN VOWEL SIGN I */ |
203 | | 0x0F72, |
204 | | /* 130 # Mn [4] TIBETAN VOWEL SIGN E.. |
205 | | * ..TIBETAN VOWEL SIGN OO */ |
206 | | 0x0F7A, |
207 | | 0x0F7B, |
208 | | 0x0F7C, |
209 | | 0x0F7D, |
210 | | /* 130 # Mn TIBETAN VOWEL SIGN REVERSED I */ |
211 | | 0x0F80, |
212 | | /* 132 # Mn TIBETAN VOWEL SIGN U */ |
213 | | 0x0F74, |
214 | | /* 202 # Mn [2] COMBINING PALATALIZED HOOK BELOW.. |
215 | | * ..COMBINING RETROFLEX HOOK BELOW */ |
216 | | 0x0321, |
217 | | 0x0322, |
218 | | /* 202 # Mn [2] COMBINING CEDILLA.. |
219 | | * ..COMBINING OGONEK */ |
220 | | 0x0327, |
221 | | 0x0328, |
222 | | /* 216 # Mn COMBINING HORN */ |
223 | | 0x031B, |
224 | | /* 216 # Mn TIBETAN MARK TSA -PHRU */ |
225 | | 0x0F39, |
226 | | /* 216 # Mc [2] MUSICAL SYMBOL COMBINING STEM.. |
227 | | * ..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM */ |
228 | | 0x1D165, |
229 | | 0x1D166, |
230 | | /* 216 # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1.. |
231 | | * ..MUSICAL SYMBOL COMBINING FLAG-5 */ |
232 | | 0x1D16E, |
233 | | 0x1D16F, |
234 | | 0x1D170, |
235 | | 0x1D171, |
236 | | 0x1D172, |
237 | | /* 218 # Mn IDEOGRAPHIC LEVEL TONE MARK */ |
238 | | 0x302A, |
239 | | /* 220 # Mn [4] COMBINING GRAVE ACCENT BELOW.. |
240 | | * ..COMBINING RIGHT TACK BELOW */ |
241 | | 0x0316, |
242 | | 0x0317, |
243 | | 0x0318, |
244 | | 0x0319, |
245 | | /* 220 # Mn [5] COMBINING LEFT HALF RING BELOW.. |
246 | | * ..COMBINING MINUS SIGN BELOW */ |
247 | | 0x031C, |
248 | | 0x031D, |
249 | | 0x031E, |
250 | | 0x031F, |
251 | | 0x0320, |
252 | | /* 220 # Mn [4] COMBINING DOT BELOW.. |
253 | | * ..COMBINING COMMA BELOW */ |
254 | | 0x0323, |
255 | | 0x0324, |
256 | | 0x0325, |
257 | | 0x0326, |
258 | | /* 220 # Mn [11] COMBINING VERTICAL LINE BELOW.. |
259 | | * ..COMBINING DOUBLE LOW LINE */ |
260 | | 0x0329, |
261 | | 0x032A, |
262 | | 0x032B, |
263 | | 0x032C, |
264 | | 0x032D, |
265 | | 0x032E, |
266 | | 0x032F, |
267 | | 0x0330, |
268 | | 0x0331, |
269 | | 0x0332, |
270 | | 0x0333, |
271 | | /* 220 # Mn [4] COMBINING RIGHT HALF RING BELOW.. |
272 | | * ..COMBINING SEAGULL BELOW */ |
273 | | 0x0339, |
274 | | 0x033A, |
275 | | 0x033B, |
276 | | 0x033C, |
277 | | /* 220 # Mn [3] COMBINING EQUALS SIGN BELOW.. |
278 | | * ..COMBINING LEFT ANGLE BELOW */ |
279 | | 0x0347, |
280 | | 0x0348, |
281 | | 0x0349, |
282 | | /* 220 # Mn [2] COMBINING LEFT RIGHT ARROW BELOW.. |
283 | | * ..COMBINING UPWARDS ARROW BELOW */ |
284 | | 0x034D, |
285 | | 0x034E, |
286 | | /* 220 # Mn HEBREW ACCENT ETNAHTA */ |
287 | | 0x0591, |
288 | | /* 220 # Mn HEBREW ACCENT TIPEHA */ |
289 | | 0x0596, |
290 | | /* 220 # Mn HEBREW ACCENT TEVIR */ |
291 | | 0x059B, |
292 | | /* 220 # Mn [5] HEBREW ACCENT MUNAH.. |
293 | | * ..HEBREW ACCENT DARGA */ |
294 | | 0x05A3, |
295 | | 0x05A4, |
296 | | 0x05A5, |
297 | | 0x05A6, |
298 | | 0x05A7, |
299 | | /* 220 # Mn HEBREW ACCENT YERAH BEN YOMO */ |
300 | | 0x05AA, |
301 | | /* 220 # Mn ARABIC HAMZA BELOW */ |
302 | | 0x0655, |
303 | | /* 220 # Mn ARABIC SMALL LOW SEEN */ |
304 | | 0x06E3, |
305 | | /* 220 # Mn ARABIC EMPTY CENTRE LOW STOP */ |
306 | | 0x06EA, |
307 | | /* 220 # Mn ARABIC SMALL LOW MEEM */ |
308 | | 0x06ED, |
309 | | /* 220 # Mn SYRIAC PTHAHA BELOW */ |
310 | | 0x0731, |
311 | | /* 220 # Mn SYRIAC ZQAPHA BELOW */ |
312 | | 0x0734, |
313 | | /* 220 # Mn [3] SYRIAC RBASA BELOW.. |
314 | | * ..SYRIAC DOTTED ZLAMA ANGULAR */ |
315 | | 0x0737, |
316 | | 0x0738, |
317 | | 0x0739, |
318 | | /* 220 # Mn [2] SYRIAC HBASA BELOW.. |
319 | | * ..SYRIAC HBASA-ESASA DOTTED */ |
320 | | 0x073B, |
321 | | 0x073C, |
322 | | /* 220 # Mn SYRIAC ESASA BELOW */ |
323 | | 0x073E, |
324 | | /* 220 # Mn SYRIAC RUKKAKHA */ |
325 | | 0x0742, |
326 | | /* 220 # Mn SYRIAC TWO VERTICAL DOTS BELOW */ |
327 | | 0x0744, |
328 | | /* 220 # Mn SYRIAC THREE DOTS BELOW */ |
329 | | 0x0746, |
330 | | /* 220 # Mn SYRIAC OBLIQUE LINE BELOW */ |
331 | | 0x0748, |
332 | | /* 220 # Mn DEVANAGARI STRESS SIGN ANUDATTA */ |
333 | | 0x0952, |
334 | | /* 220 # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA.. |
335 | | * ..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS */ |
336 | | 0x0F18, |
337 | | 0x0F19, |
338 | | /* 220 # Mn TIBETAN MARK NGAS BZUNG NYI ZLA */ |
339 | | 0x0F35, |
340 | | /* 220 # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS */ |
341 | | 0x0F37, |
342 | | /* 220 # Mn TIBETAN SYMBOL PADMA GDAN */ |
343 | | 0x0FC6, |
344 | | /* 220 # Mn COMBINING TRIPLE UNDERDOT */ |
345 | | 0x20E8, |
346 | | /* 220 # Mn [8] MUSICAL SYMBOL COMBINING ACCENT.. |
347 | | * ..MUSICAL SYMBOL COMBINING LOURE */ |
348 | | 0x1D17B, |
349 | | 0x1D17C, |
350 | | 0x1D17D, |
351 | | 0x1D17E, |
352 | | 0x1D17F, |
353 | | 0x1D180, |
354 | | 0x1D181, |
355 | | 0x1D182, |
356 | | /* 220 # Mn [2] MUSICAL SYMBOL COMBINING DOUBLE TONGUE.. |
357 | | * ..MUSICAL SYMBOL COMBINING TRIPLE TONGUE */ |
358 | | 0x1D18A, |
359 | | 0x1D18B, |
360 | | /* 222 # Mn HEBREW ACCENT YETIV */ |
361 | | 0x059A, |
362 | | /* 222 # Mn HEBREW ACCENT DEHI */ |
363 | | 0x05AD, |
364 | | /* 222 # Mn IDEOGRAPHIC ENTERING TONE MARK */ |
365 | | 0x302D, |
366 | | /* 224 # Mn [2] HANGUL SINGLE DOT TONE MARK.. |
367 | | * ..HANGUL DOUBLE DOT TONE MARK */ |
368 | | 0x302E, |
369 | | 0x302F, |
370 | | /* 226 # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT */ |
371 | | 0x1D16D, |
372 | | /* 228 # Mn HEBREW ACCENT ZINOR */ |
373 | | 0x05AE, |
374 | | /* 228 # Mn MONGOLIAN LETTER ALI GALI DAGALGA */ |
375 | | 0x18A9, |
376 | | /* 228 # Mn IDEOGRAPHIC RISING TONE MARK */ |
377 | | 0x302B, |
378 | | /* 230 # Mn [21] COMBINING GRAVE ACCENT.. |
379 | | * ..COMBINING REVERSED COMMA ABOVE */ |
380 | | 0x0300, |
381 | | 0x0301, |
382 | | 0x0302, |
383 | | 0x0303, |
384 | | 0x0304, |
385 | | 0x0305, |
386 | | 0x0306, |
387 | | 0x0307, |
388 | | 0x0308, |
389 | | 0x0309, |
390 | | 0x030A, |
391 | | 0x030B, |
392 | | 0x030C, |
393 | | 0x030D, |
394 | | 0x030E, |
395 | | 0x030F, |
396 | | 0x0310, |
397 | | 0x0311, |
398 | | 0x0312, |
399 | | 0x0313, |
400 | | 0x0314, |
401 | | /* 230 # Mn [8] COMBINING X ABOVE.. |
402 | | * ..COMBINING GREEK DIALYTIKA TONOS */ |
403 | | 0x033D, |
404 | | 0x033E, |
405 | | 0x033F, |
406 | | 0x0340, |
407 | | 0x0341, |
408 | | 0x0342, |
409 | | 0x0343, |
410 | | 0x0344, |
411 | | /* 230 # Mn COMBINING BRIDGE ABOVE */ |
412 | | 0x0346, |
413 | | /* 230 # Mn [3] COMBINING NOT TILDE ABOVE.. |
414 | | * ..COMBINING ALMOST EQUAL TO ABOVE */ |
415 | | 0x034A, |
416 | | 0x034B, |
417 | | 0x034C, |
418 | | /* 230 # Mn [13] COMBINING LATIN SMALL LETTER A.. |
419 | | * ..COMBINING LATIN SMALL LETTER X */ |
420 | | 0x0363, |
421 | | 0x0364, |
422 | | 0x0365, |
423 | | 0x0366, |
424 | | 0x0367, |
425 | | 0x0368, |
426 | | 0x0369, |
427 | | 0x036A, |
428 | | 0x036B, |
429 | | 0x036C, |
430 | | 0x036D, |
431 | | 0x036E, |
432 | | 0x036F, |
433 | | /* 230 # Mn [4] COMBINING CYRILLIC TITLO.. |
434 | | * ..COMBINING CYRILLIC PSILI PNEUMATA */ |
435 | | 0x0483, |
436 | | 0x0484, |
437 | | 0x0485, |
438 | | 0x0486, |
439 | | /* 230 # Mn [4] HEBREW ACCENT SEGOL.. |
440 | | * ..HEBREW ACCENT ZAQEF GADOL */ |
441 | | 0x0592, |
442 | | 0x0593, |
443 | | 0x0594, |
444 | | 0x0595, |
445 | | /* 230 # Mn [3] HEBREW ACCENT REVIA.. |
446 | | * ..HEBREW ACCENT PASHTA */ |
447 | | 0x0597, |
448 | | 0x0598, |
449 | | 0x0599, |
450 | | /* 230 # Mn [6] HEBREW ACCENT GERESH.. |
451 | | * ..HEBREW ACCENT PAZER */ |
452 | | 0x059C, |
453 | | 0x059D, |
454 | | 0x059E, |
455 | | 0x059F, |
456 | | 0x05A0, |
457 | | 0x05A1, |
458 | | /* 230 # Mn [2] HEBREW ACCENT QADMA.. |
459 | | * ..HEBREW ACCENT TELISHA QETANA */ |
460 | | 0x05A8, |
461 | | 0x05A9, |
462 | | /* 230 # Mn [2] HEBREW ACCENT OLE.. |
463 | | * ..HEBREW ACCENT ILUY */ |
464 | | 0x05AB, |
465 | | 0x05AC, |
466 | | /* 230 # Mn HEBREW MARK MASORA CIRCLE */ |
467 | | 0x05AF, |
468 | | /* 230 # Mn HEBREW MARK UPPER DOT */ |
469 | | 0x05C4, |
470 | | /* 230 # Mn [2] ARABIC MADDAH ABOVE.. |
471 | | * ..ARABIC HAMZA ABOVE */ |
472 | | 0x0653, |
473 | | 0x0654, |
474 | | /* 230 # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA.. |
475 | | * ..ARABIC SMALL HIGH SEEN */ |
476 | | 0x06D6, |
477 | | 0x06D7, |
478 | | 0x06D8, |
479 | | 0x06D9, |
480 | | 0x06DA, |
481 | | 0x06DB, |
482 | | 0x06DC, |
483 | | /* 230 # Mn [4] ARABIC SMALL HIGH ROUNDED ZERO.. |
484 | | * ..ARABIC SMALL HIGH MEEM ISOLATED FORM */ |
485 | | 0x06DF, |
486 | | 0x06E0, |
487 | | 0x06E1, |
488 | | 0x06E2, |
489 | | /* 230 # Mn ARABIC SMALL HIGH MADDA */ |
490 | | 0x06E4, |
491 | | /* 230 # Mn [2] ARABIC SMALL HIGH YEH.. |
492 | | * ..ARABIC SMALL HIGH NOON */ |
493 | | 0x06E7, |
494 | | 0x06E8, |
495 | | /* 230 # Mn [2] ARABIC EMPTY CENTRE HIGH STOP.. |
496 | | * ..ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE */ |
497 | | 0x06EB, |
498 | | 0x06EC, |
499 | | /* 230 # Mn SYRIAC PTHAHA ABOVE */ |
500 | | 0x0730, |
501 | | /* 230 # Mn [2] SYRIAC PTHAHA DOTTED.. |
502 | | * ..SYRIAC ZQAPHA ABOVE */ |
503 | | 0x0732, |
504 | | 0x0733, |
505 | | /* 230 # Mn [2] SYRIAC ZQAPHA DOTTED.. |
506 | | * ..SYRIAC RBASA ABOVE */ |
507 | | 0x0735, |
508 | | 0x0736, |
509 | | /* 230 # Mn SYRIAC HBASA ABOVE */ |
510 | | 0x073A, |
511 | | /* 230 # Mn SYRIAC ESASA ABOVE */ |
512 | | 0x073D, |
513 | | /* 230 # Mn [3] SYRIAC RWAHA.. |
514 | | * ..SYRIAC QUSHSHAYA */ |
515 | | 0x073F, |
516 | | 0x0740, |
517 | | 0x0741, |
518 | | /* 230 # Mn SYRIAC TWO VERTICAL DOTS ABOVE */ |
519 | | 0x0743, |
520 | | /* 230 # Mn SYRIAC THREE DOTS ABOVE */ |
521 | | 0x0745, |
522 | | /* 230 # Mn SYRIAC OBLIQUE LINE ABOVE */ |
523 | | 0x0747, |
524 | | /* 230 # Mn [2] SYRIAC MUSIC.. |
525 | | * ..SYRIAC BARREKH */ |
526 | | 0x0749, |
527 | | 0x074A, |
528 | | /* 230 # Mn DEVANAGARI STRESS SIGN UDATTA */ |
529 | | 0x0951, |
530 | | /* 230 # Mn [2] DEVANAGARI GRAVE ACCENT.. |
531 | | * ..DEVANAGARI ACUTE ACCENT */ |
532 | | 0x0953, |
533 | | 0x0954, |
534 | | /* 230 # Mn [2] TIBETAN SIGN NYI ZLA NAA DA.. |
535 | | * ..TIBETAN SIGN SNA LDAN */ |
536 | | 0x0F82, |
537 | | 0x0F83, |
538 | | /* 230 # Mn [2] TIBETAN SIGN LCI RTAGS.. |
539 | | * ..TIBETAN SIGN YANG RTAGS */ |
540 | | 0x0F86, |
541 | | 0x0F87, |
542 | | /* 230 # Mn [2] COMBINING LEFT HARPOON ABOVE.. |
543 | | * ..COMBINING RIGHT HARPOON ABOVE */ |
544 | | 0x20D0, |
545 | | 0x20D1, |
546 | | /* 230 # Mn [4] COMBINING ANTICLOCKWISE ARROW ABOVE.. |
547 | | * ..COMBINING RIGHT ARROW ABOVE */ |
548 | | 0x20D4, |
549 | | 0x20D5, |
550 | | 0x20D6, |
551 | | 0x20D7, |
552 | | /* 230 # Mn [2] COMBINING THREE DOTS ABOVE.. |
553 | | * ..COMBINING FOUR DOTS ABOVE */ |
554 | | 0x20DB, |
555 | | 0x20DC, |
556 | | /* 230 # Mn COMBINING LEFT RIGHT ARROW ABOVE */ |
557 | | 0x20E1, |
558 | | /* 230 # Mn COMBINING ANNUITY SYMBOL */ |
559 | | 0x20E7, |
560 | | /* 230 # Mn COMBINING WIDE BRIDGE ABOVE */ |
561 | | 0x20E9, |
562 | | /* 230 # Mn [4] COMBINING LIGATURE LEFT HALF.. |
563 | | * ..COMBINING DOUBLE TILDE RIGHT HALF */ |
564 | | 0xFE20, |
565 | | 0xFE21, |
566 | | 0xFE22, |
567 | | 0xFE23, |
568 | | /* 230 # Mn [5] MUSICAL SYMBOL COMBINING DOIT.. |
569 | | * ..MUSICAL SYMBOL COMBINING BEND */ |
570 | | 0x1D185, |
571 | | 0x1D186, |
572 | | 0x1D187, |
573 | | 0x1D188, |
574 | | 0x1D189, |
575 | | /* 230 # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW.. |
576 | | * ..MUSICAL SYMBOL COMBINING SNAP PIZZICATO */ |
577 | | 0x1D1AA, |
578 | | 0x1D1AB, |
579 | | 0x1D1AC, |
580 | | 0x1D1AD, |
581 | | /* 232 # Mn COMBINING COMMA ABOVE RIGHT */ |
582 | | 0x0315, |
583 | | /* 232 # Mn COMBINING LEFT ANGLE ABOVE */ |
584 | | 0x031A, |
585 | | /* 232 # Mn IDEOGRAPHIC DEPARTING TONE MARK */ |
586 | | 0x302C, |
587 | | /* 233 # Mn COMBINING DOUBLE RIGHTWARDS ARROW BELOW */ |
588 | | 0x0362, |
589 | | /* 234 # Mn [2] COMBINING DOUBLE TILDE.. |
590 | | * ..COMBINING DOUBLE INVERTED BREVE */ |
591 | | 0x0360, |
592 | | 0x0361, |
593 | | /* 240 # Mn COMBINING GREEK YPOGEGRAMMENI */ |
594 | | 0x0345, |
595 | | 0 |
596 | | }; |
597 | | |
598 | | /* |
599 | | * 09C7 BENGALI VOWEL SIGN E 09BE BENGALI VOWEL SIGN AA or |
600 | | * 09D7 BENGALI AU LENGTH MARK |
601 | | */ |
602 | | |
603 | | static const uint32_t pr29_1_1[] = { |
604 | | 0x09C7, 0 |
605 | | }; |
606 | | |
607 | | static const uint32_t pr29_1_2[] = { |
608 | | 0x09BE, 0x09D7, 0 |
609 | | }; |
610 | | |
611 | | /* |
612 | | * 0B47 ORIYA VOWEL SIGN E 0B3E ORIYA VOWEL SIGN AA or |
613 | | * 0B56 ORIYA AI LENGTH MARK or |
614 | | * 0B57 ORIYA AU LENGTH MARK |
615 | | */ |
616 | | |
617 | | static const uint32_t pr29_2_1[] = { |
618 | | 0x0B47, 0 |
619 | | }; |
620 | | |
621 | | static const uint32_t pr29_2_2[] = { |
622 | | 0x0B3E, 0x0B56, 0x0B57, 0 |
623 | | }; |
624 | | |
625 | | /* |
626 | | * 0BC6 TAMIL VOWEL SIGN E 0BBE TAMIL VOWEL SIGN AA or |
627 | | * 0BD7 TAMIL AU LENGTH MARK |
628 | | */ |
629 | | |
630 | | static const uint32_t pr29_3_1[] = { |
631 | | 0x0BC6, 0 |
632 | | }; |
633 | | |
634 | | static const uint32_t pr29_3_2[] = { |
635 | | 0x0BBE, 0x0BD7, 0 |
636 | | }; |
637 | | |
638 | | /* |
639 | | * 0BC7 TAMIL VOWEL SIGN EE 0BBE TAMIL VOWEL SIGN AA |
640 | | */ |
641 | | |
642 | | static const uint32_t pr29_4_1[] = { |
643 | | 0x0BC7, 0 |
644 | | }; |
645 | | |
646 | | static const uint32_t pr29_4_2[] = { |
647 | | 0x0BBE, 0 |
648 | | }; |
649 | | |
650 | | /* |
651 | | * 0B92 TAMIL LETTER O 0BD7 TAMIL AU LENGTH MARK |
652 | | */ |
653 | | |
654 | | static const uint32_t pr29_5_1[] = { |
655 | | 0x0B92, 0 |
656 | | }; |
657 | | |
658 | | static const uint32_t pr29_5_2[] = { |
659 | | 0x0BD7, 0 |
660 | | }; |
661 | | |
662 | | /* |
663 | | * 0CC6 KANNADA VOWEL SIGN E 0CC2 KANNADA VOWEL SIGN UU or |
664 | | * 0CD5 KANNADA LENGTH MARK or |
665 | | * 0CD6 KANNADA AI LENGTH MARK |
666 | | */ |
667 | | |
668 | | static const uint32_t pr29_6_1[] = { |
669 | | 0x0CC6, 0 |
670 | | }; |
671 | | |
672 | | static const uint32_t pr29_6_2[] = { |
673 | | 0x0CC2, 0xCD5, 0xCD6, 0 |
674 | | }; |
675 | | |
676 | | /* |
677 | | * 0CBF KANNADA VOWEL SIGN I or |
678 | | * 0CCA KANNADA VOWEL SIGN O 0CD5 KANNADA LENGTH MARK |
679 | | */ |
680 | | |
681 | | static const uint32_t pr29_7_1[] = { |
682 | | 0x0CBF, 0xCCA, 0 |
683 | | }; |
684 | | |
685 | | static const uint32_t pr29_7_2[] = { |
686 | | 0x0CD5, 0 |
687 | | }; |
688 | | |
689 | | /* |
690 | | * 0D47 MALAYALAM VOWEL SIGN EE 0D3E MALAYALAM VOWEL SIGN AA |
691 | | */ |
692 | | |
693 | | static const uint32_t pr29_8_1[] = { |
694 | | 0x0D47, 0 |
695 | | }; |
696 | | |
697 | | static const uint32_t pr29_8_2[] = { |
698 | | 0x0D3E, 0 |
699 | | }; |
700 | | |
701 | | /* |
702 | | * 0D46 MALAYALAM VOWEL SIGN E 0D3E MALAYALAM VOWEL SIGN AA or |
703 | | * 0D57 MALAYALAM AU LENGTH MARK |
704 | | */ |
705 | | |
706 | | static const uint32_t pr29_9_1[] = { |
707 | | 0x0D46, 0 |
708 | | }; |
709 | | |
710 | | static const uint32_t pr29_9_2[] = { |
711 | | 0x0D3E, 0x0D57, 0 |
712 | | }; |
713 | | |
714 | | /* |
715 | | * 1025 MYANMAR LETTER U 102E MYANMAR VOWEL SIGN II |
716 | | */ |
717 | | |
718 | | static const uint32_t pr29_10_1[] = { |
719 | | 0x1025, 0 |
720 | | }; |
721 | | |
722 | | static const uint32_t pr29_10_2[] = { |
723 | | 0x102E, 0 |
724 | | }; |
725 | | |
726 | | /* |
727 | | * 0DD9 SINHALA VOWEL SIGN KOMBUVA 0DCF SINHALA VOWEL SIGN AELA-PILLA or |
728 | | * 0DDF SINHALA VOWEL SIGN GAYANUKITTA |
729 | | */ |
730 | | |
731 | | static const uint32_t pr29_11_1[] = { |
732 | | 0x0DD9, 0 |
733 | | }; |
734 | | |
735 | | static const uint32_t pr29_11_2[] = { |
736 | | 0x0DCF, 0x0DDF, 0 |
737 | | }; |
738 | | |
739 | | /* |
740 | | * 1100..1112 HANGUL CHOSEONG KIYEOK..HIEUH [19 instances] |
741 | | * 1161..1175 HANGUL JUNGSEONG A..I [21 instances] |
742 | | */ |
743 | | |
744 | | static const uint32_t pr29_12_1[] = { |
745 | | 0x1100, 0x1101, 0x1102, 0x1103, 0x1104, 0x1105, 0x1106, 0x1107, |
746 | | 0x1108, 0x1109, 0x110A, 0x110B, 0x110C, 0x110D, 0x110E, 0x110F, |
747 | | 0x1110, 0x1111, 0x1112, 0 |
748 | | }; |
749 | | |
750 | | static const uint32_t pr29_12_2[] = { |
751 | | 0x1161, 0x1162, 0x1163, 0x1164, 0x1165, 0x1166, 0x1167, 0x1168, |
752 | | 0x1169, 0x116A, 0x116B, 0x116C, 0x116D, 0x116E, 0x116F, 0x1170, |
753 | | 0x1171, 0x1172, 0x1173, 0x1174, 0x1175, 0 |
754 | | }; |
755 | | |
756 | | |
757 | | /* |
758 | | * [:HangulSyllableType=LV:] |
759 | | * 11A8..11C2 HANGUL JONGSEONG KIYEOK..HIEUH [27 instances] |
760 | | */ |
761 | | |
762 | | static const uint32_t pr29_13_1[] = { |
763 | | 0xAC00, /* LV # Lo HANGUL SYLLABLE GA */ |
764 | | 0xAC1C, /* LV # Lo HANGUL SYLLABLE GAE */ |
765 | | 0xAC38, /* LV # Lo HANGUL SYLLABLE GYA */ |
766 | | 0xAC54, /* LV # Lo HANGUL SYLLABLE GYAE */ |
767 | | 0xAC70, /* LV # Lo HANGUL SYLLABLE GEO */ |
768 | | 0xAC8C, /* LV # Lo HANGUL SYLLABLE GE */ |
769 | | 0xACA8, /* LV # Lo HANGUL SYLLABLE GYEO */ |
770 | | 0xACC4, /* LV # Lo HANGUL SYLLABLE GYE */ |
771 | | 0xACE0, /* LV # Lo HANGUL SYLLABLE GO */ |
772 | | 0xACFC, /* LV # Lo HANGUL SYLLABLE GWA */ |
773 | | 0xAD18, /* LV # Lo HANGUL SYLLABLE GWAE */ |
774 | | 0xAD34, /* LV # Lo HANGUL SYLLABLE GOE */ |
775 | | 0xAD50, /* LV # Lo HANGUL SYLLABLE GYO */ |
776 | | 0xAD6C, /* LV # Lo HANGUL SYLLABLE GU */ |
777 | | 0xAD88, /* LV # Lo HANGUL SYLLABLE GWEO */ |
778 | | 0xADA4, /* LV # Lo HANGUL SYLLABLE GWE */ |
779 | | 0xADC0, /* LV # Lo HANGUL SYLLABLE GWI */ |
780 | | 0xADDC, /* LV # Lo HANGUL SYLLABLE GYU */ |
781 | | 0xADF8, /* LV # Lo HANGUL SYLLABLE GEU */ |
782 | | 0xAE14, /* LV # Lo HANGUL SYLLABLE GYI */ |
783 | | 0xAE30, /* LV # Lo HANGUL SYLLABLE GI */ |
784 | | 0xAE4C, /* LV # Lo HANGUL SYLLABLE GGA */ |
785 | | 0xAE68, /* LV # Lo HANGUL SYLLABLE GGAE */ |
786 | | 0xAE84, /* LV # Lo HANGUL SYLLABLE GGYA */ |
787 | | 0xAEA0, /* LV # Lo HANGUL SYLLABLE GGYAE */ |
788 | | 0xAEBC, /* LV # Lo HANGUL SYLLABLE GGEO */ |
789 | | 0xAED8, /* LV # Lo HANGUL SYLLABLE GGE */ |
790 | | 0xAEF4, /* LV # Lo HANGUL SYLLABLE GGYEO */ |
791 | | 0xAF10, /* LV # Lo HANGUL SYLLABLE GGYE */ |
792 | | 0xAF2C, /* LV # Lo HANGUL SYLLABLE GGO */ |
793 | | 0xAF48, /* LV # Lo HANGUL SYLLABLE GGWA */ |
794 | | 0xAF64, /* LV # Lo HANGUL SYLLABLE GGWAE */ |
795 | | 0xAF80, /* LV # Lo HANGUL SYLLABLE GGOE */ |
796 | | 0xAF9C, /* LV # Lo HANGUL SYLLABLE GGYO */ |
797 | | 0xAFB8, /* LV # Lo HANGUL SYLLABLE GGU */ |
798 | | 0xAFD4, /* LV # Lo HANGUL SYLLABLE GGWEO */ |
799 | | 0xAFF0, /* LV # Lo HANGUL SYLLABLE GGWE */ |
800 | | 0xB00C, /* LV # Lo HANGUL SYLLABLE GGWI */ |
801 | | 0xB028, /* LV # Lo HANGUL SYLLABLE GGYU */ |
802 | | 0xB044, /* LV # Lo HANGUL SYLLABLE GGEU */ |
803 | | 0xB060, /* LV # Lo HANGUL SYLLABLE GGYI */ |
804 | | 0xB07C, /* LV # Lo HANGUL SYLLABLE GGI */ |
805 | | 0xB098, /* LV # Lo HANGUL SYLLABLE NA */ |
806 | | 0xB0B4, /* LV # Lo HANGUL SYLLABLE NAE */ |
807 | | 0xB0D0, /* LV # Lo HANGUL SYLLABLE NYA */ |
808 | | 0xB0EC, /* LV # Lo HANGUL SYLLABLE NYAE */ |
809 | | 0xB108, /* LV # Lo HANGUL SYLLABLE NEO */ |
810 | | 0xB124, /* LV # Lo HANGUL SYLLABLE NE */ |
811 | | 0xB140, /* LV # Lo HANGUL SYLLABLE NYEO */ |
812 | | 0xB15C, /* LV # Lo HANGUL SYLLABLE NYE */ |
813 | | 0xB178, /* LV # Lo HANGUL SYLLABLE NO */ |
814 | | 0xB194, /* LV # Lo HANGUL SYLLABLE NWA */ |
815 | | 0xB1B0, /* LV # Lo HANGUL SYLLABLE NWAE */ |
816 | | 0xB1CC, /* LV # Lo HANGUL SYLLABLE NOE */ |
817 | | 0xB1E8, /* LV # Lo HANGUL SYLLABLE NYO */ |
818 | | 0xB204, /* LV # Lo HANGUL SYLLABLE NU */ |
819 | | 0xB220, /* LV # Lo HANGUL SYLLABLE NWEO */ |
820 | | 0xB23C, /* LV # Lo HANGUL SYLLABLE NWE */ |
821 | | 0xB258, /* LV # Lo HANGUL SYLLABLE NWI */ |
822 | | 0xB274, /* LV # Lo HANGUL SYLLABLE NYU */ |
823 | | 0xB290, /* LV # Lo HANGUL SYLLABLE NEU */ |
824 | | 0xB2AC, /* LV # Lo HANGUL SYLLABLE NYI */ |
825 | | 0xB2C8, /* LV # Lo HANGUL SYLLABLE NI */ |
826 | | 0xB2E4, /* LV # Lo HANGUL SYLLABLE DA */ |
827 | | 0xB300, /* LV # Lo HANGUL SYLLABLE DAE */ |
828 | | 0xB31C, /* LV # Lo HANGUL SYLLABLE DYA */ |
829 | | 0xB338, /* LV # Lo HANGUL SYLLABLE DYAE */ |
830 | | 0xB354, /* LV # Lo HANGUL SYLLABLE DEO */ |
831 | | 0xB370, /* LV # Lo HANGUL SYLLABLE DE */ |
832 | | 0xB38C, /* LV # Lo HANGUL SYLLABLE DYEO */ |
833 | | 0xB3A8, /* LV # Lo HANGUL SYLLABLE DYE */ |
834 | | 0xB3C4, /* LV # Lo HANGUL SYLLABLE DO */ |
835 | | 0xB3E0, /* LV # Lo HANGUL SYLLABLE DWA */ |
836 | | 0xB3FC, /* LV # Lo HANGUL SYLLABLE DWAE */ |
837 | | 0xB418, /* LV # Lo HANGUL SYLLABLE DOE */ |
838 | | 0xB434, /* LV # Lo HANGUL SYLLABLE DYO */ |
839 | | 0xB450, /* LV # Lo HANGUL SYLLABLE DU */ |
840 | | 0xB46C, /* LV # Lo HANGUL SYLLABLE DWEO */ |
841 | | 0xB488, /* LV # Lo HANGUL SYLLABLE DWE */ |
842 | | 0xB4A4, /* LV # Lo HANGUL SYLLABLE DWI */ |
843 | | 0xB4C0, /* LV # Lo HANGUL SYLLABLE DYU */ |
844 | | 0xB4DC, /* LV # Lo HANGUL SYLLABLE DEU */ |
845 | | 0xB4F8, /* LV # Lo HANGUL SYLLABLE DYI */ |
846 | | 0xB514, /* LV # Lo HANGUL SYLLABLE DI */ |
847 | | 0xB530, /* LV # Lo HANGUL SYLLABLE DDA */ |
848 | | 0xB54C, /* LV # Lo HANGUL SYLLABLE DDAE */ |
849 | | 0xB568, /* LV # Lo HANGUL SYLLABLE DDYA */ |
850 | | 0xB584, /* LV # Lo HANGUL SYLLABLE DDYAE */ |
851 | | 0xB5A0, /* LV # Lo HANGUL SYLLABLE DDEO */ |
852 | | 0xB5BC, /* LV # Lo HANGUL SYLLABLE DDE */ |
853 | | 0xB5D8, /* LV # Lo HANGUL SYLLABLE DDYEO */ |
854 | | 0xB5F4, /* LV # Lo HANGUL SYLLABLE DDYE */ |
855 | | 0xB610, /* LV # Lo HANGUL SYLLABLE DDO */ |
856 | | 0xB62C, /* LV # Lo HANGUL SYLLABLE DDWA */ |
857 | | 0xB648, /* LV # Lo HANGUL SYLLABLE DDWAE */ |
858 | | 0xB664, /* LV # Lo HANGUL SYLLABLE DDOE */ |
859 | | 0xB680, /* LV # Lo HANGUL SYLLABLE DDYO */ |
860 | | 0xB69C, /* LV # Lo HANGUL SYLLABLE DDU */ |
861 | | 0xB6B8, /* LV # Lo HANGUL SYLLABLE DDWEO */ |
862 | | 0xB6D4, /* LV # Lo HANGUL SYLLABLE DDWE */ |
863 | | 0xB6F0, /* LV # Lo HANGUL SYLLABLE DDWI */ |
864 | | 0xB70C, /* LV # Lo HANGUL SYLLABLE DDYU */ |
865 | | 0xB728, /* LV # Lo HANGUL SYLLABLE DDEU */ |
866 | | 0xB744, /* LV # Lo HANGUL SYLLABLE DDYI */ |
867 | | 0xB760, /* LV # Lo HANGUL SYLLABLE DDI */ |
868 | | 0xB77C, /* LV # Lo HANGUL SYLLABLE RA */ |
869 | | 0xB798, /* LV # Lo HANGUL SYLLABLE RAE */ |
870 | | 0xB7B4, /* LV # Lo HANGUL SYLLABLE RYA */ |
871 | | 0xB7D0, /* LV # Lo HANGUL SYLLABLE RYAE */ |
872 | | 0xB7EC, /* LV # Lo HANGUL SYLLABLE REO */ |
873 | | 0xB808, /* LV # Lo HANGUL SYLLABLE RE */ |
874 | | 0xB824, /* LV # Lo HANGUL SYLLABLE RYEO */ |
875 | | 0xB840, /* LV # Lo HANGUL SYLLABLE RYE */ |
876 | | 0xB85C, /* LV # Lo HANGUL SYLLABLE RO */ |
877 | | 0xB878, /* LV # Lo HANGUL SYLLABLE RWA */ |
878 | | 0xB894, /* LV # Lo HANGUL SYLLABLE RWAE */ |
879 | | 0xB8B0, /* LV # Lo HANGUL SYLLABLE ROE */ |
880 | | 0xB8CC, /* LV # Lo HANGUL SYLLABLE RYO */ |
881 | | 0xB8E8, /* LV # Lo HANGUL SYLLABLE RU */ |
882 | | 0xB904, /* LV # Lo HANGUL SYLLABLE RWEO */ |
883 | | 0xB920, /* LV # Lo HANGUL SYLLABLE RWE */ |
884 | | 0xB93C, /* LV # Lo HANGUL SYLLABLE RWI */ |
885 | | 0xB958, /* LV # Lo HANGUL SYLLABLE RYU */ |
886 | | 0xB974, /* LV # Lo HANGUL SYLLABLE REU */ |
887 | | 0xB990, /* LV # Lo HANGUL SYLLABLE RYI */ |
888 | | 0xB9AC, /* LV # Lo HANGUL SYLLABLE RI */ |
889 | | 0xB9C8, /* LV # Lo HANGUL SYLLABLE MA */ |
890 | | 0xB9E4, /* LV # Lo HANGUL SYLLABLE MAE */ |
891 | | 0xBA00, /* LV # Lo HANGUL SYLLABLE MYA */ |
892 | | 0xBA1C, /* LV # Lo HANGUL SYLLABLE MYAE */ |
893 | | 0xBA38, /* LV # Lo HANGUL SYLLABLE MEO */ |
894 | | 0xBA54, /* LV # Lo HANGUL SYLLABLE ME */ |
895 | | 0xBA70, /* LV # Lo HANGUL SYLLABLE MYEO */ |
896 | | 0xBA8C, /* LV # Lo HANGUL SYLLABLE MYE */ |
897 | | 0xBAA8, /* LV # Lo HANGUL SYLLABLE MO */ |
898 | | 0xBAC4, /* LV # Lo HANGUL SYLLABLE MWA */ |
899 | | 0xBAE0, /* LV # Lo HANGUL SYLLABLE MWAE */ |
900 | | 0xBAFC, /* LV # Lo HANGUL SYLLABLE MOE */ |
901 | | 0xBB18, /* LV # Lo HANGUL SYLLABLE MYO */ |
902 | | 0xBB34, /* LV # Lo HANGUL SYLLABLE MU */ |
903 | | 0xBB50, /* LV # Lo HANGUL SYLLABLE MWEO */ |
904 | | 0xBB6C, /* LV # Lo HANGUL SYLLABLE MWE */ |
905 | | 0xBB88, /* LV # Lo HANGUL SYLLABLE MWI */ |
906 | | 0xBBA4, /* LV # Lo HANGUL SYLLABLE MYU */ |
907 | | 0xBBC0, /* LV # Lo HANGUL SYLLABLE MEU */ |
908 | | 0xBBDC, /* LV # Lo HANGUL SYLLABLE MYI */ |
909 | | 0xBBF8, /* LV # Lo HANGUL SYLLABLE MI */ |
910 | | 0xBC14, /* LV # Lo HANGUL SYLLABLE BA */ |
911 | | 0xBC30, /* LV # Lo HANGUL SYLLABLE BAE */ |
912 | | 0xBC4C, /* LV # Lo HANGUL SYLLABLE BYA */ |
913 | | 0xBC68, /* LV # Lo HANGUL SYLLABLE BYAE */ |
914 | | 0xBC84, /* LV # Lo HANGUL SYLLABLE BEO */ |
915 | | 0xBCA0, /* LV # Lo HANGUL SYLLABLE BE */ |
916 | | 0xBCBC, /* LV # Lo HANGUL SYLLABLE BYEO */ |
917 | | 0xBCD8, /* LV # Lo HANGUL SYLLABLE BYE */ |
918 | | 0xBCF4, /* LV # Lo HANGUL SYLLABLE BO */ |
919 | | 0xBD10, /* LV # Lo HANGUL SYLLABLE BWA */ |
920 | | 0xBD2C, /* LV # Lo HANGUL SYLLABLE BWAE */ |
921 | | 0xBD48, /* LV # Lo HANGUL SYLLABLE BOE */ |
922 | | 0xBD64, /* LV # Lo HANGUL SYLLABLE BYO */ |
923 | | 0xBD80, /* LV # Lo HANGUL SYLLABLE BU */ |
924 | | 0xBD9C, /* LV # Lo HANGUL SYLLABLE BWEO */ |
925 | | 0xBDB8, /* LV # Lo HANGUL SYLLABLE BWE */ |
926 | | 0xBDD4, /* LV # Lo HANGUL SYLLABLE BWI */ |
927 | | 0xBDF0, /* LV # Lo HANGUL SYLLABLE BYU */ |
928 | | 0xBE0C, /* LV # Lo HANGUL SYLLABLE BEU */ |
929 | | 0xBE28, /* LV # Lo HANGUL SYLLABLE BYI */ |
930 | | 0xBE44, /* LV # Lo HANGUL SYLLABLE BI */ |
931 | | 0xBE60, /* LV # Lo HANGUL SYLLABLE BBA */ |
932 | | 0xBE7C, /* LV # Lo HANGUL SYLLABLE BBAE */ |
933 | | 0xBE98, /* LV # Lo HANGUL SYLLABLE BBYA */ |
934 | | 0xBEB4, /* LV # Lo HANGUL SYLLABLE BBYAE */ |
935 | | 0xBED0, /* LV # Lo HANGUL SYLLABLE BBEO */ |
936 | | 0xBEEC, /* LV # Lo HANGUL SYLLABLE BBE */ |
937 | | 0xBF08, /* LV # Lo HANGUL SYLLABLE BBYEO */ |
938 | | 0xBF24, /* LV # Lo HANGUL SYLLABLE BBYE */ |
939 | | 0xBF40, /* LV # Lo HANGUL SYLLABLE BBO */ |
940 | | 0xBF5C, /* LV # Lo HANGUL SYLLABLE BBWA */ |
941 | | 0xBF78, /* LV # Lo HANGUL SYLLABLE BBWAE */ |
942 | | 0xBF94, /* LV # Lo HANGUL SYLLABLE BBOE */ |
943 | | 0xBFB0, /* LV # Lo HANGUL SYLLABLE BBYO */ |
944 | | 0xBFCC, /* LV # Lo HANGUL SYLLABLE BBU */ |
945 | | 0xBFE8, /* LV # Lo HANGUL SYLLABLE BBWEO */ |
946 | | 0xC004, /* LV # Lo HANGUL SYLLABLE BBWE */ |
947 | | 0xC020, /* LV # Lo HANGUL SYLLABLE BBWI */ |
948 | | 0xC03C, /* LV # Lo HANGUL SYLLABLE BBYU */ |
949 | | 0xC058, /* LV # Lo HANGUL SYLLABLE BBEU */ |
950 | | 0xC074, /* LV # Lo HANGUL SYLLABLE BBYI */ |
951 | | 0xC090, /* LV # Lo HANGUL SYLLABLE BBI */ |
952 | | 0xC0AC, /* LV # Lo HANGUL SYLLABLE SA */ |
953 | | 0xC0C8, /* LV # Lo HANGUL SYLLABLE SAE */ |
954 | | 0xC0E4, /* LV # Lo HANGUL SYLLABLE SYA */ |
955 | | 0xC100, /* LV # Lo HANGUL SYLLABLE SYAE */ |
956 | | 0xC11C, /* LV # Lo HANGUL SYLLABLE SEO */ |
957 | | 0xC138, /* LV # Lo HANGUL SYLLABLE SE */ |
958 | | 0xC154, /* LV # Lo HANGUL SYLLABLE SYEO */ |
959 | | 0xC170, /* LV # Lo HANGUL SYLLABLE SYE */ |
960 | | 0xC18C, /* LV # Lo HANGUL SYLLABLE SO */ |
961 | | 0xC1A8, /* LV # Lo HANGUL SYLLABLE SWA */ |
962 | | 0xC1C4, /* LV # Lo HANGUL SYLLABLE SWAE */ |
963 | | 0xC1E0, /* LV # Lo HANGUL SYLLABLE SOE */ |
964 | | 0xC1FC, /* LV # Lo HANGUL SYLLABLE SYO */ |
965 | | 0xC218, /* LV # Lo HANGUL SYLLABLE SU */ |
966 | | 0xC234, /* LV # Lo HANGUL SYLLABLE SWEO */ |
967 | | 0xC250, /* LV # Lo HANGUL SYLLABLE SWE */ |
968 | | 0xC26C, /* LV # Lo HANGUL SYLLABLE SWI */ |
969 | | 0xC288, /* LV # Lo HANGUL SYLLABLE SYU */ |
970 | | 0xC2A4, /* LV # Lo HANGUL SYLLABLE SEU */ |
971 | | 0xC2C0, /* LV # Lo HANGUL SYLLABLE SYI */ |
972 | | 0xC2DC, /* LV # Lo HANGUL SYLLABLE SI */ |
973 | | 0xC2F8, /* LV # Lo HANGUL SYLLABLE SSA */ |
974 | | 0xC314, /* LV # Lo HANGUL SYLLABLE SSAE */ |
975 | | 0xC330, /* LV # Lo HANGUL SYLLABLE SSYA */ |
976 | | 0xC34C, /* LV # Lo HANGUL SYLLABLE SSYAE */ |
977 | | 0xC368, /* LV # Lo HANGUL SYLLABLE SSEO */ |
978 | | 0xC384, /* LV # Lo HANGUL SYLLABLE SSE */ |
979 | | 0xC3A0, /* LV # Lo HANGUL SYLLABLE SSYEO */ |
980 | | 0xC3BC, /* LV # Lo HANGUL SYLLABLE SSYE */ |
981 | | 0xC3D8, /* LV # Lo HANGUL SYLLABLE SSO */ |
982 | | 0xC3F4, /* LV # Lo HANGUL SYLLABLE SSWA */ |
983 | | 0xC410, /* LV # Lo HANGUL SYLLABLE SSWAE */ |
984 | | 0xC42C, /* LV # Lo HANGUL SYLLABLE SSOE */ |
985 | | 0xC448, /* LV # Lo HANGUL SYLLABLE SSYO */ |
986 | | 0xC464, /* LV # Lo HANGUL SYLLABLE SSU */ |
987 | | 0xC480, /* LV # Lo HANGUL SYLLABLE SSWEO */ |
988 | | 0xC49C, /* LV # Lo HANGUL SYLLABLE SSWE */ |
989 | | 0xC4B8, /* LV # Lo HANGUL SYLLABLE SSWI */ |
990 | | 0xC4D4, /* LV # Lo HANGUL SYLLABLE SSYU */ |
991 | | 0xC4F0, /* LV # Lo HANGUL SYLLABLE SSEU */ |
992 | | 0xC50C, /* LV # Lo HANGUL SYLLABLE SSYI */ |
993 | | 0xC528, /* LV # Lo HANGUL SYLLABLE SSI */ |
994 | | 0xC544, /* LV # Lo HANGUL SYLLABLE A */ |
995 | | 0xC560, /* LV # Lo HANGUL SYLLABLE AE */ |
996 | | 0xC57C, /* LV # Lo HANGUL SYLLABLE YA */ |
997 | | 0xC598, /* LV # Lo HANGUL SYLLABLE YAE */ |
998 | | 0xC5B4, /* LV # Lo HANGUL SYLLABLE EO */ |
999 | | 0xC5D0, /* LV # Lo HANGUL SYLLABLE E */ |
1000 | | 0xC5EC, /* LV # Lo HANGUL SYLLABLE YEO */ |
1001 | | 0xC608, /* LV # Lo HANGUL SYLLABLE YE */ |
1002 | | 0xC624, /* LV # Lo HANGUL SYLLABLE O */ |
1003 | | 0xC640, /* LV # Lo HANGUL SYLLABLE WA */ |
1004 | | 0xC65C, /* LV # Lo HANGUL SYLLABLE WAE */ |
1005 | | 0xC678, /* LV # Lo HANGUL SYLLABLE OE */ |
1006 | | 0xC694, /* LV # Lo HANGUL SYLLABLE YO */ |
1007 | | 0xC6B0, /* LV # Lo HANGUL SYLLABLE U */ |
1008 | | 0xC6CC, /* LV # Lo HANGUL SYLLABLE WEO */ |
1009 | | 0xC6E8, /* LV # Lo HANGUL SYLLABLE WE */ |
1010 | | 0xC704, /* LV # Lo HANGUL SYLLABLE WI */ |
1011 | | 0xC720, /* LV # Lo HANGUL SYLLABLE YU */ |
1012 | | 0xC73C, /* LV # Lo HANGUL SYLLABLE EU */ |
1013 | | 0xC758, /* LV # Lo HANGUL SYLLABLE YI */ |
1014 | | 0xC774, /* LV # Lo HANGUL SYLLABLE I */ |
1015 | | 0xC790, /* LV # Lo HANGUL SYLLABLE JA */ |
1016 | | 0xC7AC, /* LV # Lo HANGUL SYLLABLE JAE */ |
1017 | | 0xC7C8, /* LV # Lo HANGUL SYLLABLE JYA */ |
1018 | | 0xC7E4, /* LV # Lo HANGUL SYLLABLE JYAE */ |
1019 | | 0xC800, /* LV # Lo HANGUL SYLLABLE JEO */ |
1020 | | 0xC81C, /* LV # Lo HANGUL SYLLABLE JE */ |
1021 | | 0xC838, /* LV # Lo HANGUL SYLLABLE JYEO */ |
1022 | | 0xC854, /* LV # Lo HANGUL SYLLABLE JYE */ |
1023 | | 0xC870, /* LV # Lo HANGUL SYLLABLE JO */ |
1024 | | 0xC88C, /* LV # Lo HANGUL SYLLABLE JWA */ |
1025 | | 0xC8A8, /* LV # Lo HANGUL SYLLABLE JWAE */ |
1026 | | 0xC8C4, /* LV # Lo HANGUL SYLLABLE JOE */ |
1027 | | 0xC8E0, /* LV # Lo HANGUL SYLLABLE JYO */ |
1028 | | 0xC8FC, /* LV # Lo HANGUL SYLLABLE JU */ |
1029 | | 0xC918, /* LV # Lo HANGUL SYLLABLE JWEO */ |
1030 | | 0xC934, /* LV # Lo HANGUL SYLLABLE JWE */ |
1031 | | 0xC950, /* LV # Lo HANGUL SYLLABLE JWI */ |
1032 | | 0xC96C, /* LV # Lo HANGUL SYLLABLE JYU */ |
1033 | | 0xC988, /* LV # Lo HANGUL SYLLABLE JEU */ |
1034 | | 0xC9A4, /* LV # Lo HANGUL SYLLABLE JYI */ |
1035 | | 0xC9C0, /* LV # Lo HANGUL SYLLABLE JI */ |
1036 | | 0xC9DC, /* LV # Lo HANGUL SYLLABLE JJA */ |
1037 | | 0xC9F8, /* LV # Lo HANGUL SYLLABLE JJAE */ |
1038 | | 0xCA14, /* LV # Lo HANGUL SYLLABLE JJYA */ |
1039 | | 0xCA30, /* LV # Lo HANGUL SYLLABLE JJYAE */ |
1040 | | 0xCA4C, /* LV # Lo HANGUL SYLLABLE JJEO */ |
1041 | | 0xCA68, /* LV # Lo HANGUL SYLLABLE JJE */ |
1042 | | 0xCA84, /* LV # Lo HANGUL SYLLABLE JJYEO */ |
1043 | | 0xCAA0, /* LV # Lo HANGUL SYLLABLE JJYE */ |
1044 | | 0xCABC, /* LV # Lo HANGUL SYLLABLE JJO */ |
1045 | | 0xCAD8, /* LV # Lo HANGUL SYLLABLE JJWA */ |
1046 | | 0xCAF4, /* LV # Lo HANGUL SYLLABLE JJWAE */ |
1047 | | 0xCB10, /* LV # Lo HANGUL SYLLABLE JJOE */ |
1048 | | 0xCB2C, /* LV # Lo HANGUL SYLLABLE JJYO */ |
1049 | | 0xCB48, /* LV # Lo HANGUL SYLLABLE JJU */ |
1050 | | 0xCB64, /* LV # Lo HANGUL SYLLABLE JJWEO */ |
1051 | | 0xCB80, /* LV # Lo HANGUL SYLLABLE JJWE */ |
1052 | | 0xCB9C, /* LV # Lo HANGUL SYLLABLE JJWI */ |
1053 | | 0xCBB8, /* LV # Lo HANGUL SYLLABLE JJYU */ |
1054 | | 0xCBD4, /* LV # Lo HANGUL SYLLABLE JJEU */ |
1055 | | 0xCBF0, /* LV # Lo HANGUL SYLLABLE JJYI */ |
1056 | | 0xCC0C, /* LV # Lo HANGUL SYLLABLE JJI */ |
1057 | | 0xCC28, /* LV # Lo HANGUL SYLLABLE CA */ |
1058 | | 0xCC44, /* LV # Lo HANGUL SYLLABLE CAE */ |
1059 | | 0xCC60, /* LV # Lo HANGUL SYLLABLE CYA */ |
1060 | | 0xCC7C, /* LV # Lo HANGUL SYLLABLE CYAE */ |
1061 | | 0xCC98, /* LV # Lo HANGUL SYLLABLE CEO */ |
1062 | | 0xCCB4, /* LV # Lo HANGUL SYLLABLE CE */ |
1063 | | 0xCCD0, /* LV # Lo HANGUL SYLLABLE CYEO */ |
1064 | | 0xCCEC, /* LV # Lo HANGUL SYLLABLE CYE */ |
1065 | | 0xCD08, /* LV # Lo HANGUL SYLLABLE CO */ |
1066 | | 0xCD24, /* LV # Lo HANGUL SYLLABLE CWA */ |
1067 | | 0xCD40, /* LV # Lo HANGUL SYLLABLE CWAE */ |
1068 | | 0xCD5C, /* LV # Lo HANGUL SYLLABLE COE */ |
1069 | | 0xCD78, /* LV # Lo HANGUL SYLLABLE CYO */ |
1070 | | 0xCD94, /* LV # Lo HANGUL SYLLABLE CU */ |
1071 | | 0xCDB0, /* LV # Lo HANGUL SYLLABLE CWEO */ |
1072 | | 0xCDCC, /* LV # Lo HANGUL SYLLABLE CWE */ |
1073 | | 0xCDE8, /* LV # Lo HANGUL SYLLABLE CWI */ |
1074 | | 0xCE04, /* LV # Lo HANGUL SYLLABLE CYU */ |
1075 | | 0xCE20, /* LV # Lo HANGUL SYLLABLE CEU */ |
1076 | | 0xCE3C, /* LV # Lo HANGUL SYLLABLE CYI */ |
1077 | | 0xCE58, /* LV # Lo HANGUL SYLLABLE CI */ |
1078 | | 0xCE74, /* LV # Lo HANGUL SYLLABLE KA */ |
1079 | | 0xCE90, /* LV # Lo HANGUL SYLLABLE KAE */ |
1080 | | 0xCEAC, /* LV # Lo HANGUL SYLLABLE KYA */ |
1081 | | 0xCEC8, /* LV # Lo HANGUL SYLLABLE KYAE */ |
1082 | | 0xCEE4, /* LV # Lo HANGUL SYLLABLE KEO */ |
1083 | | 0xCF00, /* LV # Lo HANGUL SYLLABLE KE */ |
1084 | | 0xCF1C, /* LV # Lo HANGUL SYLLABLE KYEO */ |
1085 | | 0xCF38, /* LV # Lo HANGUL SYLLABLE KYE */ |
1086 | | 0xCF54, /* LV # Lo HANGUL SYLLABLE KO */ |
1087 | | 0xCF70, /* LV # Lo HANGUL SYLLABLE KWA */ |
1088 | | 0xCF8C, /* LV # Lo HANGUL SYLLABLE KWAE */ |
1089 | | 0xCFA8, /* LV # Lo HANGUL SYLLABLE KOE */ |
1090 | | 0xCFC4, /* LV # Lo HANGUL SYLLABLE KYO */ |
1091 | | 0xCFE0, /* LV # Lo HANGUL SYLLABLE KU */ |
1092 | | 0xCFFC, /* LV # Lo HANGUL SYLLABLE KWEO */ |
1093 | | 0xD018, /* LV # Lo HANGUL SYLLABLE KWE */ |
1094 | | 0xD034, /* LV # Lo HANGUL SYLLABLE KWI */ |
1095 | | 0xD050, /* LV # Lo HANGUL SYLLABLE KYU */ |
1096 | | 0xD06C, /* LV # Lo HANGUL SYLLABLE KEU */ |
1097 | | 0xD088, /* LV # Lo HANGUL SYLLABLE KYI */ |
1098 | | 0xD0A4, /* LV # Lo HANGUL SYLLABLE KI */ |
1099 | | 0xD0C0, /* LV # Lo HANGUL SYLLABLE TA */ |
1100 | | 0xD0DC, /* LV # Lo HANGUL SYLLABLE TAE */ |
1101 | | 0xD0F8, /* LV # Lo HANGUL SYLLABLE TYA */ |
1102 | | 0xD114, /* LV # Lo HANGUL SYLLABLE TYAE */ |
1103 | | 0xD130, /* LV # Lo HANGUL SYLLABLE TEO */ |
1104 | | 0xD14C, /* LV # Lo HANGUL SYLLABLE TE */ |
1105 | | 0xD168, /* LV # Lo HANGUL SYLLABLE TYEO */ |
1106 | | 0xD184, /* LV # Lo HANGUL SYLLABLE TYE */ |
1107 | | 0xD1A0, /* LV # Lo HANGUL SYLLABLE TO */ |
1108 | | 0xD1BC, /* LV # Lo HANGUL SYLLABLE TWA */ |
1109 | | 0xD1D8, /* LV # Lo HANGUL SYLLABLE TWAE */ |
1110 | | 0xD1F4, /* LV # Lo HANGUL SYLLABLE TOE */ |
1111 | | 0xD210, /* LV # Lo HANGUL SYLLABLE TYO */ |
1112 | | 0xD22C, /* LV # Lo HANGUL SYLLABLE TU */ |
1113 | | 0xD248, /* LV # Lo HANGUL SYLLABLE TWEO */ |
1114 | | 0xD264, /* LV # Lo HANGUL SYLLABLE TWE */ |
1115 | | 0xD280, /* LV # Lo HANGUL SYLLABLE TWI */ |
1116 | | 0xD29C, /* LV # Lo HANGUL SYLLABLE TYU */ |
1117 | | 0xD2B8, /* LV # Lo HANGUL SYLLABLE TEU */ |
1118 | | 0xD2D4, /* LV # Lo HANGUL SYLLABLE TYI */ |
1119 | | 0xD2F0, /* LV # Lo HANGUL SYLLABLE TI */ |
1120 | | 0xD30C, /* LV # Lo HANGUL SYLLABLE PA */ |
1121 | | 0xD328, /* LV # Lo HANGUL SYLLABLE PAE */ |
1122 | | 0xD344, /* LV # Lo HANGUL SYLLABLE PYA */ |
1123 | | 0xD360, /* LV # Lo HANGUL SYLLABLE PYAE */ |
1124 | | 0xD37C, /* LV # Lo HANGUL SYLLABLE PEO */ |
1125 | | 0xD398, /* LV # Lo HANGUL SYLLABLE PE */ |
1126 | | 0xD3B4, /* LV # Lo HANGUL SYLLABLE PYEO */ |
1127 | | 0xD3D0, /* LV # Lo HANGUL SYLLABLE PYE */ |
1128 | | 0xD3EC, /* LV # Lo HANGUL SYLLABLE PO */ |
1129 | | 0xD408, /* LV # Lo HANGUL SYLLABLE PWA */ |
1130 | | 0xD424, /* LV # Lo HANGUL SYLLABLE PWAE */ |
1131 | | 0xD440, /* LV # Lo HANGUL SYLLABLE POE */ |
1132 | | 0xD45C, /* LV # Lo HANGUL SYLLABLE PYO */ |
1133 | | 0xD478, /* LV # Lo HANGUL SYLLABLE PU */ |
1134 | | 0xD494, /* LV # Lo HANGUL SYLLABLE PWEO */ |
1135 | | 0xD4B0, /* LV # Lo HANGUL SYLLABLE PWE */ |
1136 | | 0xD4CC, /* LV # Lo HANGUL SYLLABLE PWI */ |
1137 | | 0xD4E8, /* LV # Lo HANGUL SYLLABLE PYU */ |
1138 | | 0xD504, /* LV # Lo HANGUL SYLLABLE PEU */ |
1139 | | 0xD520, /* LV # Lo HANGUL SYLLABLE PYI */ |
1140 | | 0xD53C, /* LV # Lo HANGUL SYLLABLE PI */ |
1141 | | 0xD558, /* LV # Lo HANGUL SYLLABLE HA */ |
1142 | | 0xD574, /* LV # Lo HANGUL SYLLABLE HAE */ |
1143 | | 0xD590, /* LV # Lo HANGUL SYLLABLE HYA */ |
1144 | | 0xD5AC, /* LV # Lo HANGUL SYLLABLE HYAE */ |
1145 | | 0xD5C8, /* LV # Lo HANGUL SYLLABLE HEO */ |
1146 | | 0xD5E4, /* LV # Lo HANGUL SYLLABLE HE */ |
1147 | | 0xD600, /* LV # Lo HANGUL SYLLABLE HYEO */ |
1148 | | 0xD61C, /* LV # Lo HANGUL SYLLABLE HYE */ |
1149 | | 0xD638, /* LV # Lo HANGUL SYLLABLE HO */ |
1150 | | 0xD654, /* LV # Lo HANGUL SYLLABLE HWA */ |
1151 | | 0xD670, /* LV # Lo HANGUL SYLLABLE HWAE */ |
1152 | | 0xD68C, /* LV # Lo HANGUL SYLLABLE HOE */ |
1153 | | 0xD6A8, /* LV # Lo HANGUL SYLLABLE HYO */ |
1154 | | 0xD6C4, /* LV # Lo HANGUL SYLLABLE HU */ |
1155 | | 0xD6E0, /* LV # Lo HANGUL SYLLABLE HWEO */ |
1156 | | 0xD6FC, /* LV # Lo HANGUL SYLLABLE HWE */ |
1157 | | 0xD718, /* LV # Lo HANGUL SYLLABLE HWI */ |
1158 | | 0xD734, /* LV # Lo HANGUL SYLLABLE HYU */ |
1159 | | 0xD750, /* LV # Lo HANGUL SYLLABLE HEU */ |
1160 | | 0xD76C, /* LV # Lo HANGUL SYLLABLE HYI */ |
1161 | | 0xD788, /* LV # Lo HANGUL SYLLABLE HI */ |
1162 | | 0 |
1163 | | }; |
1164 | | |
1165 | | static const uint32_t pr29_13_2[] = { |
1166 | | 0x11A8, 0x11A9, 0x11AA, 0x11AB, 0x11AC, 0x11AD, 0x11AE, 0x11AF, |
1167 | | 0x11B0, 0x11B1, 0x11B2, 0x11B3, 0x11B4, 0x11B5, 0x11B6, 0x11B7, |
1168 | | 0x11B8, 0x11B9, 0x11BA, 0x11BB, 0x11BC, 0x11BD, 0x11BE, 0x11BF, |
1169 | | 0x11C0, 0x11C1, 0x11C2, 0 |
1170 | | }; |
1171 | | |
1172 | | typedef struct |
1173 | | { |
1174 | | const uint32_t *first; |
1175 | | const uint32_t *last; |
1176 | | } Pr29; |
1177 | | |
1178 | | static const Pr29 pr29[] = { |
1179 | | {&pr29_1_1[0], &pr29_1_2[0]}, |
1180 | | {&pr29_2_1[0], &pr29_2_2[0]}, |
1181 | | {&pr29_3_1[0], &pr29_3_2[0]}, |
1182 | | {&pr29_4_1[0], &pr29_4_2[0]}, |
1183 | | {&pr29_5_1[0], &pr29_5_2[0]}, |
1184 | | {&pr29_6_1[0], &pr29_6_2[0]}, |
1185 | | {&pr29_7_1[0], &pr29_7_2[0]}, |
1186 | | {&pr29_8_1[0], &pr29_8_2[0]}, |
1187 | | {&pr29_9_1[0], &pr29_9_2[0]}, |
1188 | | {&pr29_10_1[0], &pr29_10_2[0]}, |
1189 | | {&pr29_11_1[0], &pr29_11_2[0]}, |
1190 | | {&pr29_12_1[0], &pr29_12_2[0]}, |
1191 | | {&pr29_13_1[0], &pr29_13_2[0]}, |
1192 | | {NULL, NULL} |
1193 | | }; |
1194 | | |
1195 | | static size_t |
1196 | | first_column (uint32_t c) |
1197 | 46.6k | { |
1198 | 46.6k | size_t i, j; |
1199 | | |
1200 | 650k | for (i = 0; pr29[i].first; i++) |
1201 | 20.4M | for (j = 0; pr29[i].first[j]; j++) |
1202 | 19.8M | if (c == pr29[i].first[j]) |
1203 | 807 | return i + 1; |
1204 | | |
1205 | 45.8k | return 0; |
1206 | 46.6k | } |
1207 | | |
1208 | | static int |
1209 | | in_last_column_row (uint32_t c, size_t row) |
1210 | 2.71k | { |
1211 | 2.71k | size_t i; |
1212 | | |
1213 | 62.7k | for (i = 0; pr29[row - 1].last[i]; i++) |
1214 | 60.0k | if (c == pr29[row - 1].last[i]) |
1215 | 7 | return 1; |
1216 | | |
1217 | 2.70k | return 0; |
1218 | 2.71k | } |
1219 | | |
1220 | | static size_t |
1221 | | combinationclass (uint32_t c) |
1222 | 28.2k | { |
1223 | 28.2k | size_t i; |
1224 | | |
1225 | 9.16M | for (i = 0; nzcc[i]; i++) |
1226 | 9.13M | if (c == nzcc[i]) |
1227 | 690 | return i + 1; |
1228 | | |
1229 | 27.5k | return 0; |
1230 | 28.2k | } |
1231 | | |
1232 | | /** |
1233 | | * pr29_4: |
1234 | | * @in: input array with unicode code points. |
1235 | | * @len: length of input array with unicode code points. |
1236 | | * |
1237 | | * Check the input to see if it may be normalized into different |
1238 | | * strings by different NFKC implementations, due to an anomaly in the |
1239 | | * NFKC specifications. |
1240 | | * |
1241 | | * Return value: Returns the #Pr29_rc value %PR29_SUCCESS on success, |
1242 | | * and %PR29_PROBLEM if the input sequence is a "problem sequence" |
1243 | | * (i.e., may be normalized into different strings by different |
1244 | | * implementations). |
1245 | | **/ |
1246 | | int |
1247 | | pr29_4 (const uint32_t *in, size_t len) |
1248 | 2.00k | { |
1249 | 2.00k | size_t i, j, k, row; |
1250 | | |
1251 | | /* |
1252 | | * The problem sequence are of the form: |
1253 | | * |
1254 | | * first_character intervening_character+ last_character |
1255 | | * |
1256 | | * where the first_character and last_character come from the same |
1257 | | * row in the following table, and there is at least one |
1258 | | * intervening_character with non-zero Canonical Combining |
1259 | | * Class. (The '+' above means one or more occurrences.) |
1260 | | * |
1261 | | */ |
1262 | | |
1263 | 48.6k | for (i = 0; i < len; i++) |
1264 | 46.6k | if ((row = first_column (in[i])) > 0) |
1265 | 29.0k | for (j = i + 1; j < len; j++) |
1266 | 28.2k | if (combinationclass (in[j])) |
1267 | 3.39k | for (k = j + 1; k < len; k++) |
1268 | 2.71k | if (in_last_column_row (in[k], row)) |
1269 | 7 | return PR29_PROBLEM; |
1270 | | |
1271 | 1.99k | return PR29_SUCCESS; |
1272 | 2.00k | } |
1273 | | |
1274 | | /** |
1275 | | * pr29_4z: |
1276 | | * @in: zero terminated array of Unicode code points. |
1277 | | * |
1278 | | * Check the input to see if it may be normalized into different |
1279 | | * strings by different NFKC implementations, due to an anomaly in the |
1280 | | * NFKC specifications. |
1281 | | * |
1282 | | * Return value: Returns the #Pr29_rc value %PR29_SUCCESS on success, |
1283 | | * and %PR29_PROBLEM if the input sequence is a "problem sequence" |
1284 | | * (i.e., may be normalized into different strings by different |
1285 | | * implementations). |
1286 | | **/ |
1287 | | int |
1288 | | pr29_4z (const uint32_t *in) |
1289 | 2.00k | { |
1290 | 2.00k | size_t len; |
1291 | | |
1292 | 48.7k | for (len = 0; in[len]; len++) |
1293 | 46.7k | ; |
1294 | | |
1295 | 2.00k | return pr29_4 (in, len); |
1296 | 2.00k | } |
1297 | | |
1298 | | /** |
1299 | | * pr29_8z: |
1300 | | * @in: zero terminated input UTF-8 string. |
1301 | | * |
1302 | | * Check the input to see if it may be normalized into different |
1303 | | * strings by different NFKC implementations, due to an anomaly in the |
1304 | | * NFKC specifications. |
1305 | | * |
1306 | | * Return value: Returns the #Pr29_rc value %PR29_SUCCESS on success, |
1307 | | * and %PR29_PROBLEM if the input sequence is a "problem sequence" |
1308 | | * (i.e., may be normalized into different strings by different |
1309 | | * implementations), or %PR29_STRINGPREP_ERROR if there was a |
1310 | | * problem converting the string from UTF-8 to UCS-4. |
1311 | | **/ |
1312 | | int |
1313 | | pr29_8z (const char *in) |
1314 | 2.71k | { |
1315 | 2.71k | uint32_t *p; |
1316 | 2.71k | int rc; |
1317 | | |
1318 | 2.71k | p = stringprep_utf8_to_ucs4 (in, -1, NULL); |
1319 | 2.71k | if (!p) |
1320 | 714 | return PR29_STRINGPREP_ERROR; |
1321 | | |
1322 | 2.00k | rc = pr29_4z (p); |
1323 | | |
1324 | 2.00k | free (p); |
1325 | | |
1326 | 2.00k | return rc; |
1327 | 2.71k | } |
1328 | | |
1329 | | /** |
1330 | | * Pr29_rc: |
1331 | | * @PR29_SUCCESS: Successful operation. This value is guaranteed to |
1332 | | * always be zero, the remaining ones are only guaranteed to hold |
1333 | | * non-zero values, for logical comparison purposes. |
1334 | | * @PR29_PROBLEM: A problem sequence was encountered. |
1335 | | * @PR29_STRINGPREP_ERROR: The character set conversion failed (only |
1336 | | * for pr29_8z()). |
1337 | | * |
1338 | | * Enumerated return codes for pr29_4(), pr29_4z(), pr29_8z(). The |
1339 | | * value 0 is guaranteed to always correspond to success. |
1340 | | */ |