Branch data Line data Source code
1 : : /* pr29.h --- Detect strings that are non-idempotent under NFKC in Unicode 3.2.
2 : : Copyright (C) 2004-2012 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 <http://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 : 63 : first_column (uint32_t c)
1197 : : {
1198 : : size_t i, j;
1199 : :
1200 [ + + ]: 798 : for (i = 0; pr29[i].first; i++)
1201 [ + + ]: 16533 : for (j = 0; pr29[i].first[j]; j++)
1202 [ + + ]: 15798 : if (c == pr29[i].first[j])
1203 : 27 : return i + 1;
1204 : :
1205 : 63 : return 0;
1206 : : }
1207 : :
1208 : : static int
1209 : 12 : in_last_column_row (uint32_t c, size_t row)
1210 : : {
1211 : : size_t i;
1212 : :
1213 [ + + ]: 75 : for (i = 0; pr29[row - 1].last[i]; i++)
1214 [ + + ]: 72 : if (c == pr29[row - 1].last[i])
1215 : 9 : return 1;
1216 : :
1217 : 12 : return 0;
1218 : : }
1219 : :
1220 : : static size_t
1221 : 33 : combinationclass (uint32_t c)
1222 : : {
1223 : : size_t i;
1224 : :
1225 [ + + ]: 8304 : for (i = 0; nzcc[i]; i++)
1226 [ + + ]: 8289 : if (c == nzcc[i])
1227 : 18 : return i + 1;
1228 : :
1229 : 33 : return 0;
1230 : : }
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 : 27 : pr29_4 (const uint32_t * in, size_t len)
1248 : : {
1249 : : 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 [ + + ]: 81 : for (i = 0; i < len; i++)
1264 [ + + ]: 63 : if ((row = first_column (in[i])) > 0)
1265 [ + + ]: 51 : for (j = i + 1; j < len; j++)
1266 [ + + ]: 33 : if (combinationclass (in[j]))
1267 [ + + ]: 21 : for (k = j + 1; k < len; k++)
1268 [ + + ]: 12 : if (in_last_column_row (in[k], row))
1269 : 9 : return PR29_PROBLEM;
1270 : :
1271 : 27 : return PR29_SUCCESS;
1272 : : }
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 : 18 : pr29_4z (const uint32_t * in)
1289 : : {
1290 : : size_t len;
1291 : :
1292 [ + + ]: 74 : for (len = 0; in[len]; len++)
1293 : : ;
1294 : :
1295 : 18 : return pr29_4 (in, len);
1296 : : }
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 : 9 : pr29_8z (const char *in)
1314 : : {
1315 : : uint32_t *p;
1316 : : int rc;
1317 : :
1318 : 9 : p = stringprep_utf8_to_ucs4 (in, -1, NULL);
1319 [ - + ]: 9 : if (!p)
1320 : 0 : return PR29_STRINGPREP_ERROR;
1321 : :
1322 : 9 : rc = pr29_4z (p);
1323 : :
1324 : 9 : free (p);
1325 : :
1326 : 9 : return rc;
1327 : : }
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 : : */
|