added Info.plist
[TestXSLT.git] / libxml2 / xmlunicode.c
1 /*
2  * xmlunicode.c: this module implements the Unicode character APIs
3  *
4  * This file is automatically generated from the
5  * UCS description files of the Unicode Character Database
6  * http://www.unicode.org/Public/3.1-Update/UnicodeCharacterDatabase-3.1.0.html
7  * using the genUnicode.py Python script.
8  *
9  * Generation date: Tue Apr 16 17:28:05 2002
10  * Sources: Blocks-4.txt UnicodeData-3.1.0.txt
11  * Daniel Veillard <veillard@redhat.com>
12  */
13
14 #define IN_LIBXML
15 #include "libxml.h"
16
17 #ifdef LIBXML_UNICODE_ENABLED
18
19 #include <string.h>
20 #include <libxml/xmlversion.h>
21 #include <libxml/xmlunicode.h>
22
23 /**
24  * xmlUCSIsAlphabeticPresentationForms:
25  * @code: UCS code point
26  *
27  * Check whether the character is part of AlphabeticPresentationForms UCS Block
28  *
29  * Returns 1 if true 0 otherwise
30  */
31 int
32 xmlUCSIsAlphabeticPresentationForms(int code) {
33     return((code >= 0xFB00) && (code <= 0xFB4F));
34 }
35
36 /**
37  * xmlUCSIsArabic:
38  * @code: UCS code point
39  *
40  * Check whether the character is part of Arabic UCS Block
41  *
42  * Returns 1 if true 0 otherwise
43  */
44 int
45 xmlUCSIsArabic(int code) {
46     return((code >= 0x0600) && (code <= 0x06FF));
47 }
48
49 /**
50  * xmlUCSIsArabicPresentationFormsA:
51  * @code: UCS code point
52  *
53  * Check whether the character is part of ArabicPresentationForms-A UCS Block
54  *
55  * Returns 1 if true 0 otherwise
56  */
57 int
58 xmlUCSIsArabicPresentationFormsA(int code) {
59     return((code >= 0xFB50) && (code <= 0xFDFF));
60 }
61
62 /**
63  * xmlUCSIsArabicPresentationFormsB:
64  * @code: UCS code point
65  *
66  * Check whether the character is part of ArabicPresentationForms-B UCS Block
67  *
68  * Returns 1 if true 0 otherwise
69  */
70 int
71 xmlUCSIsArabicPresentationFormsB(int code) {
72     return((code >= 0xFE70) && (code <= 0xFEFE));
73 }
74
75 /**
76  * xmlUCSIsArmenian:
77  * @code: UCS code point
78  *
79  * Check whether the character is part of Armenian UCS Block
80  *
81  * Returns 1 if true 0 otherwise
82  */
83 int
84 xmlUCSIsArmenian(int code) {
85     return((code >= 0x0530) && (code <= 0x058F));
86 }
87
88 /**
89  * xmlUCSIsArrows:
90  * @code: UCS code point
91  *
92  * Check whether the character is part of Arrows UCS Block
93  *
94  * Returns 1 if true 0 otherwise
95  */
96 int
97 xmlUCSIsArrows(int code) {
98     return((code >= 0x2190) && (code <= 0x21FF));
99 }
100
101 /**
102  * xmlUCSIsBasicLatin:
103  * @code: UCS code point
104  *
105  * Check whether the character is part of BasicLatin UCS Block
106  *
107  * Returns 1 if true 0 otherwise
108  */
109 int
110 xmlUCSIsBasicLatin(int code) {
111     return((code >= 0x0000) && (code <= 0x007F));
112 }
113
114 /**
115  * xmlUCSIsBengali:
116  * @code: UCS code point
117  *
118  * Check whether the character is part of Bengali UCS Block
119  *
120  * Returns 1 if true 0 otherwise
121  */
122 int
123 xmlUCSIsBengali(int code) {
124     return((code >= 0x0980) && (code <= 0x09FF));
125 }
126
127 /**
128  * xmlUCSIsBlockElements:
129  * @code: UCS code point
130  *
131  * Check whether the character is part of BlockElements UCS Block
132  *
133  * Returns 1 if true 0 otherwise
134  */
135 int
136 xmlUCSIsBlockElements(int code) {
137     return((code >= 0x2580) && (code <= 0x259F));
138 }
139
140 /**
141  * xmlUCSIsBopomofo:
142  * @code: UCS code point
143  *
144  * Check whether the character is part of Bopomofo UCS Block
145  *
146  * Returns 1 if true 0 otherwise
147  */
148 int
149 xmlUCSIsBopomofo(int code) {
150     return((code >= 0x3100) && (code <= 0x312F));
151 }
152
153 /**
154  * xmlUCSIsBopomofoExtended:
155  * @code: UCS code point
156  *
157  * Check whether the character is part of BopomofoExtended UCS Block
158  *
159  * Returns 1 if true 0 otherwise
160  */
161 int
162 xmlUCSIsBopomofoExtended(int code) {
163     return((code >= 0x31A0) && (code <= 0x31BF));
164 }
165
166 /**
167  * xmlUCSIsBoxDrawing:
168  * @code: UCS code point
169  *
170  * Check whether the character is part of BoxDrawing UCS Block
171  *
172  * Returns 1 if true 0 otherwise
173  */
174 int
175 xmlUCSIsBoxDrawing(int code) {
176     return((code >= 0x2500) && (code <= 0x257F));
177 }
178
179 /**
180  * xmlUCSIsBraillePatterns:
181  * @code: UCS code point
182  *
183  * Check whether the character is part of BraillePatterns UCS Block
184  *
185  * Returns 1 if true 0 otherwise
186  */
187 int
188 xmlUCSIsBraillePatterns(int code) {
189     return((code >= 0x2800) && (code <= 0x28FF));
190 }
191
192 /**
193  * xmlUCSIsByzantineMusicalSymbols:
194  * @code: UCS code point
195  *
196  * Check whether the character is part of ByzantineMusicalSymbols UCS Block
197  *
198  * Returns 1 if true 0 otherwise
199  */
200 int
201 xmlUCSIsByzantineMusicalSymbols(int code) {
202     return((code >= 0x1D000) && (code <= 0x1D0FF));
203 }
204
205 /**
206  * xmlUCSIsCJKCompatibility:
207  * @code: UCS code point
208  *
209  * Check whether the character is part of CJKCompatibility UCS Block
210  *
211  * Returns 1 if true 0 otherwise
212  */
213 int
214 xmlUCSIsCJKCompatibility(int code) {
215     return((code >= 0x3300) && (code <= 0x33FF));
216 }
217
218 /**
219  * xmlUCSIsCJKCompatibilityForms:
220  * @code: UCS code point
221  *
222  * Check whether the character is part of CJKCompatibilityForms UCS Block
223  *
224  * Returns 1 if true 0 otherwise
225  */
226 int
227 xmlUCSIsCJKCompatibilityForms(int code) {
228     return((code >= 0xFE30) && (code <= 0xFE4F));
229 }
230
231 /**
232  * xmlUCSIsCJKCompatibilityIdeographs:
233  * @code: UCS code point
234  *
235  * Check whether the character is part of CJKCompatibilityIdeographs UCS Block
236  *
237  * Returns 1 if true 0 otherwise
238  */
239 int
240 xmlUCSIsCJKCompatibilityIdeographs(int code) {
241     return((code >= 0xF900) && (code <= 0xFAFF));
242 }
243
244 /**
245  * xmlUCSIsCJKCompatibilityIdeographsSupplement:
246  * @code: UCS code point
247  *
248  * Check whether the character is part of CJKCompatibilityIdeographsSupplement UCS Block
249  *
250  * Returns 1 if true 0 otherwise
251  */
252 int
253 xmlUCSIsCJKCompatibilityIdeographsSupplement(int code) {
254     return((code >= 0x2F800) && (code <= 0x2FA1F));
255 }
256
257 /**
258  * xmlUCSIsCJKRadicalsSupplement:
259  * @code: UCS code point
260  *
261  * Check whether the character is part of CJKRadicalsSupplement UCS Block
262  *
263  * Returns 1 if true 0 otherwise
264  */
265 int
266 xmlUCSIsCJKRadicalsSupplement(int code) {
267     return((code >= 0x2E80) && (code <= 0x2EFF));
268 }
269
270 /**
271  * xmlUCSIsCJKSymbolsandPunctuation:
272  * @code: UCS code point
273  *
274  * Check whether the character is part of CJKSymbolsandPunctuation UCS Block
275  *
276  * Returns 1 if true 0 otherwise
277  */
278 int
279 xmlUCSIsCJKSymbolsandPunctuation(int code) {
280     return((code >= 0x3000) && (code <= 0x303F));
281 }
282
283 /**
284  * xmlUCSIsCJKUnifiedIdeographs:
285  * @code: UCS code point
286  *
287  * Check whether the character is part of CJKUnifiedIdeographs UCS Block
288  *
289  * Returns 1 if true 0 otherwise
290  */
291 int
292 xmlUCSIsCJKUnifiedIdeographs(int code) {
293     return((code >= 0x4E00) && (code <= 0x9FFF));
294 }
295
296 /**
297  * xmlUCSIsCJKUnifiedIdeographsExtensionA:
298  * @code: UCS code point
299  *
300  * Check whether the character is part of CJKUnifiedIdeographsExtensionA UCS Block
301  *
302  * Returns 1 if true 0 otherwise
303  */
304 int
305 xmlUCSIsCJKUnifiedIdeographsExtensionA(int code) {
306     return((code >= 0x3400) && (code <= 0x4DB5));
307 }
308
309 /**
310  * xmlUCSIsCJKUnifiedIdeographsExtensionB:
311  * @code: UCS code point
312  *
313  * Check whether the character is part of CJKUnifiedIdeographsExtensionB UCS Block
314  *
315  * Returns 1 if true 0 otherwise
316  */
317 int
318 xmlUCSIsCJKUnifiedIdeographsExtensionB(int code) {
319     return((code >= 0x20000) && (code <= 0x2A6D6));
320 }
321
322 /**
323  * xmlUCSIsCherokee:
324  * @code: UCS code point
325  *
326  * Check whether the character is part of Cherokee UCS Block
327  *
328  * Returns 1 if true 0 otherwise
329  */
330 int
331 xmlUCSIsCherokee(int code) {
332     return((code >= 0x13A0) && (code <= 0x13FF));
333 }
334
335 /**
336  * xmlUCSIsCombiningDiacriticalMarks:
337  * @code: UCS code point
338  *
339  * Check whether the character is part of CombiningDiacriticalMarks UCS Block
340  *
341  * Returns 1 if true 0 otherwise
342  */
343 int
344 xmlUCSIsCombiningDiacriticalMarks(int code) {
345     return((code >= 0x0300) && (code <= 0x036F));
346 }
347
348 /**
349  * xmlUCSIsCombiningHalfMarks:
350  * @code: UCS code point
351  *
352  * Check whether the character is part of CombiningHalfMarks UCS Block
353  *
354  * Returns 1 if true 0 otherwise
355  */
356 int
357 xmlUCSIsCombiningHalfMarks(int code) {
358     return((code >= 0xFE20) && (code <= 0xFE2F));
359 }
360
361 /**
362  * xmlUCSIsCombiningMarksforSymbols:
363  * @code: UCS code point
364  *
365  * Check whether the character is part of CombiningMarksforSymbols UCS Block
366  *
367  * Returns 1 if true 0 otherwise
368  */
369 int
370 xmlUCSIsCombiningMarksforSymbols(int code) {
371     return((code >= 0x20D0) && (code <= 0x20FF));
372 }
373
374 /**
375  * xmlUCSIsControlPictures:
376  * @code: UCS code point
377  *
378  * Check whether the character is part of ControlPictures UCS Block
379  *
380  * Returns 1 if true 0 otherwise
381  */
382 int
383 xmlUCSIsControlPictures(int code) {
384     return((code >= 0x2400) && (code <= 0x243F));
385 }
386
387 /**
388  * xmlUCSIsCurrencySymbols:
389  * @code: UCS code point
390  *
391  * Check whether the character is part of CurrencySymbols UCS Block
392  *
393  * Returns 1 if true 0 otherwise
394  */
395 int
396 xmlUCSIsCurrencySymbols(int code) {
397     return((code >= 0x20A0) && (code <= 0x20CF));
398 }
399
400 /**
401  * xmlUCSIsCyrillic:
402  * @code: UCS code point
403  *
404  * Check whether the character is part of Cyrillic UCS Block
405  *
406  * Returns 1 if true 0 otherwise
407  */
408 int
409 xmlUCSIsCyrillic(int code) {
410     return((code >= 0x0400) && (code <= 0x04FF));
411 }
412
413 /**
414  * xmlUCSIsDeseret:
415  * @code: UCS code point
416  *
417  * Check whether the character is part of Deseret UCS Block
418  *
419  * Returns 1 if true 0 otherwise
420  */
421 int
422 xmlUCSIsDeseret(int code) {
423     return((code >= 0x10400) && (code <= 0x1044F));
424 }
425
426 /**
427  * xmlUCSIsDevanagari:
428  * @code: UCS code point
429  *
430  * Check whether the character is part of Devanagari UCS Block
431  *
432  * Returns 1 if true 0 otherwise
433  */
434 int
435 xmlUCSIsDevanagari(int code) {
436     return((code >= 0x0900) && (code <= 0x097F));
437 }
438
439 /**
440  * xmlUCSIsDingbats:
441  * @code: UCS code point
442  *
443  * Check whether the character is part of Dingbats UCS Block
444  *
445  * Returns 1 if true 0 otherwise
446  */
447 int
448 xmlUCSIsDingbats(int code) {
449     return((code >= 0x2700) && (code <= 0x27BF));
450 }
451
452 /**
453  * xmlUCSIsEnclosedAlphanumerics:
454  * @code: UCS code point
455  *
456  * Check whether the character is part of EnclosedAlphanumerics UCS Block
457  *
458  * Returns 1 if true 0 otherwise
459  */
460 int
461 xmlUCSIsEnclosedAlphanumerics(int code) {
462     return((code >= 0x2460) && (code <= 0x24FF));
463 }
464
465 /**
466  * xmlUCSIsEnclosedCJKLettersandMonths:
467  * @code: UCS code point
468  *
469  * Check whether the character is part of EnclosedCJKLettersandMonths UCS Block
470  *
471  * Returns 1 if true 0 otherwise
472  */
473 int
474 xmlUCSIsEnclosedCJKLettersandMonths(int code) {
475     return((code >= 0x3200) && (code <= 0x32FF));
476 }
477
478 /**
479  * xmlUCSIsEthiopic:
480  * @code: UCS code point
481  *
482  * Check whether the character is part of Ethiopic UCS Block
483  *
484  * Returns 1 if true 0 otherwise
485  */
486 int
487 xmlUCSIsEthiopic(int code) {
488     return((code >= 0x1200) && (code <= 0x137F));
489 }
490
491 /**
492  * xmlUCSIsGeneralPunctuation:
493  * @code: UCS code point
494  *
495  * Check whether the character is part of GeneralPunctuation UCS Block
496  *
497  * Returns 1 if true 0 otherwise
498  */
499 int
500 xmlUCSIsGeneralPunctuation(int code) {
501     return((code >= 0x2000) && (code <= 0x206F));
502 }
503
504 /**
505  * xmlUCSIsGeometricShapes:
506  * @code: UCS code point
507  *
508  * Check whether the character is part of GeometricShapes UCS Block
509  *
510  * Returns 1 if true 0 otherwise
511  */
512 int
513 xmlUCSIsGeometricShapes(int code) {
514     return((code >= 0x25A0) && (code <= 0x25FF));
515 }
516
517 /**
518  * xmlUCSIsGeorgian:
519  * @code: UCS code point
520  *
521  * Check whether the character is part of Georgian UCS Block
522  *
523  * Returns 1 if true 0 otherwise
524  */
525 int
526 xmlUCSIsGeorgian(int code) {
527     return((code >= 0x10A0) && (code <= 0x10FF));
528 }
529
530 /**
531  * xmlUCSIsGothic:
532  * @code: UCS code point
533  *
534  * Check whether the character is part of Gothic UCS Block
535  *
536  * Returns 1 if true 0 otherwise
537  */
538 int
539 xmlUCSIsGothic(int code) {
540     return((code >= 0x10330) && (code <= 0x1034F));
541 }
542
543 /**
544  * xmlUCSIsGreek:
545  * @code: UCS code point
546  *
547  * Check whether the character is part of Greek UCS Block
548  *
549  * Returns 1 if true 0 otherwise
550  */
551 int
552 xmlUCSIsGreek(int code) {
553     return((code >= 0x0370) && (code <= 0x03FF));
554 }
555
556 /**
557  * xmlUCSIsGreekExtended:
558  * @code: UCS code point
559  *
560  * Check whether the character is part of GreekExtended UCS Block
561  *
562  * Returns 1 if true 0 otherwise
563  */
564 int
565 xmlUCSIsGreekExtended(int code) {
566     return((code >= 0x1F00) && (code <= 0x1FFF));
567 }
568
569 /**
570  * xmlUCSIsGujarati:
571  * @code: UCS code point
572  *
573  * Check whether the character is part of Gujarati UCS Block
574  *
575  * Returns 1 if true 0 otherwise
576  */
577 int
578 xmlUCSIsGujarati(int code) {
579     return((code >= 0x0A80) && (code <= 0x0AFF));
580 }
581
582 /**
583  * xmlUCSIsGurmukhi:
584  * @code: UCS code point
585  *
586  * Check whether the character is part of Gurmukhi UCS Block
587  *
588  * Returns 1 if true 0 otherwise
589  */
590 int
591 xmlUCSIsGurmukhi(int code) {
592     return((code >= 0x0A00) && (code <= 0x0A7F));
593 }
594
595 /**
596  * xmlUCSIsHalfwidthandFullwidthForms:
597  * @code: UCS code point
598  *
599  * Check whether the character is part of HalfwidthandFullwidthForms UCS Block
600  *
601  * Returns 1 if true 0 otherwise
602  */
603 int
604 xmlUCSIsHalfwidthandFullwidthForms(int code) {
605     return((code >= 0xFF00) && (code <= 0xFFEF));
606 }
607
608 /**
609  * xmlUCSIsHangulCompatibilityJamo:
610  * @code: UCS code point
611  *
612  * Check whether the character is part of HangulCompatibilityJamo UCS Block
613  *
614  * Returns 1 if true 0 otherwise
615  */
616 int
617 xmlUCSIsHangulCompatibilityJamo(int code) {
618     return((code >= 0x3130) && (code <= 0x318F));
619 }
620
621 /**
622  * xmlUCSIsHangulJamo:
623  * @code: UCS code point
624  *
625  * Check whether the character is part of HangulJamo UCS Block
626  *
627  * Returns 1 if true 0 otherwise
628  */
629 int
630 xmlUCSIsHangulJamo(int code) {
631     return((code >= 0x1100) && (code <= 0x11FF));
632 }
633
634 /**
635  * xmlUCSIsHangulSyllables:
636  * @code: UCS code point
637  *
638  * Check whether the character is part of HangulSyllables UCS Block
639  *
640  * Returns 1 if true 0 otherwise
641  */
642 int
643 xmlUCSIsHangulSyllables(int code) {
644     return((code >= 0xAC00) && (code <= 0xD7A3));
645 }
646
647 /**
648  * xmlUCSIsHebrew:
649  * @code: UCS code point
650  *
651  * Check whether the character is part of Hebrew UCS Block
652  *
653  * Returns 1 if true 0 otherwise
654  */
655 int
656 xmlUCSIsHebrew(int code) {
657     return((code >= 0x0590) && (code <= 0x05FF));
658 }
659
660 /**
661  * xmlUCSIsHighPrivateUseSurrogates:
662  * @code: UCS code point
663  *
664  * Check whether the character is part of HighPrivateUseSurrogates UCS Block
665  *
666  * Returns 1 if true 0 otherwise
667  */
668 int
669 xmlUCSIsHighPrivateUseSurrogates(int code) {
670     return((code >= 0xDB80) && (code <= 0xDBFF));
671 }
672
673 /**
674  * xmlUCSIsHighSurrogates:
675  * @code: UCS code point
676  *
677  * Check whether the character is part of HighSurrogates UCS Block
678  *
679  * Returns 1 if true 0 otherwise
680  */
681 int
682 xmlUCSIsHighSurrogates(int code) {
683     return((code >= 0xD800) && (code <= 0xDB7F));
684 }
685
686 /**
687  * xmlUCSIsHiragana:
688  * @code: UCS code point
689  *
690  * Check whether the character is part of Hiragana UCS Block
691  *
692  * Returns 1 if true 0 otherwise
693  */
694 int
695 xmlUCSIsHiragana(int code) {
696     return((code >= 0x3040) && (code <= 0x309F));
697 }
698
699 /**
700  * xmlUCSIsIPAExtensions:
701  * @code: UCS code point
702  *
703  * Check whether the character is part of IPAExtensions UCS Block
704  *
705  * Returns 1 if true 0 otherwise
706  */
707 int
708 xmlUCSIsIPAExtensions(int code) {
709     return((code >= 0x0250) && (code <= 0x02AF));
710 }
711
712 /**
713  * xmlUCSIsIdeographicDescriptionCharacters:
714  * @code: UCS code point
715  *
716  * Check whether the character is part of IdeographicDescriptionCharacters UCS Block
717  *
718  * Returns 1 if true 0 otherwise
719  */
720 int
721 xmlUCSIsIdeographicDescriptionCharacters(int code) {
722     return((code >= 0x2FF0) && (code <= 0x2FFF));
723 }
724
725 /**
726  * xmlUCSIsKanbun:
727  * @code: UCS code point
728  *
729  * Check whether the character is part of Kanbun UCS Block
730  *
731  * Returns 1 if true 0 otherwise
732  */
733 int
734 xmlUCSIsKanbun(int code) {
735     return((code >= 0x3190) && (code <= 0x319F));
736 }
737
738 /**
739  * xmlUCSIsKangxiRadicals:
740  * @code: UCS code point
741  *
742  * Check whether the character is part of KangxiRadicals UCS Block
743  *
744  * Returns 1 if true 0 otherwise
745  */
746 int
747 xmlUCSIsKangxiRadicals(int code) {
748     return((code >= 0x2F00) && (code <= 0x2FDF));
749 }
750
751 /**
752  * xmlUCSIsKannada:
753  * @code: UCS code point
754  *
755  * Check whether the character is part of Kannada UCS Block
756  *
757  * Returns 1 if true 0 otherwise
758  */
759 int
760 xmlUCSIsKannada(int code) {
761     return((code >= 0x0C80) && (code <= 0x0CFF));
762 }
763
764 /**
765  * xmlUCSIsKatakana:
766  * @code: UCS code point
767  *
768  * Check whether the character is part of Katakana UCS Block
769  *
770  * Returns 1 if true 0 otherwise
771  */
772 int
773 xmlUCSIsKatakana(int code) {
774     return((code >= 0x30A0) && (code <= 0x30FF));
775 }
776
777 /**
778  * xmlUCSIsKhmer:
779  * @code: UCS code point
780  *
781  * Check whether the character is part of Khmer UCS Block
782  *
783  * Returns 1 if true 0 otherwise
784  */
785 int
786 xmlUCSIsKhmer(int code) {
787     return((code >= 0x1780) && (code <= 0x17FF));
788 }
789
790 /**
791  * xmlUCSIsLao:
792  * @code: UCS code point
793  *
794  * Check whether the character is part of Lao UCS Block
795  *
796  * Returns 1 if true 0 otherwise
797  */
798 int
799 xmlUCSIsLao(int code) {
800     return((code >= 0x0E80) && (code <= 0x0EFF));
801 }
802
803 /**
804  * xmlUCSIsLatin1Supplement:
805  * @code: UCS code point
806  *
807  * Check whether the character is part of Latin-1Supplement UCS Block
808  *
809  * Returns 1 if true 0 otherwise
810  */
811 int
812 xmlUCSIsLatin1Supplement(int code) {
813     return((code >= 0x0080) && (code <= 0x00FF));
814 }
815
816 /**
817  * xmlUCSIsLatinExtendedA:
818  * @code: UCS code point
819  *
820  * Check whether the character is part of LatinExtended-A UCS Block
821  *
822  * Returns 1 if true 0 otherwise
823  */
824 int
825 xmlUCSIsLatinExtendedA(int code) {
826     return((code >= 0x0100) && (code <= 0x017F));
827 }
828
829 /**
830  * xmlUCSIsLatinExtendedB:
831  * @code: UCS code point
832  *
833  * Check whether the character is part of LatinExtended-B UCS Block
834  *
835  * Returns 1 if true 0 otherwise
836  */
837 int
838 xmlUCSIsLatinExtendedB(int code) {
839     return((code >= 0x0180) && (code <= 0x024F));
840 }
841
842 /**
843  * xmlUCSIsLatinExtendedAdditional:
844  * @code: UCS code point
845  *
846  * Check whether the character is part of LatinExtendedAdditional UCS Block
847  *
848  * Returns 1 if true 0 otherwise
849  */
850 int
851 xmlUCSIsLatinExtendedAdditional(int code) {
852     return((code >= 0x1E00) && (code <= 0x1EFF));
853 }
854
855 /**
856  * xmlUCSIsLetterlikeSymbols:
857  * @code: UCS code point
858  *
859  * Check whether the character is part of LetterlikeSymbols UCS Block
860  *
861  * Returns 1 if true 0 otherwise
862  */
863 int
864 xmlUCSIsLetterlikeSymbols(int code) {
865     return((code >= 0x2100) && (code <= 0x214F));
866 }
867
868 /**
869  * xmlUCSIsLowSurrogates:
870  * @code: UCS code point
871  *
872  * Check whether the character is part of LowSurrogates UCS Block
873  *
874  * Returns 1 if true 0 otherwise
875  */
876 int
877 xmlUCSIsLowSurrogates(int code) {
878     return((code >= 0xDC00) && (code <= 0xDFFF));
879 }
880
881 /**
882  * xmlUCSIsMalayalam:
883  * @code: UCS code point
884  *
885  * Check whether the character is part of Malayalam UCS Block
886  *
887  * Returns 1 if true 0 otherwise
888  */
889 int
890 xmlUCSIsMalayalam(int code) {
891     return((code >= 0x0D00) && (code <= 0x0D7F));
892 }
893
894 /**
895  * xmlUCSIsMathematicalAlphanumericSymbols:
896  * @code: UCS code point
897  *
898  * Check whether the character is part of MathematicalAlphanumericSymbols UCS Block
899  *
900  * Returns 1 if true 0 otherwise
901  */
902 int
903 xmlUCSIsMathematicalAlphanumericSymbols(int code) {
904     return((code >= 0x1D400) && (code <= 0x1D7FF));
905 }
906
907 /**
908  * xmlUCSIsMathematicalOperators:
909  * @code: UCS code point
910  *
911  * Check whether the character is part of MathematicalOperators UCS Block
912  *
913  * Returns 1 if true 0 otherwise
914  */
915 int
916 xmlUCSIsMathematicalOperators(int code) {
917     return((code >= 0x2200) && (code <= 0x22FF));
918 }
919
920 /**
921  * xmlUCSIsMiscellaneousSymbols:
922  * @code: UCS code point
923  *
924  * Check whether the character is part of MiscellaneousSymbols UCS Block
925  *
926  * Returns 1 if true 0 otherwise
927  */
928 int
929 xmlUCSIsMiscellaneousSymbols(int code) {
930     return((code >= 0x2600) && (code <= 0x26FF));
931 }
932
933 /**
934  * xmlUCSIsMiscellaneousTechnical:
935  * @code: UCS code point
936  *
937  * Check whether the character is part of MiscellaneousTechnical UCS Block
938  *
939  * Returns 1 if true 0 otherwise
940  */
941 int
942 xmlUCSIsMiscellaneousTechnical(int code) {
943     return((code >= 0x2300) && (code <= 0x23FF));
944 }
945
946 /**
947  * xmlUCSIsMongolian:
948  * @code: UCS code point
949  *
950  * Check whether the character is part of Mongolian UCS Block
951  *
952  * Returns 1 if true 0 otherwise
953  */
954 int
955 xmlUCSIsMongolian(int code) {
956     return((code >= 0x1800) && (code <= 0x18AF));
957 }
958
959 /**
960  * xmlUCSIsMusicalSymbols:
961  * @code: UCS code point
962  *
963  * Check whether the character is part of MusicalSymbols UCS Block
964  *
965  * Returns 1 if true 0 otherwise
966  */
967 int
968 xmlUCSIsMusicalSymbols(int code) {
969     return((code >= 0x1D100) && (code <= 0x1D1FF));
970 }
971
972 /**
973  * xmlUCSIsMyanmar:
974  * @code: UCS code point
975  *
976  * Check whether the character is part of Myanmar UCS Block
977  *
978  * Returns 1 if true 0 otherwise
979  */
980 int
981 xmlUCSIsMyanmar(int code) {
982     return((code >= 0x1000) && (code <= 0x109F));
983 }
984
985 /**
986  * xmlUCSIsNumberForms:
987  * @code: UCS code point
988  *
989  * Check whether the character is part of NumberForms UCS Block
990  *
991  * Returns 1 if true 0 otherwise
992  */
993 int
994 xmlUCSIsNumberForms(int code) {
995     return((code >= 0x2150) && (code <= 0x218F));
996 }
997
998 /**
999  * xmlUCSIsOgham:
1000  * @code: UCS code point
1001  *
1002  * Check whether the character is part of Ogham UCS Block
1003  *
1004  * Returns 1 if true 0 otherwise
1005  */
1006 int
1007 xmlUCSIsOgham(int code) {
1008     return((code >= 0x1680) && (code <= 0x169F));
1009 }
1010
1011 /**
1012  * xmlUCSIsOldItalic:
1013  * @code: UCS code point
1014  *
1015  * Check whether the character is part of OldItalic UCS Block
1016  *
1017  * Returns 1 if true 0 otherwise
1018  */
1019 int
1020 xmlUCSIsOldItalic(int code) {
1021     return((code >= 0x10300) && (code <= 0x1032F));
1022 }
1023
1024 /**
1025  * xmlUCSIsOpticalCharacterRecognition:
1026  * @code: UCS code point
1027  *
1028  * Check whether the character is part of OpticalCharacterRecognition UCS Block
1029  *
1030  * Returns 1 if true 0 otherwise
1031  */
1032 int
1033 xmlUCSIsOpticalCharacterRecognition(int code) {
1034     return((code >= 0x2440) && (code <= 0x245F));
1035 }
1036
1037 /**
1038  * xmlUCSIsOriya:
1039  * @code: UCS code point
1040  *
1041  * Check whether the character is part of Oriya UCS Block
1042  *
1043  * Returns 1 if true 0 otherwise
1044  */
1045 int
1046 xmlUCSIsOriya(int code) {
1047     return((code >= 0x0B00) && (code <= 0x0B7F));
1048 }
1049
1050 /**
1051  * xmlUCSIsPrivateUse:
1052  * @code: UCS code point
1053  *
1054  * Check whether the character is part of PrivateUse UCS Block
1055  *
1056  * Returns 1 if true 0 otherwise
1057  */
1058 int
1059 xmlUCSIsPrivateUse(int code) {
1060     return((code >= 0x100000) && (code <= 0x10FFFD));
1061 }
1062
1063 /**
1064  * xmlUCSIsRunic:
1065  * @code: UCS code point
1066  *
1067  * Check whether the character is part of Runic UCS Block
1068  *
1069  * Returns 1 if true 0 otherwise
1070  */
1071 int
1072 xmlUCSIsRunic(int code) {
1073     return((code >= 0x16A0) && (code <= 0x16FF));
1074 }
1075
1076 /**
1077  * xmlUCSIsSinhala:
1078  * @code: UCS code point
1079  *
1080  * Check whether the character is part of Sinhala UCS Block
1081  *
1082  * Returns 1 if true 0 otherwise
1083  */
1084 int
1085 xmlUCSIsSinhala(int code) {
1086     return((code >= 0x0D80) && (code <= 0x0DFF));
1087 }
1088
1089 /**
1090  * xmlUCSIsSmallFormVariants:
1091  * @code: UCS code point
1092  *
1093  * Check whether the character is part of SmallFormVariants UCS Block
1094  *
1095  * Returns 1 if true 0 otherwise
1096  */
1097 int
1098 xmlUCSIsSmallFormVariants(int code) {
1099     return((code >= 0xFE50) && (code <= 0xFE6F));
1100 }
1101
1102 /**
1103  * xmlUCSIsSpacingModifierLetters:
1104  * @code: UCS code point
1105  *
1106  * Check whether the character is part of SpacingModifierLetters UCS Block
1107  *
1108  * Returns 1 if true 0 otherwise
1109  */
1110 int
1111 xmlUCSIsSpacingModifierLetters(int code) {
1112     return((code >= 0x02B0) && (code <= 0x02FF));
1113 }
1114
1115 /**
1116  * xmlUCSIsSpecials:
1117  * @code: UCS code point
1118  *
1119  * Check whether the character is part of Specials UCS Block
1120  *
1121  * Returns 1 if true 0 otherwise
1122  */
1123 int
1124 xmlUCSIsSpecials(int code) {
1125     return((code >= 0xFFF0) && (code <= 0xFFFD));
1126 }
1127
1128 /**
1129  * xmlUCSIsSuperscriptsandSubscripts:
1130  * @code: UCS code point
1131  *
1132  * Check whether the character is part of SuperscriptsandSubscripts UCS Block
1133  *
1134  * Returns 1 if true 0 otherwise
1135  */
1136 int
1137 xmlUCSIsSuperscriptsandSubscripts(int code) {
1138     return((code >= 0x2070) && (code <= 0x209F));
1139 }
1140
1141 /**
1142  * xmlUCSIsSyriac:
1143  * @code: UCS code point
1144  *
1145  * Check whether the character is part of Syriac UCS Block
1146  *
1147  * Returns 1 if true 0 otherwise
1148  */
1149 int
1150 xmlUCSIsSyriac(int code) {
1151     return((code >= 0x0700) && (code <= 0x074F));
1152 }
1153
1154 /**
1155  * xmlUCSIsTags:
1156  * @code: UCS code point
1157  *
1158  * Check whether the character is part of Tags UCS Block
1159  *
1160  * Returns 1 if true 0 otherwise
1161  */
1162 int
1163 xmlUCSIsTags(int code) {
1164     return((code >= 0xE0000) && (code <= 0xE007F));
1165 }
1166
1167 /**
1168  * xmlUCSIsTamil:
1169  * @code: UCS code point
1170  *
1171  * Check whether the character is part of Tamil UCS Block
1172  *
1173  * Returns 1 if true 0 otherwise
1174  */
1175 int
1176 xmlUCSIsTamil(int code) {
1177     return((code >= 0x0B80) && (code <= 0x0BFF));
1178 }
1179
1180 /**
1181  * xmlUCSIsTelugu:
1182  * @code: UCS code point
1183  *
1184  * Check whether the character is part of Telugu UCS Block
1185  *
1186  * Returns 1 if true 0 otherwise
1187  */
1188 int
1189 xmlUCSIsTelugu(int code) {
1190     return((code >= 0x0C00) && (code <= 0x0C7F));
1191 }
1192
1193 /**
1194  * xmlUCSIsThaana:
1195  * @code: UCS code point
1196  *
1197  * Check whether the character is part of Thaana UCS Block
1198  *
1199  * Returns 1 if true 0 otherwise
1200  */
1201 int
1202 xmlUCSIsThaana(int code) {
1203     return((code >= 0x0780) && (code <= 0x07BF));
1204 }
1205
1206 /**
1207  * xmlUCSIsThai:
1208  * @code: UCS code point
1209  *
1210  * Check whether the character is part of Thai UCS Block
1211  *
1212  * Returns 1 if true 0 otherwise
1213  */
1214 int
1215 xmlUCSIsThai(int code) {
1216     return((code >= 0x0E00) && (code <= 0x0E7F));
1217 }
1218
1219 /**
1220  * xmlUCSIsTibetan:
1221  * @code: UCS code point
1222  *
1223  * Check whether the character is part of Tibetan UCS Block
1224  *
1225  * Returns 1 if true 0 otherwise
1226  */
1227 int
1228 xmlUCSIsTibetan(int code) {
1229     return((code >= 0x0F00) && (code <= 0x0FFF));
1230 }
1231
1232 /**
1233  * xmlUCSIsUnifiedCanadianAboriginalSyllabics:
1234  * @code: UCS code point
1235  *
1236  * Check whether the character is part of UnifiedCanadianAboriginalSyllabics UCS Block
1237  *
1238  * Returns 1 if true 0 otherwise
1239  */
1240 int
1241 xmlUCSIsUnifiedCanadianAboriginalSyllabics(int code) {
1242     return((code >= 0x1400) && (code <= 0x167F));
1243 }
1244
1245 /**
1246  * xmlUCSIsYiRadicals:
1247  * @code: UCS code point
1248  *
1249  * Check whether the character is part of YiRadicals UCS Block
1250  *
1251  * Returns 1 if true 0 otherwise
1252  */
1253 int
1254 xmlUCSIsYiRadicals(int code) {
1255     return((code >= 0xA490) && (code <= 0xA4CF));
1256 }
1257
1258 /**
1259  * xmlUCSIsYiSyllables:
1260  * @code: UCS code point
1261  *
1262  * Check whether the character is part of YiSyllables UCS Block
1263  *
1264  * Returns 1 if true 0 otherwise
1265  */
1266 int
1267 xmlUCSIsYiSyllables(int code) {
1268     return((code >= 0xA000) && (code <= 0xA48F));
1269 }
1270
1271 /**
1272  * xmlUCSIsBlock:
1273  * @code: UCS code point
1274  * @block: UCS block name
1275  *
1276  * Check whether the caracter is part of the UCS Block
1277  *
1278  * Returns 1 if true, 0 if false and -1 on unknown block
1279  */
1280 int
1281 xmlUCSIsBlock(int code, const char *block) {
1282     if (!strcmp(block, "AlphabeticPresentationForms"))
1283         return(xmlUCSIsAlphabeticPresentationForms(code));
1284     if (!strcmp(block, "Arabic"))
1285         return(xmlUCSIsArabic(code));
1286     if (!strcmp(block, "ArabicPresentationForms-A"))
1287         return(xmlUCSIsArabicPresentationFormsA(code));
1288     if (!strcmp(block, "ArabicPresentationForms-B"))
1289         return(xmlUCSIsArabicPresentationFormsB(code));
1290     if (!strcmp(block, "Armenian"))
1291         return(xmlUCSIsArmenian(code));
1292     if (!strcmp(block, "Arrows"))
1293         return(xmlUCSIsArrows(code));
1294     if (!strcmp(block, "BasicLatin"))
1295         return(xmlUCSIsBasicLatin(code));
1296     if (!strcmp(block, "Bengali"))
1297         return(xmlUCSIsBengali(code));
1298     if (!strcmp(block, "BlockElements"))
1299         return(xmlUCSIsBlockElements(code));
1300     if (!strcmp(block, "Bopomofo"))
1301         return(xmlUCSIsBopomofo(code));
1302     if (!strcmp(block, "BopomofoExtended"))
1303         return(xmlUCSIsBopomofoExtended(code));
1304     if (!strcmp(block, "BoxDrawing"))
1305         return(xmlUCSIsBoxDrawing(code));
1306     if (!strcmp(block, "BraillePatterns"))
1307         return(xmlUCSIsBraillePatterns(code));
1308     if (!strcmp(block, "ByzantineMusicalSymbols"))
1309         return(xmlUCSIsByzantineMusicalSymbols(code));
1310     if (!strcmp(block, "CJKCompatibility"))
1311         return(xmlUCSIsCJKCompatibility(code));
1312     if (!strcmp(block, "CJKCompatibilityForms"))
1313         return(xmlUCSIsCJKCompatibilityForms(code));
1314     if (!strcmp(block, "CJKCompatibilityIdeographs"))
1315         return(xmlUCSIsCJKCompatibilityIdeographs(code));
1316     if (!strcmp(block, "CJKCompatibilityIdeographsSupplement"))
1317         return(xmlUCSIsCJKCompatibilityIdeographsSupplement(code));
1318     if (!strcmp(block, "CJKRadicalsSupplement"))
1319         return(xmlUCSIsCJKRadicalsSupplement(code));
1320     if (!strcmp(block, "CJKSymbolsandPunctuation"))
1321         return(xmlUCSIsCJKSymbolsandPunctuation(code));
1322     if (!strcmp(block, "CJKUnifiedIdeographs"))
1323         return(xmlUCSIsCJKUnifiedIdeographs(code));
1324     if (!strcmp(block, "CJKUnifiedIdeographsExtensionA"))
1325         return(xmlUCSIsCJKUnifiedIdeographsExtensionA(code));
1326     if (!strcmp(block, "CJKUnifiedIdeographsExtensionB"))
1327         return(xmlUCSIsCJKUnifiedIdeographsExtensionB(code));
1328     if (!strcmp(block, "Cherokee"))
1329         return(xmlUCSIsCherokee(code));
1330     if (!strcmp(block, "CombiningDiacriticalMarks"))
1331         return(xmlUCSIsCombiningDiacriticalMarks(code));
1332     if (!strcmp(block, "CombiningHalfMarks"))
1333         return(xmlUCSIsCombiningHalfMarks(code));
1334     if (!strcmp(block, "CombiningMarksforSymbols"))
1335         return(xmlUCSIsCombiningMarksforSymbols(code));
1336     if (!strcmp(block, "ControlPictures"))
1337         return(xmlUCSIsControlPictures(code));
1338     if (!strcmp(block, "CurrencySymbols"))
1339         return(xmlUCSIsCurrencySymbols(code));
1340     if (!strcmp(block, "Cyrillic"))
1341         return(xmlUCSIsCyrillic(code));
1342     if (!strcmp(block, "Deseret"))
1343         return(xmlUCSIsDeseret(code));
1344     if (!strcmp(block, "Devanagari"))
1345         return(xmlUCSIsDevanagari(code));
1346     if (!strcmp(block, "Dingbats"))
1347         return(xmlUCSIsDingbats(code));
1348     if (!strcmp(block, "EnclosedAlphanumerics"))
1349         return(xmlUCSIsEnclosedAlphanumerics(code));
1350     if (!strcmp(block, "EnclosedCJKLettersandMonths"))
1351         return(xmlUCSIsEnclosedCJKLettersandMonths(code));
1352     if (!strcmp(block, "Ethiopic"))
1353         return(xmlUCSIsEthiopic(code));
1354     if (!strcmp(block, "GeneralPunctuation"))
1355         return(xmlUCSIsGeneralPunctuation(code));
1356     if (!strcmp(block, "GeometricShapes"))
1357         return(xmlUCSIsGeometricShapes(code));
1358     if (!strcmp(block, "Georgian"))
1359         return(xmlUCSIsGeorgian(code));
1360     if (!strcmp(block, "Gothic"))
1361         return(xmlUCSIsGothic(code));
1362     if (!strcmp(block, "Greek"))
1363         return(xmlUCSIsGreek(code));
1364     if (!strcmp(block, "GreekExtended"))
1365         return(xmlUCSIsGreekExtended(code));
1366     if (!strcmp(block, "Gujarati"))
1367         return(xmlUCSIsGujarati(code));
1368     if (!strcmp(block, "Gurmukhi"))
1369         return(xmlUCSIsGurmukhi(code));
1370     if (!strcmp(block, "HalfwidthandFullwidthForms"))
1371         return(xmlUCSIsHalfwidthandFullwidthForms(code));
1372     if (!strcmp(block, "HangulCompatibilityJamo"))
1373         return(xmlUCSIsHangulCompatibilityJamo(code));
1374     if (!strcmp(block, "HangulJamo"))
1375         return(xmlUCSIsHangulJamo(code));
1376     if (!strcmp(block, "HangulSyllables"))
1377         return(xmlUCSIsHangulSyllables(code));
1378     if (!strcmp(block, "Hebrew"))
1379         return(xmlUCSIsHebrew(code));
1380     if (!strcmp(block, "HighPrivateUseSurrogates"))
1381         return(xmlUCSIsHighPrivateUseSurrogates(code));
1382     if (!strcmp(block, "HighSurrogates"))
1383         return(xmlUCSIsHighSurrogates(code));
1384     if (!strcmp(block, "Hiragana"))
1385         return(xmlUCSIsHiragana(code));
1386     if (!strcmp(block, "IPAExtensions"))
1387         return(xmlUCSIsIPAExtensions(code));
1388     if (!strcmp(block, "IdeographicDescriptionCharacters"))
1389         return(xmlUCSIsIdeographicDescriptionCharacters(code));
1390     if (!strcmp(block, "Kanbun"))
1391         return(xmlUCSIsKanbun(code));
1392     if (!strcmp(block, "KangxiRadicals"))
1393         return(xmlUCSIsKangxiRadicals(code));
1394     if (!strcmp(block, "Kannada"))
1395         return(xmlUCSIsKannada(code));
1396     if (!strcmp(block, "Katakana"))
1397         return(xmlUCSIsKatakana(code));
1398     if (!strcmp(block, "Khmer"))
1399         return(xmlUCSIsKhmer(code));
1400     if (!strcmp(block, "Lao"))
1401         return(xmlUCSIsLao(code));
1402     if (!strcmp(block, "Latin-1Supplement"))
1403         return(xmlUCSIsLatin1Supplement(code));
1404     if (!strcmp(block, "LatinExtended-A"))
1405         return(xmlUCSIsLatinExtendedA(code));
1406     if (!strcmp(block, "LatinExtended-B"))
1407         return(xmlUCSIsLatinExtendedB(code));
1408     if (!strcmp(block, "LatinExtendedAdditional"))
1409         return(xmlUCSIsLatinExtendedAdditional(code));
1410     if (!strcmp(block, "LetterlikeSymbols"))
1411         return(xmlUCSIsLetterlikeSymbols(code));
1412     if (!strcmp(block, "LowSurrogates"))
1413         return(xmlUCSIsLowSurrogates(code));
1414     if (!strcmp(block, "Malayalam"))
1415         return(xmlUCSIsMalayalam(code));
1416     if (!strcmp(block, "MathematicalAlphanumericSymbols"))
1417         return(xmlUCSIsMathematicalAlphanumericSymbols(code));
1418     if (!strcmp(block, "MathematicalOperators"))
1419         return(xmlUCSIsMathematicalOperators(code));
1420     if (!strcmp(block, "MiscellaneousSymbols"))
1421         return(xmlUCSIsMiscellaneousSymbols(code));
1422     if (!strcmp(block, "MiscellaneousTechnical"))
1423         return(xmlUCSIsMiscellaneousTechnical(code));
1424     if (!strcmp(block, "Mongolian"))
1425         return(xmlUCSIsMongolian(code));
1426     if (!strcmp(block, "MusicalSymbols"))
1427         return(xmlUCSIsMusicalSymbols(code));
1428     if (!strcmp(block, "Myanmar"))
1429         return(xmlUCSIsMyanmar(code));
1430     if (!strcmp(block, "NumberForms"))
1431         return(xmlUCSIsNumberForms(code));
1432     if (!strcmp(block, "Ogham"))
1433         return(xmlUCSIsOgham(code));
1434     if (!strcmp(block, "OldItalic"))
1435         return(xmlUCSIsOldItalic(code));
1436     if (!strcmp(block, "OpticalCharacterRecognition"))
1437         return(xmlUCSIsOpticalCharacterRecognition(code));
1438     if (!strcmp(block, "Oriya"))
1439         return(xmlUCSIsOriya(code));
1440     if (!strcmp(block, "PrivateUse"))
1441         return(xmlUCSIsPrivateUse(code));
1442     if (!strcmp(block, "Runic"))
1443         return(xmlUCSIsRunic(code));
1444     if (!strcmp(block, "Sinhala"))
1445         return(xmlUCSIsSinhala(code));
1446     if (!strcmp(block, "SmallFormVariants"))
1447         return(xmlUCSIsSmallFormVariants(code));
1448     if (!strcmp(block, "SpacingModifierLetters"))
1449         return(xmlUCSIsSpacingModifierLetters(code));
1450     if (!strcmp(block, "Specials"))
1451         return(xmlUCSIsSpecials(code));
1452     if (!strcmp(block, "SuperscriptsandSubscripts"))
1453         return(xmlUCSIsSuperscriptsandSubscripts(code));
1454     if (!strcmp(block, "Syriac"))
1455         return(xmlUCSIsSyriac(code));
1456     if (!strcmp(block, "Tags"))
1457         return(xmlUCSIsTags(code));
1458     if (!strcmp(block, "Tamil"))
1459         return(xmlUCSIsTamil(code));
1460     if (!strcmp(block, "Telugu"))
1461         return(xmlUCSIsTelugu(code));
1462     if (!strcmp(block, "Thaana"))
1463         return(xmlUCSIsThaana(code));
1464     if (!strcmp(block, "Thai"))
1465         return(xmlUCSIsThai(code));
1466     if (!strcmp(block, "Tibetan"))
1467         return(xmlUCSIsTibetan(code));
1468     if (!strcmp(block, "UnifiedCanadianAboriginalSyllabics"))
1469         return(xmlUCSIsUnifiedCanadianAboriginalSyllabics(code));
1470     if (!strcmp(block, "YiRadicals"))
1471         return(xmlUCSIsYiRadicals(code));
1472     if (!strcmp(block, "YiSyllables"))
1473         return(xmlUCSIsYiSyllables(code));
1474     return(-1);
1475 }
1476
1477 /**
1478  * xmlUCSIsCatC:
1479  * @code: UCS code point
1480  *
1481  * Check whether the character is part of C UCS Category
1482  *
1483  * Returns 1 if true 0 otherwise
1484  */
1485 int
1486 xmlUCSIsCatC(int code) {
1487     return(((code >= 0x0) && (code <= 0x1f)) ||
1488            ((code >= 0x7f) && (code <= 0x9f)) ||
1489            (code == 0x70f) ||
1490            ((code >= 0x180b) && (code <= 0x180e)) ||
1491            ((code >= 0x200c) && (code <= 0x200f)) ||
1492            ((code >= 0x202a) && (code <= 0x202e)) ||
1493            ((code >= 0x206a) && (code <= 0x206f)) ||
1494            (code == 0xd800) ||
1495            ((code >= 0xdb7f) && (code <= 0xdb80)) ||
1496            ((code >= 0xdbff) && (code <= 0xdc00)) ||
1497            ((code >= 0xdfff) && (code <= 0xe000)) ||
1498            (code == 0xf8ff) ||
1499            (code == 0xfeff) ||
1500            ((code >= 0xfff9) && (code <= 0xfffb)) ||
1501            ((code >= 0x1d173) && (code <= 0x1d17a)) ||
1502            (code == 0xe0001) ||
1503            ((code >= 0xe0020) && (code <= 0xe007f)) ||
1504            (code == 0xf0000) ||
1505            (code == 0xffffd) ||
1506            (code == 0x100000) ||
1507            (code == 0x10fffd));
1508 }
1509
1510 /**
1511  * xmlUCSIsCatCc:
1512  * @code: UCS code point
1513  *
1514  * Check whether the character is part of Cc UCS Category
1515  *
1516  * Returns 1 if true 0 otherwise
1517  */
1518 int
1519 xmlUCSIsCatCc(int code) {
1520     return(((code >= 0x0) && (code <= 0x1f)) ||
1521            ((code >= 0x7f) && (code <= 0x9f)));
1522 }
1523
1524 /**
1525  * xmlUCSIsCatCf:
1526  * @code: UCS code point
1527  *
1528  * Check whether the character is part of Cf UCS Category
1529  *
1530  * Returns 1 if true 0 otherwise
1531  */
1532 int
1533 xmlUCSIsCatCf(int code) {
1534     return((code == 0x70f) ||
1535            ((code >= 0x180b) && (code <= 0x180e)) ||
1536            ((code >= 0x200c) && (code <= 0x200f)) ||
1537            ((code >= 0x202a) && (code <= 0x202e)) ||
1538            ((code >= 0x206a) && (code <= 0x206f)) ||
1539            (code == 0xfeff) ||
1540            ((code >= 0xfff9) && (code <= 0xfffb)) ||
1541            ((code >= 0x1d173) && (code <= 0x1d17a)) ||
1542            (code == 0xe0001) ||
1543            ((code >= 0xe0020) && (code <= 0xe007f)));
1544 }
1545
1546 /**
1547  * xmlUCSIsCatCo:
1548  * @code: UCS code point
1549  *
1550  * Check whether the character is part of Co UCS Category
1551  *
1552  * Returns 1 if true 0 otherwise
1553  */
1554 int
1555 xmlUCSIsCatCo(int code) {
1556     return((code == 0xe000) ||
1557            (code == 0xf8ff) ||
1558            (code == 0xf0000) ||
1559            (code == 0xffffd) ||
1560            (code == 0x100000) ||
1561            (code == 0x10fffd));
1562 }
1563
1564 /**
1565  * xmlUCSIsCatCs:
1566  * @code: UCS code point
1567  *
1568  * Check whether the character is part of Cs UCS Category
1569  *
1570  * Returns 1 if true 0 otherwise
1571  */
1572 int
1573 xmlUCSIsCatCs(int code) {
1574     return((code == 0xd800) ||
1575            ((code >= 0xdb7f) && (code <= 0xdb80)) ||
1576            ((code >= 0xdbff) && (code <= 0xdc00)) ||
1577            (code == 0xdfff));
1578 }
1579
1580 /**
1581  * xmlUCSIsCatL:
1582  * @code: UCS code point
1583  *
1584  * Check whether the character is part of L UCS Category
1585  *
1586  * Returns 1 if true 0 otherwise
1587  */
1588 int
1589 xmlUCSIsCatL(int code) {
1590     return(((code >= 0x41) && (code <= 0x5a)) ||
1591            ((code >= 0x61) && (code <= 0x7a)) ||
1592            (code == 0xaa) ||
1593            (code == 0xb5) ||
1594            (code == 0xba) ||
1595            ((code >= 0xc0) && (code <= 0xd6)) ||
1596            ((code >= 0xd8) && (code <= 0xf6)) ||
1597            ((code >= 0xf8) && (code <= 0x21f)) ||
1598            ((code >= 0x222) && (code <= 0x233)) ||
1599            ((code >= 0x250) && (code <= 0x2ad)) ||
1600            ((code >= 0x2b0) && (code <= 0x2b8)) ||
1601            ((code >= 0x2bb) && (code <= 0x2c1)) ||
1602            ((code >= 0x2d0) && (code <= 0x2d1)) ||
1603            ((code >= 0x2e0) && (code <= 0x2e4)) ||
1604            (code == 0x2ee) ||
1605            (code == 0x37a) ||
1606            (code == 0x386) ||
1607            ((code >= 0x388) && (code <= 0x38a)) ||
1608            (code == 0x38c) ||
1609            ((code >= 0x38e) && (code <= 0x3a1)) ||
1610            ((code >= 0x3a3) && (code <= 0x3ce)) ||
1611            ((code >= 0x3d0) && (code <= 0x3d7)) ||
1612            ((code >= 0x3da) && (code <= 0x3f5)) ||
1613            ((code >= 0x400) && (code <= 0x481)) ||
1614            ((code >= 0x48c) && (code <= 0x4c4)) ||
1615            ((code >= 0x4c7) && (code <= 0x4c8)) ||
1616            ((code >= 0x4cb) && (code <= 0x4cc)) ||
1617            ((code >= 0x4d0) && (code <= 0x4f5)) ||
1618            ((code >= 0x4f8) && (code <= 0x4f9)) ||
1619            ((code >= 0x531) && (code <= 0x556)) ||
1620            (code == 0x559) ||
1621            ((code >= 0x561) && (code <= 0x587)) ||
1622            ((code >= 0x5d0) && (code <= 0x5ea)) ||
1623            ((code >= 0x5f0) && (code <= 0x5f2)) ||
1624            ((code >= 0x621) && (code <= 0x63a)) ||
1625            ((code >= 0x640) && (code <= 0x64a)) ||
1626            ((code >= 0x671) && (code <= 0x6d3)) ||
1627            (code == 0x6d5) ||
1628            ((code >= 0x6e5) && (code <= 0x6e6)) ||
1629            ((code >= 0x6fa) && (code <= 0x6fc)) ||
1630            (code == 0x710) ||
1631            ((code >= 0x712) && (code <= 0x72c)) ||
1632            ((code >= 0x780) && (code <= 0x7a5)) ||
1633            ((code >= 0x905) && (code <= 0x939)) ||
1634            (code == 0x93d) ||
1635            (code == 0x950) ||
1636            ((code >= 0x958) && (code <= 0x961)) ||
1637            ((code >= 0x985) && (code <= 0x98c)) ||
1638            ((code >= 0x98f) && (code <= 0x990)) ||
1639            ((code >= 0x993) && (code <= 0x9a8)) ||
1640            ((code >= 0x9aa) && (code <= 0x9b0)) ||
1641            (code == 0x9b2) ||
1642            ((code >= 0x9b6) && (code <= 0x9b9)) ||
1643            ((code >= 0x9dc) && (code <= 0x9dd)) ||
1644            ((code >= 0x9df) && (code <= 0x9e1)) ||
1645            ((code >= 0x9f0) && (code <= 0x9f1)) ||
1646            ((code >= 0xa05) && (code <= 0xa0a)) ||
1647            ((code >= 0xa0f) && (code <= 0xa10)) ||
1648            ((code >= 0xa13) && (code <= 0xa28)) ||
1649            ((code >= 0xa2a) && (code <= 0xa30)) ||
1650            ((code >= 0xa32) && (code <= 0xa33)) ||
1651            ((code >= 0xa35) && (code <= 0xa36)) ||
1652            ((code >= 0xa38) && (code <= 0xa39)) ||
1653            ((code >= 0xa59) && (code <= 0xa5c)) ||
1654            (code == 0xa5e) ||
1655            ((code >= 0xa72) && (code <= 0xa74)) ||
1656            ((code >= 0xa85) && (code <= 0xa8b)) ||
1657            (code == 0xa8d) ||
1658            ((code >= 0xa8f) && (code <= 0xa91)) ||
1659            ((code >= 0xa93) && (code <= 0xaa8)) ||
1660            ((code >= 0xaaa) && (code <= 0xab0)) ||
1661            ((code >= 0xab2) && (code <= 0xab3)) ||
1662            ((code >= 0xab5) && (code <= 0xab9)) ||
1663            (code == 0xabd) ||
1664            (code == 0xad0) ||
1665            (code == 0xae0) ||
1666            ((code >= 0xb05) && (code <= 0xb0c)) ||
1667            ((code >= 0xb0f) && (code <= 0xb10)) ||
1668            ((code >= 0xb13) && (code <= 0xb28)) ||
1669            ((code >= 0xb2a) && (code <= 0xb30)) ||
1670            ((code >= 0xb32) && (code <= 0xb33)) ||
1671            ((code >= 0xb36) && (code <= 0xb39)) ||
1672            (code == 0xb3d) ||
1673            ((code >= 0xb5c) && (code <= 0xb5d)) ||
1674            ((code >= 0xb5f) && (code <= 0xb61)) ||
1675            ((code >= 0xb85) && (code <= 0xb8a)) ||
1676            ((code >= 0xb8e) && (code <= 0xb90)) ||
1677            ((code >= 0xb92) && (code <= 0xb95)) ||
1678            ((code >= 0xb99) && (code <= 0xb9a)) ||
1679            (code == 0xb9c) ||
1680            ((code >= 0xb9e) && (code <= 0xb9f)) ||
1681            ((code >= 0xba3) && (code <= 0xba4)) ||
1682            ((code >= 0xba8) && (code <= 0xbaa)) ||
1683            ((code >= 0xbae) && (code <= 0xbb5)) ||
1684            ((code >= 0xbb7) && (code <= 0xbb9)) ||
1685            ((code >= 0xc05) && (code <= 0xc0c)) ||
1686            ((code >= 0xc0e) && (code <= 0xc10)) ||
1687            ((code >= 0xc12) && (code <= 0xc28)) ||
1688            ((code >= 0xc2a) && (code <= 0xc33)) ||
1689            ((code >= 0xc35) && (code <= 0xc39)) ||
1690            ((code >= 0xc60) && (code <= 0xc61)) ||
1691            ((code >= 0xc85) && (code <= 0xc8c)) ||
1692            ((code >= 0xc8e) && (code <= 0xc90)) ||
1693            ((code >= 0xc92) && (code <= 0xca8)) ||
1694            ((code >= 0xcaa) && (code <= 0xcb3)) ||
1695            ((code >= 0xcb5) && (code <= 0xcb9)) ||
1696            (code == 0xcde) ||
1697            ((code >= 0xce0) && (code <= 0xce1)) ||
1698            ((code >= 0xd05) && (code <= 0xd0c)) ||
1699            ((code >= 0xd0e) && (code <= 0xd10)) ||
1700            ((code >= 0xd12) && (code <= 0xd28)) ||
1701            ((code >= 0xd2a) && (code <= 0xd39)) ||
1702            ((code >= 0xd60) && (code <= 0xd61)) ||
1703            ((code >= 0xd85) && (code <= 0xd96)) ||
1704            ((code >= 0xd9a) && (code <= 0xdb1)) ||
1705            ((code >= 0xdb3) && (code <= 0xdbb)) ||
1706            (code == 0xdbd) ||
1707            ((code >= 0xdc0) && (code <= 0xdc6)) ||
1708            ((code >= 0xe01) && (code <= 0xe30)) ||
1709            ((code >= 0xe32) && (code <= 0xe33)) ||
1710            ((code >= 0xe40) && (code <= 0xe46)) ||
1711            ((code >= 0xe81) && (code <= 0xe82)) ||
1712            (code == 0xe84) ||
1713            ((code >= 0xe87) && (code <= 0xe88)) ||
1714            (code == 0xe8a) ||
1715            (code == 0xe8d) ||
1716            ((code >= 0xe94) && (code <= 0xe97)) ||
1717            ((code >= 0xe99) && (code <= 0xe9f)) ||
1718            ((code >= 0xea1) && (code <= 0xea3)) ||
1719            (code == 0xea5) ||
1720            (code == 0xea7) ||
1721            ((code >= 0xeaa) && (code <= 0xeab)) ||
1722            ((code >= 0xead) && (code <= 0xeb0)) ||
1723            ((code >= 0xeb2) && (code <= 0xeb3)) ||
1724            (code == 0xebd) ||
1725            ((code >= 0xec0) && (code <= 0xec4)) ||
1726            (code == 0xec6) ||
1727            ((code >= 0xedc) && (code <= 0xedd)) ||
1728            (code == 0xf00) ||
1729            ((code >= 0xf40) && (code <= 0xf47)) ||
1730            ((code >= 0xf49) && (code <= 0xf6a)) ||
1731            ((code >= 0xf88) && (code <= 0xf8b)) ||
1732            ((code >= 0x1000) && (code <= 0x1021)) ||
1733            ((code >= 0x1023) && (code <= 0x1027)) ||
1734            ((code >= 0x1029) && (code <= 0x102a)) ||
1735            ((code >= 0x1050) && (code <= 0x1055)) ||
1736            ((code >= 0x10a0) && (code <= 0x10c5)) ||
1737            ((code >= 0x10d0) && (code <= 0x10f6)) ||
1738            ((code >= 0x1100) && (code <= 0x1159)) ||
1739            ((code >= 0x115f) && (code <= 0x11a2)) ||
1740            ((code >= 0x11a8) && (code <= 0x11f9)) ||
1741            ((code >= 0x1200) && (code <= 0x1206)) ||
1742            ((code >= 0x1208) && (code <= 0x1246)) ||
1743            (code == 0x1248) ||
1744            ((code >= 0x124a) && (code <= 0x124d)) ||
1745            ((code >= 0x1250) && (code <= 0x1256)) ||
1746            (code == 0x1258) ||
1747            ((code >= 0x125a) && (code <= 0x125d)) ||
1748            ((code >= 0x1260) && (code <= 0x1286)) ||
1749            (code == 0x1288) ||
1750            ((code >= 0x128a) && (code <= 0x128d)) ||
1751            ((code >= 0x1290) && (code <= 0x12ae)) ||
1752            (code == 0x12b0) ||
1753            ((code >= 0x12b2) && (code <= 0x12b5)) ||
1754            ((code >= 0x12b8) && (code <= 0x12be)) ||
1755            (code == 0x12c0) ||
1756            ((code >= 0x12c2) && (code <= 0x12c5)) ||
1757            ((code >= 0x12c8) && (code <= 0x12ce)) ||
1758            ((code >= 0x12d0) && (code <= 0x12d6)) ||
1759            ((code >= 0x12d8) && (code <= 0x12ee)) ||
1760            ((code >= 0x12f0) && (code <= 0x130e)) ||
1761            (code == 0x1310) ||
1762            ((code >= 0x1312) && (code <= 0x1315)) ||
1763            ((code >= 0x1318) && (code <= 0x131e)) ||
1764            ((code >= 0x1320) && (code <= 0x1346)) ||
1765            ((code >= 0x1348) && (code <= 0x135a)) ||
1766            ((code >= 0x13a0) && (code <= 0x13f4)) ||
1767            ((code >= 0x1401) && (code <= 0x166c)) ||
1768            ((code >= 0x166f) && (code <= 0x1676)) ||
1769            ((code >= 0x1681) && (code <= 0x169a)) ||
1770            ((code >= 0x16a0) && (code <= 0x16ea)) ||
1771            ((code >= 0x1780) && (code <= 0x17b3)) ||
1772            ((code >= 0x1820) && (code <= 0x1877)) ||
1773            ((code >= 0x1880) && (code <= 0x18a8)) ||
1774            ((code >= 0x1e00) && (code <= 0x1e9b)) ||
1775            ((code >= 0x1ea0) && (code <= 0x1ef9)) ||
1776            ((code >= 0x1f00) && (code <= 0x1f15)) ||
1777            ((code >= 0x1f18) && (code <= 0x1f1d)) ||
1778            ((code >= 0x1f20) && (code <= 0x1f45)) ||
1779            ((code >= 0x1f48) && (code <= 0x1f4d)) ||
1780            ((code >= 0x1f50) && (code <= 0x1f57)) ||
1781            (code == 0x1f59) ||
1782            (code == 0x1f5b) ||
1783            (code == 0x1f5d) ||
1784            ((code >= 0x1f5f) && (code <= 0x1f7d)) ||
1785            ((code >= 0x1f80) && (code <= 0x1fb4)) ||
1786            ((code >= 0x1fb6) && (code <= 0x1fbc)) ||
1787            (code == 0x1fbe) ||
1788            ((code >= 0x1fc2) && (code <= 0x1fc4)) ||
1789            ((code >= 0x1fc6) && (code <= 0x1fcc)) ||
1790            ((code >= 0x1fd0) && (code <= 0x1fd3)) ||
1791            ((code >= 0x1fd6) && (code <= 0x1fdb)) ||
1792            ((code >= 0x1fe0) && (code <= 0x1fec)) ||
1793            ((code >= 0x1ff2) && (code <= 0x1ff4)) ||
1794            ((code >= 0x1ff6) && (code <= 0x1ffc)) ||
1795            (code == 0x207f) ||
1796            (code == 0x2102) ||
1797            (code == 0x2107) ||
1798            ((code >= 0x210a) && (code <= 0x2113)) ||
1799            (code == 0x2115) ||
1800            ((code >= 0x2119) && (code <= 0x211d)) ||
1801            (code == 0x2124) ||
1802            (code == 0x2126) ||
1803            (code == 0x2128) ||
1804            ((code >= 0x212a) && (code <= 0x212d)) ||
1805            ((code >= 0x212f) && (code <= 0x2131)) ||
1806            ((code >= 0x2133) && (code <= 0x2139)) ||
1807            ((code >= 0x3005) && (code <= 0x3006)) ||
1808            ((code >= 0x3031) && (code <= 0x3035)) ||
1809            ((code >= 0x3041) && (code <= 0x3094)) ||
1810            ((code >= 0x309d) && (code <= 0x309e)) ||
1811            ((code >= 0x30a1) && (code <= 0x30fa)) ||
1812            ((code >= 0x30fc) && (code <= 0x30fe)) ||
1813            ((code >= 0x3105) && (code <= 0x312c)) ||
1814            ((code >= 0x3131) && (code <= 0x318e)) ||
1815            ((code >= 0x31a0) && (code <= 0x31b7)) ||
1816            (code == 0x3400) ||
1817            (code == 0x4db5) ||
1818            (code == 0x4e00) ||
1819            (code == 0x9fa5) ||
1820            ((code >= 0xa000) && (code <= 0xa48c)) ||
1821            (code == 0xac00) ||
1822            (code == 0xd7a3) ||
1823            ((code >= 0xf900) && (code <= 0xfa2d)) ||
1824            ((code >= 0xfb00) && (code <= 0xfb06)) ||
1825            ((code >= 0xfb13) && (code <= 0xfb17)) ||
1826            (code == 0xfb1d) ||
1827            ((code >= 0xfb1f) && (code <= 0xfb28)) ||
1828            ((code >= 0xfb2a) && (code <= 0xfb36)) ||
1829            ((code >= 0xfb38) && (code <= 0xfb3c)) ||
1830            (code == 0xfb3e) ||
1831            ((code >= 0xfb40) && (code <= 0xfb41)) ||
1832            ((code >= 0xfb43) && (code <= 0xfb44)) ||
1833            ((code >= 0xfb46) && (code <= 0xfbb1)) ||
1834            ((code >= 0xfbd3) && (code <= 0xfd3d)) ||
1835            ((code >= 0xfd50) && (code <= 0xfd8f)) ||
1836            ((code >= 0xfd92) && (code <= 0xfdc7)) ||
1837            ((code >= 0xfdf0) && (code <= 0xfdfb)) ||
1838            ((code >= 0xfe70) && (code <= 0xfe72)) ||
1839            (code == 0xfe74) ||
1840            ((code >= 0xfe76) && (code <= 0xfefc)) ||
1841            ((code >= 0xff21) && (code <= 0xff3a)) ||
1842            ((code >= 0xff41) && (code <= 0xff5a)) ||
1843            ((code >= 0xff66) && (code <= 0xffbe)) ||
1844            ((code >= 0xffc2) && (code <= 0xffc7)) ||
1845            ((code >= 0xffca) && (code <= 0xffcf)) ||
1846            ((code >= 0xffd2) && (code <= 0xffd7)) ||
1847            ((code >= 0xffda) && (code <= 0xffdc)) ||
1848            ((code >= 0x10300) && (code <= 0x1031e)) ||
1849            ((code >= 0x10330) && (code <= 0x10349)) ||
1850            ((code >= 0x10400) && (code <= 0x10425)) ||
1851            ((code >= 0x10428) && (code <= 0x1044d)) ||
1852            ((code >= 0x1d400) && (code <= 0x1d454)) ||
1853            ((code >= 0x1d456) && (code <= 0x1d49c)) ||
1854            ((code >= 0x1d49e) && (code <= 0x1d49f)) ||
1855            (code == 0x1d4a2) ||
1856            ((code >= 0x1d4a5) && (code <= 0x1d4a6)) ||
1857            ((code >= 0x1d4a9) && (code <= 0x1d4ac)) ||
1858            ((code >= 0x1d4ae) && (code <= 0x1d4b9)) ||
1859            (code == 0x1d4bb) ||
1860            ((code >= 0x1d4bd) && (code <= 0x1d4c0)) ||
1861            ((code >= 0x1d4c2) && (code <= 0x1d4c3)) ||
1862            ((code >= 0x1d4c5) && (code <= 0x1d505)) ||
1863            ((code >= 0x1d507) && (code <= 0x1d50a)) ||
1864            ((code >= 0x1d50d) && (code <= 0x1d514)) ||
1865            ((code >= 0x1d516) && (code <= 0x1d51c)) ||
1866            ((code >= 0x1d51e) && (code <= 0x1d539)) ||
1867            ((code >= 0x1d53b) && (code <= 0x1d53e)) ||
1868            ((code >= 0x1d540) && (code <= 0x1d544)) ||
1869            (code == 0x1d546) ||
1870            ((code >= 0x1d54a) && (code <= 0x1d550)) ||
1871            ((code >= 0x1d552) && (code <= 0x1d6a3)) ||
1872            ((code >= 0x1d6a8) && (code <= 0x1d6c0)) ||
1873            ((code >= 0x1d6c2) && (code <= 0x1d6da)) ||
1874            ((code >= 0x1d6dc) && (code <= 0x1d6fa)) ||
1875            ((code >= 0x1d6fc) && (code <= 0x1d714)) ||
1876            ((code >= 0x1d716) && (code <= 0x1d734)) ||
1877            ((code >= 0x1d736) && (code <= 0x1d74e)) ||
1878            ((code >= 0x1d750) && (code <= 0x1d76e)) ||
1879            ((code >= 0x1d770) && (code <= 0x1d788)) ||
1880            ((code >= 0x1d78a) && (code <= 0x1d7a8)) ||
1881            ((code >= 0x1d7aa) && (code <= 0x1d7c2)) ||
1882            ((code >= 0x1d7c4) && (code <= 0x1d7c9)) ||
1883            (code == 0x20000) ||
1884            (code == 0x2a6d6) ||
1885            ((code >= 0x2f800) && (code <= 0x2fa1d)));
1886 }
1887
1888 /**
1889  * xmlUCSIsCatLl:
1890  * @code: UCS code point
1891  *
1892  * Check whether the character is part of Ll UCS Category
1893  *
1894  * Returns 1 if true 0 otherwise
1895  */
1896 int
1897 xmlUCSIsCatLl(int code) {
1898     return(((code >= 0x61) && (code <= 0x7a)) ||
1899            (code == 0xaa) ||
1900            (code == 0xb5) ||
1901            (code == 0xba) ||
1902            ((code >= 0xdf) && (code <= 0xf6)) ||
1903            ((code >= 0xf8) && (code <= 0xff)) ||
1904            (code == 0x101) ||
1905            (code == 0x103) ||
1906            (code == 0x105) ||
1907            (code == 0x107) ||
1908            (code == 0x109) ||
1909            (code == 0x10b) ||
1910            (code == 0x10d) ||
1911            (code == 0x10f) ||
1912            (code == 0x111) ||
1913            (code == 0x113) ||
1914            (code == 0x115) ||
1915            (code == 0x117) ||
1916            (code == 0x119) ||
1917            (code == 0x11b) ||
1918            (code == 0x11d) ||
1919            (code == 0x11f) ||
1920            (code == 0x121) ||
1921            (code == 0x123) ||
1922            (code == 0x125) ||
1923            (code == 0x127) ||
1924            (code == 0x129) ||
1925            (code == 0x12b) ||
1926            (code == 0x12d) ||
1927            (code == 0x12f) ||
1928            (code == 0x131) ||
1929            (code == 0x133) ||
1930            (code == 0x135) ||
1931            ((code >= 0x137) && (code <= 0x138)) ||
1932            (code == 0x13a) ||
1933            (code == 0x13c) ||
1934            (code == 0x13e) ||
1935            (code == 0x140) ||
1936            (code == 0x142) ||
1937            (code == 0x144) ||
1938            (code == 0x146) ||
1939            ((code >= 0x148) && (code <= 0x149)) ||
1940            (code == 0x14b) ||
1941            (code == 0x14d) ||
1942            (code == 0x14f) ||
1943            (code == 0x151) ||
1944            (code == 0x153) ||
1945            (code == 0x155) ||
1946            (code == 0x157) ||
1947            (code == 0x159) ||
1948            (code == 0x15b) ||
1949            (code == 0x15d) ||
1950            (code == 0x15f) ||
1951            (code == 0x161) ||
1952            (code == 0x163) ||
1953            (code == 0x165) ||
1954            (code == 0x167) ||
1955            (code == 0x169) ||
1956            (code == 0x16b) ||
1957            (code == 0x16d) ||
1958            (code == 0x16f) ||
1959            (code == 0x171) ||
1960            (code == 0x173) ||
1961            (code == 0x175) ||
1962            (code == 0x177) ||
1963            (code == 0x17a) ||
1964            (code == 0x17c) ||
1965            ((code >= 0x17e) && (code <= 0x180)) ||
1966            (code == 0x183) ||
1967            (code == 0x185) ||
1968            (code == 0x188) ||
1969            ((code >= 0x18c) && (code <= 0x18d)) ||
1970            (code == 0x192) ||
1971            (code == 0x195) ||
1972            ((code >= 0x199) && (code <= 0x19b)) ||
1973            (code == 0x19e) ||
1974            (code == 0x1a1) ||
1975            (code == 0x1a3) ||
1976            (code == 0x1a5) ||
1977            (code == 0x1a8) ||
1978            ((code >= 0x1aa) && (code <= 0x1ab)) ||
1979            (code == 0x1ad) ||
1980            (code == 0x1b0) ||
1981            (code == 0x1b4) ||
1982            (code == 0x1b6) ||
1983            ((code >= 0x1b9) && (code <= 0x1ba)) ||
1984            ((code >= 0x1bd) && (code <= 0x1bf)) ||
1985            (code == 0x1c6) ||
1986            (code == 0x1c9) ||
1987            (code == 0x1cc) ||
1988            (code == 0x1ce) ||
1989            (code == 0x1d0) ||
1990            (code == 0x1d2) ||
1991            (code == 0x1d4) ||
1992            (code == 0x1d6) ||
1993            (code == 0x1d8) ||
1994            (code == 0x1da) ||
1995            ((code >= 0x1dc) && (code <= 0x1dd)) ||
1996            (code == 0x1df) ||
1997            (code == 0x1e1) ||
1998            (code == 0x1e3) ||
1999            (code == 0x1e5) ||
2000            (code == 0x1e7) ||
2001            (code == 0x1e9) ||
2002            (code == 0x1eb) ||
2003            (code == 0x1ed) ||
2004            ((code >= 0x1ef) && (code <= 0x1f0)) ||
2005            (code == 0x1f3) ||
2006            (code == 0x1f5) ||
2007            (code == 0x1f9) ||
2008            (code == 0x1fb) ||
2009            (code == 0x1fd) ||
2010            (code == 0x1ff) ||
2011            (code == 0x201) ||
2012            (code == 0x203) ||
2013            (code == 0x205) ||
2014            (code == 0x207) ||
2015            (code == 0x209) ||
2016            (code == 0x20b) ||
2017            (code == 0x20d) ||
2018            (code == 0x20f) ||
2019            (code == 0x211) ||
2020            (code == 0x213) ||
2021            (code == 0x215) ||
2022            (code == 0x217) ||
2023            (code == 0x219) ||
2024            (code == 0x21b) ||
2025            (code == 0x21d) ||
2026            (code == 0x21f) ||
2027            (code == 0x223) ||
2028            (code == 0x225) ||
2029            (code == 0x227) ||
2030            (code == 0x229) ||
2031            (code == 0x22b) ||
2032            (code == 0x22d) ||
2033            (code == 0x22f) ||
2034            (code == 0x231) ||
2035            (code == 0x233) ||
2036            ((code >= 0x250) && (code <= 0x2ad)) ||
2037            (code == 0x390) ||
2038            ((code >= 0x3ac) && (code <= 0x3ce)) ||
2039            ((code >= 0x3d0) && (code <= 0x3d1)) ||
2040            ((code >= 0x3d5) && (code <= 0x3d7)) ||
2041            (code == 0x3db) ||
2042            (code == 0x3dd) ||
2043            (code == 0x3df) ||
2044            (code == 0x3e1) ||
2045            (code == 0x3e3) ||
2046            (code == 0x3e5) ||
2047            (code == 0x3e7) ||
2048            (code == 0x3e9) ||
2049            (code == 0x3eb) ||
2050            (code == 0x3ed) ||
2051            ((code >= 0x3ef) && (code <= 0x3f3)) ||
2052            (code == 0x3f5) ||
2053            ((code >= 0x430) && (code <= 0x45f)) ||
2054            (code == 0x461) ||
2055            (code == 0x463) ||
2056            (code == 0x465) ||
2057            (code == 0x467) ||
2058            (code == 0x469) ||
2059            (code == 0x46b) ||
2060            (code == 0x46d) ||
2061            (code == 0x46f) ||
2062            (code == 0x471) ||
2063            (code == 0x473) ||
2064            (code == 0x475) ||
2065            (code == 0x477) ||
2066            (code == 0x479) ||
2067            (code == 0x47b) ||
2068            (code == 0x47d) ||
2069            (code == 0x47f) ||
2070            (code == 0x481) ||
2071            (code == 0x48d) ||
2072            (code == 0x48f) ||
2073            (code == 0x491) ||
2074            (code == 0x493) ||
2075            (code == 0x495) ||
2076            (code == 0x497) ||
2077            (code == 0x499) ||
2078            (code == 0x49b) ||
2079            (code == 0x49d) ||
2080            (code == 0x49f) ||
2081            (code == 0x4a1) ||
2082            (code == 0x4a3) ||
2083            (code == 0x4a5) ||
2084            (code == 0x4a7) ||
2085            (code == 0x4a9) ||
2086            (code == 0x4ab) ||
2087            (code == 0x4ad) ||
2088            (code == 0x4af) ||
2089            (code == 0x4b1) ||
2090            (code == 0x4b3) ||
2091            (code == 0x4b5) ||
2092            (code == 0x4b7) ||
2093            (code == 0x4b9) ||
2094            (code == 0x4bb) ||
2095            (code == 0x4bd) ||
2096            (code == 0x4bf) ||
2097            (code == 0x4c2) ||
2098            (code == 0x4c4) ||
2099            (code == 0x4c8) ||
2100            (code == 0x4cc) ||
2101            (code == 0x4d1) ||
2102            (code == 0x4d3) ||
2103            (code == 0x4d5) ||
2104            (code == 0x4d7) ||
2105            (code == 0x4d9) ||
2106            (code == 0x4db) ||
2107            (code == 0x4dd) ||
2108            (code == 0x4df) ||
2109            (code == 0x4e1) ||
2110            (code == 0x4e3) ||
2111            (code == 0x4e5) ||
2112            (code == 0x4e7) ||
2113            (code == 0x4e9) ||
2114            (code == 0x4eb) ||
2115            (code == 0x4ed) ||
2116            (code == 0x4ef) ||
2117            (code == 0x4f1) ||
2118            (code == 0x4f3) ||
2119            (code == 0x4f5) ||
2120            (code == 0x4f9) ||
2121            ((code >= 0x561) && (code <= 0x587)) ||
2122            (code == 0x1e01) ||
2123            (code == 0x1e03) ||
2124            (code == 0x1e05) ||
2125            (code == 0x1e07) ||
2126            (code == 0x1e09) ||
2127            (code == 0x1e0b) ||
2128            (code == 0x1e0d) ||
2129            (code == 0x1e0f) ||
2130            (code == 0x1e11) ||
2131            (code == 0x1e13) ||
2132            (code == 0x1e15) ||
2133            (code == 0x1e17) ||
2134            (code == 0x1e19) ||
2135            (code == 0x1e1b) ||
2136            (code == 0x1e1d) ||
2137            (code == 0x1e1f) ||
2138            (code == 0x1e21) ||
2139            (code == 0x1e23) ||
2140            (code == 0x1e25) ||
2141            (code == 0x1e27) ||
2142            (code == 0x1e29) ||
2143            (code == 0x1e2b) ||
2144            (code == 0x1e2d) ||
2145            (code == 0x1e2f) ||
2146            (code == 0x1e31) ||
2147            (code == 0x1e33) ||
2148            (code == 0x1e35) ||
2149            (code == 0x1e37) ||
2150            (code == 0x1e39) ||
2151            (code == 0x1e3b) ||
2152            (code == 0x1e3d) ||
2153            (code == 0x1e3f) ||
2154            (code == 0x1e41) ||
2155            (code == 0x1e43) ||
2156            (code == 0x1e45) ||
2157            (code == 0x1e47) ||
2158            (code == 0x1e49) ||
2159            (code == 0x1e4b) ||
2160            (code == 0x1e4d) ||
2161            (code == 0x1e4f) ||
2162            (code == 0x1e51) ||
2163            (code == 0x1e53) ||
2164            (code == 0x1e55) ||
2165            (code == 0x1e57) ||
2166            (code == 0x1e59) ||
2167            (code == 0x1e5b) ||
2168            (code == 0x1e5d) ||
2169            (code == 0x1e5f) ||
2170            (code == 0x1e61) ||
2171            (code == 0x1e63) ||
2172            (code == 0x1e65) ||
2173            (code == 0x1e67) ||
2174            (code == 0x1e69) ||
2175            (code == 0x1e6b) ||
2176            (code == 0x1e6d) ||
2177            (code == 0x1e6f) ||
2178            (code == 0x1e71) ||
2179            (code == 0x1e73) ||
2180            (code == 0x1e75) ||
2181            (code == 0x1e77) ||
2182            (code == 0x1e79) ||
2183            (code == 0x1e7b) ||
2184            (code == 0x1e7d) ||
2185            (code == 0x1e7f) ||
2186            (code == 0x1e81) ||
2187            (code == 0x1e83) ||
2188            (code == 0x1e85) ||
2189            (code == 0x1e87) ||
2190            (code == 0x1e89) ||
2191            (code == 0x1e8b) ||
2192            (code == 0x1e8d) ||
2193            (code == 0x1e8f) ||
2194            (code == 0x1e91) ||
2195            (code == 0x1e93) ||
2196            ((code >= 0x1e95) && (code <= 0x1e9b)) ||
2197            (code == 0x1ea1) ||
2198            (code == 0x1ea3) ||
2199            (code == 0x1ea5) ||
2200            (code == 0x1ea7) ||
2201            (code == 0x1ea9) ||
2202            (code == 0x1eab) ||
2203            (code == 0x1ead) ||
2204            (code == 0x1eaf) ||
2205            (code == 0x1eb1) ||
2206            (code == 0x1eb3) ||
2207            (code == 0x1eb5) ||
2208            (code == 0x1eb7) ||
2209            (code == 0x1eb9) ||
2210            (code == 0x1ebb) ||
2211            (code == 0x1ebd) ||
2212            (code == 0x1ebf) ||
2213            (code == 0x1ec1) ||
2214            (code == 0x1ec3) ||
2215            (code == 0x1ec5) ||
2216            (code == 0x1ec7) ||
2217            (code == 0x1ec9) ||
2218            (code == 0x1ecb) ||
2219            (code == 0x1ecd) ||
2220            (code == 0x1ecf) ||
2221            (code == 0x1ed1) ||
2222            (code == 0x1ed3) ||
2223            (code == 0x1ed5) ||
2224            (code == 0x1ed7) ||
2225            (code == 0x1ed9) ||
2226            (code == 0x1edb) ||
2227            (code == 0x1edd) ||
2228            (code == 0x1edf) ||
2229            (code == 0x1ee1) ||
2230            (code == 0x1ee3) ||
2231            (code == 0x1ee5) ||
2232            (code == 0x1ee7) ||
2233            (code == 0x1ee9) ||
2234            (code == 0x1eeb) ||
2235            (code == 0x1eed) ||
2236            (code == 0x1eef) ||
2237            (code == 0x1ef1) ||
2238            (code == 0x1ef3) ||
2239            (code == 0x1ef5) ||
2240            (code == 0x1ef7) ||
2241            (code == 0x1ef9) ||
2242            ((code >= 0x1f00) && (code <= 0x1f07)) ||
2243            ((code >= 0x1f10) && (code <= 0x1f15)) ||
2244            ((code >= 0x1f20) && (code <= 0x1f27)) ||
2245            ((code >= 0x1f30) && (code <= 0x1f37)) ||
2246            ((code >= 0x1f40) && (code <= 0x1f45)) ||
2247            ((code >= 0x1f50) && (code <= 0x1f57)) ||
2248            ((code >= 0x1f60) && (code <= 0x1f67)) ||
2249            ((code >= 0x1f70) && (code <= 0x1f7d)) ||
2250            ((code >= 0x1f80) && (code <= 0x1f87)) ||
2251            ((code >= 0x1f90) && (code <= 0x1f97)) ||
2252            ((code >= 0x1fa0) && (code <= 0x1fa7)) ||
2253            ((code >= 0x1fb0) && (code <= 0x1fb4)) ||
2254            ((code >= 0x1fb6) && (code <= 0x1fb7)) ||
2255            (code == 0x1fbe) ||
2256            ((code >= 0x1fc2) && (code <= 0x1fc4)) ||
2257            ((code >= 0x1fc6) && (code <= 0x1fc7)) ||
2258            ((code >= 0x1fd0) && (code <= 0x1fd3)) ||
2259            ((code >= 0x1fd6) && (code <= 0x1fd7)) ||
2260            ((code >= 0x1fe0) && (code <= 0x1fe7)) ||
2261            ((code >= 0x1ff2) && (code <= 0x1ff4)) ||
2262            ((code >= 0x1ff6) && (code <= 0x1ff7)) ||
2263            (code == 0x207f) ||
2264            (code == 0x210a) ||
2265            ((code >= 0x210e) && (code <= 0x210f)) ||
2266            (code == 0x2113) ||
2267            (code == 0x212f) ||
2268            (code == 0x2134) ||
2269            (code == 0x2139) ||
2270            ((code >= 0xfb00) && (code <= 0xfb06)) ||
2271            ((code >= 0xfb13) && (code <= 0xfb17)) ||
2272            ((code >= 0xff41) && (code <= 0xff5a)) ||
2273            ((code >= 0x10428) && (code <= 0x1044d)) ||
2274            ((code >= 0x1d41a) && (code <= 0x1d433)) ||
2275            ((code >= 0x1d44e) && (code <= 0x1d454)) ||
2276            ((code >= 0x1d456) && (code <= 0x1d467)) ||
2277            ((code >= 0x1d482) && (code <= 0x1d49b)) ||
2278            ((code >= 0x1d4b6) && (code <= 0x1d4b9)) ||
2279            (code == 0x1d4bb) ||
2280            ((code >= 0x1d4bd) && (code <= 0x1d4c0)) ||
2281            ((code >= 0x1d4c2) && (code <= 0x1d4c3)) ||
2282            ((code >= 0x1d4c5) && (code <= 0x1d4cf)) ||
2283            ((code >= 0x1d4ea) && (code <= 0x1d503)) ||
2284            ((code >= 0x1d51e) && (code <= 0x1d537)) ||
2285            ((code >= 0x1d552) && (code <= 0x1d56b)) ||
2286            ((code >= 0x1d586) && (code <= 0x1d59f)) ||
2287            ((code >= 0x1d5ba) && (code <= 0x1d5d3)) ||
2288            ((code >= 0x1d5ee) && (code <= 0x1d607)) ||
2289            ((code >= 0x1d622) && (code <= 0x1d63b)) ||
2290            ((code >= 0x1d656) && (code <= 0x1d66f)) ||
2291            ((code >= 0x1d68a) && (code <= 0x1d6a3)) ||
2292            ((code >= 0x1d6c2) && (code <= 0x1d6da)) ||
2293            ((code >= 0x1d6dc) && (code <= 0x1d6e1)) ||
2294            ((code >= 0x1d6fc) && (code <= 0x1d714)) ||
2295            ((code >= 0x1d716) && (code <= 0x1d71b)) ||
2296            ((code >= 0x1d736) && (code <= 0x1d74e)) ||
2297            ((code >= 0x1d750) && (code <= 0x1d755)) ||
2298            ((code >= 0x1d770) && (code <= 0x1d788)) ||
2299            ((code >= 0x1d78a) && (code <= 0x1d78f)) ||
2300            ((code >= 0x1d7aa) && (code <= 0x1d7c2)) ||
2301            ((code >= 0x1d7c4) && (code <= 0x1d7c9)));
2302 }
2303
2304 /**
2305  * xmlUCSIsCatLm:
2306  * @code: UCS code point
2307  *
2308  * Check whether the character is part of Lm UCS Category
2309  *
2310  * Returns 1 if true 0 otherwise
2311  */
2312 int
2313 xmlUCSIsCatLm(int code) {
2314     return(((code >= 0x2b0) && (code <= 0x2b8)) ||
2315            ((code >= 0x2bb) && (code <= 0x2c1)) ||
2316            ((code >= 0x2d0) && (code <= 0x2d1)) ||
2317            ((code >= 0x2e0) && (code <= 0x2e4)) ||
2318            (code == 0x2ee) ||
2319            (code == 0x37a) ||
2320            (code == 0x559) ||
2321            (code == 0x640) ||
2322            ((code >= 0x6e5) && (code <= 0x6e6)) ||
2323            (code == 0xe46) ||
2324            (code == 0xec6) ||
2325            (code == 0x1843) ||
2326            (code == 0x3005) ||
2327            ((code >= 0x3031) && (code <= 0x3035)) ||
2328            ((code >= 0x309d) && (code <= 0x309e)) ||
2329            ((code >= 0x30fc) && (code <= 0x30fe)) ||
2330            (code == 0xff70) ||
2331            ((code >= 0xff9e) && (code <= 0xff9f)));
2332 }
2333
2334 /**
2335  * xmlUCSIsCatLo:
2336  * @code: UCS code point
2337  *
2338  * Check whether the character is part of Lo UCS Category
2339  *
2340  * Returns 1 if true 0 otherwise
2341  */
2342 int
2343 xmlUCSIsCatLo(int code) {
2344     return((code == 0x1bb) ||
2345            ((code >= 0x1c0) && (code <= 0x1c3)) ||
2346            ((code >= 0x5d0) && (code <= 0x5ea)) ||
2347            ((code >= 0x5f0) && (code <= 0x5f2)) ||
2348            ((code >= 0x621) && (code <= 0x63a)) ||
2349            ((code >= 0x641) && (code <= 0x64a)) ||
2350            ((code >= 0x671) && (code <= 0x6d3)) ||
2351            (code == 0x6d5) ||
2352            ((code >= 0x6fa) && (code <= 0x6fc)) ||
2353            (code == 0x710) ||
2354            ((code >= 0x712) && (code <= 0x72c)) ||
2355            ((code >= 0x780) && (code <= 0x7a5)) ||
2356            ((code >= 0x905) && (code <= 0x939)) ||
2357            (code == 0x93d) ||
2358            (code == 0x950) ||
2359            ((code >= 0x958) && (code <= 0x961)) ||
2360            ((code >= 0x985) && (code <= 0x98c)) ||
2361            ((code >= 0x98f) && (code <= 0x990)) ||
2362            ((code >= 0x993) && (code <= 0x9a8)) ||
2363            ((code >= 0x9aa) && (code <= 0x9b0)) ||
2364            (code == 0x9b2) ||
2365            ((code >= 0x9b6) && (code <= 0x9b9)) ||
2366            ((code >= 0x9dc) && (code <= 0x9dd)) ||
2367            ((code >= 0x9df) && (code <= 0x9e1)) ||
2368            ((code >= 0x9f0) && (code <= 0x9f1)) ||
2369            ((code >= 0xa05) && (code <= 0xa0a)) ||
2370            ((code >= 0xa0f) && (code <= 0xa10)) ||
2371            ((code >= 0xa13) && (code <= 0xa28)) ||
2372            ((code >= 0xa2a) && (code <= 0xa30)) ||
2373            ((code >= 0xa32) && (code <= 0xa33)) ||
2374            ((code >= 0xa35) && (code <= 0xa36)) ||
2375            ((code >= 0xa38) && (code <= 0xa39)) ||
2376            ((code >= 0xa59) && (code <= 0xa5c)) ||
2377            (code == 0xa5e) ||
2378            ((code >= 0xa72) && (code <= 0xa74)) ||
2379            ((code >= 0xa85) && (code <= 0xa8b)) ||
2380            (code == 0xa8d) ||
2381            ((code >= 0xa8f) && (code <= 0xa91)) ||
2382            ((code >= 0xa93) && (code <= 0xaa8)) ||
2383            ((code >= 0xaaa) && (code <= 0xab0)) ||
2384            ((code >= 0xab2) && (code <= 0xab3)) ||
2385            ((code >= 0xab5) && (code <= 0xab9)) ||
2386            (code == 0xabd) ||
2387            (code == 0xad0) ||
2388            (code == 0xae0) ||
2389            ((code >= 0xb05) && (code <= 0xb0c)) ||
2390            ((code >= 0xb0f) && (code <= 0xb10)) ||
2391            ((code >= 0xb13) && (code <= 0xb28)) ||
2392            ((code >= 0xb2a) && (code <= 0xb30)) ||
2393            ((code >= 0xb32) && (code <= 0xb33)) ||
2394            ((code >= 0xb36) && (code <= 0xb39)) ||
2395            (code == 0xb3d) ||
2396            ((code >= 0xb5c) && (code <= 0xb5d)) ||
2397            ((code >= 0xb5f) && (code <= 0xb61)) ||
2398            ((code >= 0xb85) && (code <= 0xb8a)) ||
2399            ((code >= 0xb8e) && (code <= 0xb90)) ||
2400            ((code >= 0xb92) && (code <= 0xb95)) ||
2401            ((code >= 0xb99) && (code <= 0xb9a)) ||
2402            (code == 0xb9c) ||
2403            ((code >= 0xb9e) && (code <= 0xb9f)) ||
2404            ((code >= 0xba3) && (code <= 0xba4)) ||
2405            ((code >= 0xba8) && (code <= 0xbaa)) ||
2406            ((code >= 0xbae) && (code <= 0xbb5)) ||
2407            ((code >= 0xbb7) && (code <= 0xbb9)) ||
2408            ((code >= 0xc05) && (code <= 0xc0c)) ||
2409            ((code >= 0xc0e) && (code <= 0xc10)) ||
2410            ((code >= 0xc12) && (code <= 0xc28)) ||
2411            ((code >= 0xc2a) && (code <= 0xc33)) ||
2412            ((code >= 0xc35) && (code <= 0xc39)) ||
2413            ((code >= 0xc60) && (code <= 0xc61)) ||
2414            ((code >= 0xc85) && (code <= 0xc8c)) ||
2415            ((code >= 0xc8e) && (code <= 0xc90)) ||
2416            ((code >= 0xc92) && (code <= 0xca8)) ||
2417            ((code >= 0xcaa) && (code <= 0xcb3)) ||
2418            ((code >= 0xcb5) && (code <= 0xcb9)) ||
2419            (code == 0xcde) ||
2420            ((code >= 0xce0) && (code <= 0xce1)) ||
2421            ((code >= 0xd05) && (code <= 0xd0c)) ||
2422            ((code >= 0xd0e) && (code <= 0xd10)) ||
2423            ((code >= 0xd12) && (code <= 0xd28)) ||
2424            ((code >= 0xd2a) && (code <= 0xd39)) ||
2425            ((code >= 0xd60) && (code <= 0xd61)) ||
2426            ((code >= 0xd85) && (code <= 0xd96)) ||
2427            ((code >= 0xd9a) && (code <= 0xdb1)) ||
2428            ((code >= 0xdb3) && (code <= 0xdbb)) ||
2429            (code == 0xdbd) ||
2430            ((code >= 0xdc0) && (code <= 0xdc6)) ||
2431            ((code >= 0xe01) && (code <= 0xe30)) ||
2432            ((code >= 0xe32) && (code <= 0xe33)) ||
2433            ((code >= 0xe40) && (code <= 0xe45)) ||
2434            ((code >= 0xe81) && (code <= 0xe82)) ||
2435            (code == 0xe84) ||
2436            ((code >= 0xe87) && (code <= 0xe88)) ||
2437            (code == 0xe8a) ||
2438            (code == 0xe8d) ||
2439            ((code >= 0xe94) && (code <= 0xe97)) ||
2440            ((code >= 0xe99) && (code <= 0xe9f)) ||
2441            ((code >= 0xea1) && (code <= 0xea3)) ||
2442            (code == 0xea5) ||
2443            (code == 0xea7) ||
2444            ((code >= 0xeaa) && (code <= 0xeab)) ||
2445            ((code >= 0xead) && (code <= 0xeb0)) ||
2446            ((code >= 0xeb2) && (code <= 0xeb3)) ||
2447            (code == 0xebd) ||
2448            ((code >= 0xec0) && (code <= 0xec4)) ||
2449            ((code >= 0xedc) && (code <= 0xedd)) ||
2450            (code == 0xf00) ||
2451            ((code >= 0xf40) && (code <= 0xf47)) ||
2452            ((code >= 0xf49) && (code <= 0xf6a)) ||
2453            ((code >= 0xf88) && (code <= 0xf8b)) ||
2454            ((code >= 0x1000) && (code <= 0x1021)) ||
2455            ((code >= 0x1023) && (code <= 0x1027)) ||
2456            ((code >= 0x1029) && (code <= 0x102a)) ||
2457            ((code >= 0x1050) && (code <= 0x1055)) ||
2458            ((code >= 0x10d0) && (code <= 0x10f6)) ||
2459            ((code >= 0x1100) && (code <= 0x1159)) ||
2460            ((code >= 0x115f) && (code <= 0x11a2)) ||
2461            ((code >= 0x11a8) && (code <= 0x11f9)) ||
2462            ((code >= 0x1200) && (code <= 0x1206)) ||
2463            ((code >= 0x1208) && (code <= 0x1246)) ||
2464            (code == 0x1248) ||
2465            ((code >= 0x124a) && (code <= 0x124d)) ||
2466            ((code >= 0x1250) && (code <= 0x1256)) ||
2467            (code == 0x1258) ||
2468            ((code >= 0x125a) && (code <= 0x125d)) ||
2469            ((code >= 0x1260) && (code <= 0x1286)) ||
2470            (code == 0x1288) ||
2471            ((code >= 0x128a) && (code <= 0x128d)) ||
2472            ((code >= 0x1290) && (code <= 0x12ae)) ||
2473            (code == 0x12b0) ||
2474            ((code >= 0x12b2) && (code <= 0x12b5)) ||
2475            ((code >= 0x12b8) && (code <= 0x12be)) ||
2476            (code == 0x12c0) ||
2477            ((code >= 0x12c2) && (code <= 0x12c5)) ||
2478            ((code >= 0x12c8) && (code <= 0x12ce)) ||
2479            ((code >= 0x12d0) && (code <= 0x12d6)) ||
2480            ((code >= 0x12d8) && (code <= 0x12ee)) ||
2481            ((code >= 0x12f0) && (code <= 0x130e)) ||
2482            (code == 0x1310) ||
2483            ((code >= 0x1312) && (code <= 0x1315)) ||
2484            ((code >= 0x1318) && (code <= 0x131e)) ||
2485            ((code >= 0x1320) && (code <= 0x1346)) ||
2486            ((code >= 0x1348) && (code <= 0x135a)) ||
2487            ((code >= 0x13a0) && (code <= 0x13f4)) ||
2488            ((code >= 0x1401) && (code <= 0x166c)) ||
2489            ((code >= 0x166f) && (code <= 0x1676)) ||
2490            ((code >= 0x1681) && (code <= 0x169a)) ||
2491            ((code >= 0x16a0) && (code <= 0x16ea)) ||
2492            ((code >= 0x1780) && (code <= 0x17b3)) ||
2493            ((code >= 0x1820) && (code <= 0x1842)) ||
2494            ((code >= 0x1844) && (code <= 0x1877)) ||
2495            ((code >= 0x1880) && (code <= 0x18a8)) ||
2496            ((code >= 0x2135) && (code <= 0x2138)) ||
2497            (code == 0x3006) ||
2498            ((code >= 0x3041) && (code <= 0x3094)) ||
2499            ((code >= 0x30a1) && (code <= 0x30fa)) ||
2500            ((code >= 0x3105) && (code <= 0x312c)) ||
2501            ((code >= 0x3131) && (code <= 0x318e)) ||
2502            ((code >= 0x31a0) && (code <= 0x31b7)) ||
2503            (code == 0x3400) ||
2504            (code == 0x4db5) ||
2505            (code == 0x4e00) ||
2506            (code == 0x9fa5) ||
2507            ((code >= 0xa000) && (code <= 0xa48c)) ||
2508            (code == 0xac00) ||
2509            (code == 0xd7a3) ||
2510            ((code >= 0xf900) && (code <= 0xfa2d)) ||
2511            (code == 0xfb1d) ||
2512            ((code >= 0xfb1f) && (code <= 0xfb28)) ||
2513            ((code >= 0xfb2a) && (code <= 0xfb36)) ||
2514            ((code >= 0xfb38) && (code <= 0xfb3c)) ||
2515            (code == 0xfb3e) ||
2516            ((code >= 0xfb40) && (code <= 0xfb41)) ||
2517            ((code >= 0xfb43) && (code <= 0xfb44)) ||
2518            ((code >= 0xfb46) && (code <= 0xfbb1)) ||
2519            ((code >= 0xfbd3) && (code <= 0xfd3d)) ||
2520            ((code >= 0xfd50) && (code <= 0xfd8f)) ||
2521            ((code >= 0xfd92) && (code <= 0xfdc7)) ||
2522            ((code >= 0xfdf0) && (code <= 0xfdfb)) ||
2523            ((code >= 0xfe70) && (code <= 0xfe72)) ||
2524            (code == 0xfe74) ||
2525            ((code >= 0xfe76) && (code <= 0xfefc)) ||
2526            ((code >= 0xff66) && (code <= 0xff6f)) ||
2527            ((code >= 0xff71) && (code <= 0xff9d)) ||
2528            ((code >= 0xffa0) && (code <= 0xffbe)) ||
2529            ((code >= 0xffc2) && (code <= 0xffc7)) ||
2530            ((code >= 0xffca) && (code <= 0xffcf)) ||
2531            ((code >= 0xffd2) && (code <= 0xffd7)) ||
2532            ((code >= 0xffda) && (code <= 0xffdc)) ||
2533            ((code >= 0x10300) && (code <= 0x1031e)) ||
2534            ((code >= 0x10330) && (code <= 0x10349)) ||
2535            (code == 0x20000) ||
2536            (code == 0x2a6d6) ||
2537            ((code >= 0x2f800) && (code <= 0x2fa1d)));
2538 }
2539
2540 /**
2541  * xmlUCSIsCatLt:
2542  * @code: UCS code point
2543  *
2544  * Check whether the character is part of Lt UCS Category
2545  *
2546  * Returns 1 if true 0 otherwise
2547  */
2548 int
2549 xmlUCSIsCatLt(int code) {
2550     return((code == 0x1c5) ||
2551            (code == 0x1c8) ||
2552            (code == 0x1cb) ||
2553            (code == 0x1f2) ||
2554            ((code >= 0x1f88) && (code <= 0x1f8f)) ||
2555            ((code >= 0x1f98) && (code <= 0x1f9f)) ||
2556            ((code >= 0x1fa8) && (code <= 0x1faf)) ||
2557            (code == 0x1fbc) ||
2558            (code == 0x1fcc) ||
2559            (code == 0x1ffc));
2560 }
2561
2562 /**
2563  * xmlUCSIsCatLu:
2564  * @code: UCS code point
2565  *
2566  * Check whether the character is part of Lu UCS Category
2567  *
2568  * Returns 1 if true 0 otherwise
2569  */
2570 int
2571 xmlUCSIsCatLu(int code) {
2572     return(((code >= 0x41) && (code <= 0x5a)) ||
2573            ((code >= 0xc0) && (code <= 0xd6)) ||
2574            ((code >= 0xd8) && (code <= 0xde)) ||
2575            (code == 0x100) ||
2576            (code == 0x102) ||
2577            (code == 0x104) ||
2578            (code == 0x106) ||
2579            (code == 0x108) ||
2580            (code == 0x10a) ||
2581            (code == 0x10c) ||
2582            (code == 0x10e) ||
2583            (code == 0x110) ||
2584            (code == 0x112) ||
2585            (code == 0x114) ||
2586            (code == 0x116) ||
2587            (code == 0x118) ||
2588            (code == 0x11a) ||
2589            (code == 0x11c) ||
2590            (code == 0x11e) ||
2591            (code == 0x120) ||
2592            (code == 0x122) ||
2593            (code == 0x124) ||
2594            (code == 0x126) ||
2595            (code == 0x128) ||
2596            (code == 0x12a) ||
2597            (code == 0x12c) ||
2598            (code == 0x12e) ||
2599            (code == 0x130) ||
2600            (code == 0x132) ||
2601            (code == 0x134) ||
2602            (code == 0x136) ||
2603            (code == 0x139) ||
2604            (code == 0x13b) ||
2605            (code == 0x13d) ||
2606            (code == 0x13f) ||
2607            (code == 0x141) ||
2608            (code == 0x143) ||
2609            (code == 0x145) ||
2610            (code == 0x147) ||
2611            (code == 0x14a) ||
2612            (code == 0x14c) ||
2613            (code == 0x14e) ||
2614            (code == 0x150) ||
2615            (code == 0x152) ||
2616            (code == 0x154) ||
2617            (code == 0x156) ||
2618            (code == 0x158) ||
2619            (code == 0x15a) ||
2620            (code == 0x15c) ||
2621            (code == 0x15e) ||
2622            (code == 0x160) ||
2623            (code == 0x162) ||
2624            (code == 0x164) ||
2625            (code == 0x166) ||
2626            (code == 0x168) ||
2627            (code == 0x16a) ||
2628            (code == 0x16c) ||
2629            (code == 0x16e) ||
2630            (code == 0x170) ||
2631            (code == 0x172) ||
2632            (code == 0x174) ||
2633            (code == 0x176) ||
2634            ((code >= 0x178) && (code <= 0x179)) ||
2635            (code == 0x17b) ||
2636            (code == 0x17d) ||
2637            ((code >= 0x181) && (code <= 0x182)) ||
2638            (code == 0x184) ||
2639            ((code >= 0x186) && (code <= 0x187)) ||
2640            ((code >= 0x189) && (code <= 0x18b)) ||
2641            ((code >= 0x18e) && (code <= 0x191)) ||
2642            ((code >= 0x193) && (code <= 0x194)) ||
2643            ((code >= 0x196) && (code <= 0x198)) ||
2644            ((code >= 0x19c) && (code <= 0x19d)) ||
2645            ((code >= 0x19f) && (code <= 0x1a0)) ||
2646            (code == 0x1a2) ||
2647            (code == 0x1a4) ||
2648            ((code >= 0x1a6) && (code <= 0x1a7)) ||
2649            (code == 0x1a9) ||
2650            (code == 0x1ac) ||
2651            ((code >= 0x1ae) && (code <= 0x1af)) ||
2652            ((code >= 0x1b1) && (code <= 0x1b3)) ||
2653            (code == 0x1b5) ||
2654            ((code >= 0x1b7) && (code <= 0x1b8)) ||
2655            (code == 0x1bc) ||
2656            (code == 0x1c4) ||
2657            (code == 0x1c7) ||
2658            (code == 0x1ca) ||
2659            (code == 0x1cd) ||
2660            (code == 0x1cf) ||
2661            (code == 0x1d1) ||
2662            (code == 0x1d3) ||
2663            (code == 0x1d5) ||
2664            (code == 0x1d7) ||
2665            (code == 0x1d9) ||
2666            (code == 0x1db) ||
2667            (code == 0x1de) ||
2668            (code == 0x1e0) ||
2669            (code == 0x1e2) ||
2670            (code == 0x1e4) ||
2671            (code == 0x1e6) ||
2672            (code == 0x1e8) ||
2673            (code == 0x1ea) ||
2674            (code == 0x1ec) ||
2675            (code == 0x1ee) ||
2676            (code == 0x1f1) ||
2677            (code == 0x1f4) ||
2678            ((code >= 0x1f6) && (code <= 0x1f8)) ||
2679            (code == 0x1fa) ||
2680            (code == 0x1fc) ||
2681            (code == 0x1fe) ||
2682            (code == 0x200) ||
2683            (code == 0x202) ||
2684            (code == 0x204) ||
2685            (code == 0x206) ||
2686            (code == 0x208) ||
2687            (code == 0x20a) ||
2688            (code == 0x20c) ||
2689            (code == 0x20e) ||
2690            (code == 0x210) ||
2691            (code == 0x212) ||
2692            (code == 0x214) ||
2693            (code == 0x216) ||
2694            (code == 0x218) ||
2695            (code == 0x21a) ||
2696            (code == 0x21c) ||
2697            (code == 0x21e) ||
2698            (code == 0x222) ||
2699            (code == 0x224) ||
2700            (code == 0x226) ||
2701            (code == 0x228) ||
2702            (code == 0x22a) ||
2703            (code == 0x22c) ||
2704            (code == 0x22e) ||
2705            (code == 0x230) ||
2706            (code == 0x232) ||
2707            (code == 0x386) ||
2708            ((code >= 0x388) && (code <= 0x38a)) ||
2709            (code == 0x38c) ||
2710            ((code >= 0x38e) && (code <= 0x38f)) ||
2711            ((code >= 0x391) && (code <= 0x3a1)) ||
2712            ((code >= 0x3a3) && (code <= 0x3ab)) ||
2713            ((code >= 0x3d2) && (code <= 0x3d4)) ||
2714            (code == 0x3da) ||
2715            (code == 0x3dc) ||
2716            (code == 0x3de) ||
2717            (code == 0x3e0) ||
2718            (code == 0x3e2) ||
2719            (code == 0x3e4) ||
2720            (code == 0x3e6) ||
2721            (code == 0x3e8) ||
2722            (code == 0x3ea) ||
2723            (code == 0x3ec) ||
2724            (code == 0x3ee) ||
2725            (code == 0x3f4) ||
2726            ((code >= 0x400) && (code <= 0x42f)) ||
2727            (code == 0x460) ||
2728            (code == 0x462) ||
2729            (code == 0x464) ||
2730            (code == 0x466) ||
2731            (code == 0x468) ||
2732            (code == 0x46a) ||
2733            (code == 0x46c) ||
2734            (code == 0x46e) ||
2735            (code == 0x470) ||
2736            (code == 0x472) ||
2737            (code == 0x474) ||
2738            (code == 0x476) ||
2739            (code == 0x478) ||
2740            (code == 0x47a) ||
2741            (code == 0x47c) ||
2742            (code == 0x47e) ||
2743            (code == 0x480) ||
2744            (code == 0x48c) ||
2745            (code == 0x48e) ||
2746            (code == 0x490) ||
2747            (code == 0x492) ||
2748            (code == 0x494) ||
2749            (code == 0x496) ||
2750            (code == 0x498) ||
2751            (code == 0x49a) ||
2752            (code == 0x49c) ||
2753            (code == 0x49e) ||
2754            (code == 0x4a0) ||
2755            (code == 0x4a2) ||
2756            (code == 0x4a4) ||
2757            (code == 0x4a6) ||
2758            (code == 0x4a8) ||
2759            (code == 0x4aa) ||
2760            (code == 0x4ac) ||
2761            (code == 0x4ae) ||
2762            (code == 0x4b0) ||
2763            (code == 0x4b2) ||
2764            (code == 0x4b4) ||
2765            (code == 0x4b6) ||
2766            (code == 0x4b8) ||
2767            (code == 0x4ba) ||
2768            (code == 0x4bc) ||
2769            (code == 0x4be) ||
2770            ((code >= 0x4c0) && (code <= 0x4c1)) ||
2771            (code == 0x4c3) ||
2772            (code == 0x4c7) ||
2773            (code == 0x4cb) ||
2774            (code == 0x4d0) ||
2775            (code == 0x4d2) ||
2776            (code == 0x4d4) ||
2777            (code == 0x4d6) ||
2778            (code == 0x4d8) ||
2779            (code == 0x4da) ||
2780            (code == 0x4dc) ||
2781            (code == 0x4de) ||
2782            (code == 0x4e0) ||
2783            (code == 0x4e2) ||
2784            (code == 0x4e4) ||
2785            (code == 0x4e6) ||
2786            (code == 0x4e8) ||
2787            (code == 0x4ea) ||
2788            (code == 0x4ec) ||
2789            (code == 0x4ee) ||
2790            (code == 0x4f0) ||
2791            (code == 0x4f2) ||
2792            (code == 0x4f4) ||
2793            (code == 0x4f8) ||
2794            ((code >= 0x531) && (code <= 0x556)) ||
2795            ((code >= 0x10a0) && (code <= 0x10c5)) ||
2796            (code == 0x1e00) ||
2797            (code == 0x1e02) ||
2798            (code == 0x1e04) ||
2799            (code == 0x1e06) ||
2800            (code == 0x1e08) ||
2801            (code == 0x1e0a) ||
2802            (code == 0x1e0c) ||
2803            (code == 0x1e0e) ||
2804            (code == 0x1e10) ||
2805            (code == 0x1e12) ||
2806            (code == 0x1e14) ||
2807            (code == 0x1e16) ||
2808            (code == 0x1e18) ||
2809            (code == 0x1e1a) ||
2810            (code == 0x1e1c) ||
2811            (code == 0x1e1e) ||
2812            (code == 0x1e20) ||
2813            (code == 0x1e22) ||
2814            (code == 0x1e24) ||
2815            (code == 0x1e26) ||
2816            (code == 0x1e28) ||
2817            (code == 0x1e2a) ||
2818            (code == 0x1e2c) ||
2819            (code == 0x1e2e) ||
2820            (code == 0x1e30) ||
2821            (code == 0x1e32) ||
2822            (code == 0x1e34) ||
2823            (code == 0x1e36) ||
2824            (code == 0x1e38) ||
2825            (code == 0x1e3a) ||
2826            (code == 0x1e3c) ||
2827            (code == 0x1e3e) ||
2828            (code == 0x1e40) ||
2829            (code == 0x1e42) ||
2830            (code == 0x1e44) ||
2831            (code == 0x1e46) ||
2832            (code == 0x1e48) ||
2833            (code == 0x1e4a) ||
2834            (code == 0x1e4c) ||
2835            (code == 0x1e4e) ||
2836            (code == 0x1e50) ||
2837            (code == 0x1e52) ||
2838            (code == 0x1e54) ||
2839            (code == 0x1e56) ||
2840            (code == 0x1e58) ||
2841            (code == 0x1e5a) ||
2842            (code == 0x1e5c) ||
2843            (code == 0x1e5e) ||
2844            (code == 0x1e60) ||
2845            (code == 0x1e62) ||
2846            (code == 0x1e64) ||
2847            (code == 0x1e66) ||
2848            (code == 0x1e68) ||
2849            (code == 0x1e6a) ||
2850            (code == 0x1e6c) ||
2851            (code == 0x1e6e) ||
2852            (code == 0x1e70) ||
2853            (code == 0x1e72) ||
2854            (code == 0x1e74) ||
2855            (code == 0x1e76) ||
2856            (code == 0x1e78) ||
2857            (code == 0x1e7a) ||
2858            (code == 0x1e7c) ||
2859            (code == 0x1e7e) ||
2860            (code == 0x1e80) ||
2861            (code == 0x1e82) ||
2862            (code == 0x1e84) ||
2863            (code == 0x1e86) ||
2864            (code == 0x1e88) ||
2865            (code == 0x1e8a) ||
2866            (code == 0x1e8c) ||
2867            (code == 0x1e8e) ||
2868            (code == 0x1e90) ||
2869            (code == 0x1e92) ||
2870            (code == 0x1e94) ||
2871            (code == 0x1ea0) ||
2872            (code == 0x1ea2) ||
2873            (code == 0x1ea4) ||
2874            (code == 0x1ea6) ||
2875            (code == 0x1ea8) ||
2876            (code == 0x1eaa) ||
2877            (code == 0x1eac) ||
2878            (code == 0x1eae) ||
2879            (code == 0x1eb0) ||
2880            (code == 0x1eb2) ||
2881            (code == 0x1eb4) ||
2882            (code == 0x1eb6) ||
2883            (code == 0x1eb8) ||
2884            (code == 0x1eba) ||
2885            (code == 0x1ebc) ||
2886            (code == 0x1ebe) ||
2887            (code == 0x1ec0) ||
2888            (code == 0x1ec2) ||
2889            (code == 0x1ec4) ||
2890            (code == 0x1ec6) ||
2891            (code == 0x1ec8) ||
2892            (code == 0x1eca) ||
2893            (code == 0x1ecc) ||
2894            (code == 0x1ece) ||
2895            (code == 0x1ed0) ||
2896            (code == 0x1ed2) ||
2897            (code == 0x1ed4) ||
2898            (code == 0x1ed6) ||
2899            (code == 0x1ed8) ||
2900            (code == 0x1eda) ||
2901            (code == 0x1edc) ||
2902            (code == 0x1ede) ||
2903            (code == 0x1ee0) ||
2904            (code == 0x1ee2) ||
2905            (code == 0x1ee4) ||
2906            (code == 0x1ee6) ||
2907            (code == 0x1ee8) ||
2908            (code == 0x1eea) ||
2909            (code == 0x1eec) ||
2910            (code == 0x1eee) ||
2911            (code == 0x1ef0) ||
2912            (code == 0x1ef2) ||
2913            (code == 0x1ef4) ||
2914            (code == 0x1ef6) ||
2915            (code == 0x1ef8) ||
2916            ((code >= 0x1f08) && (code <= 0x1f0f)) ||
2917            ((code >= 0x1f18) && (code <= 0x1f1d)) ||
2918            ((code >= 0x1f28) && (code <= 0x1f2f)) ||
2919            ((code >= 0x1f38) && (code <= 0x1f3f)) ||
2920            ((code >= 0x1f48) && (code <= 0x1f4d)) ||
2921            (code == 0x1f59) ||
2922            (code == 0x1f5b) ||
2923            (code == 0x1f5d) ||
2924            (code == 0x1f5f) ||
2925            ((code >= 0x1f68) && (code <= 0x1f6f)) ||
2926            ((code >= 0x1fb8) && (code <= 0x1fbb)) ||
2927            ((code >= 0x1fc8) && (code <= 0x1fcb)) ||
2928            ((code >= 0x1fd8) && (code <= 0x1fdb)) ||
2929            ((code >= 0x1fe8) && (code <= 0x1fec)) ||
2930            ((code >= 0x1ff8) && (code <= 0x1ffb)) ||
2931            (code == 0x2102) ||
2932            (code == 0x2107) ||
2933            ((code >= 0x210b) && (code <= 0x210d)) ||
2934            ((code >= 0x2110) && (code <= 0x2112)) ||
2935            (code == 0x2115) ||
2936            ((code >= 0x2119) && (code <= 0x211d)) ||
2937            (code == 0x2124) ||
2938            (code == 0x2126) ||
2939            (code == 0x2128) ||
2940            ((code >= 0x212a) && (code <= 0x212d)) ||
2941            ((code >= 0x2130) && (code <= 0x2131)) ||
2942            (code == 0x2133) ||
2943            ((code >= 0xff21) && (code <= 0xff3a)) ||
2944            ((code >= 0x10400) && (code <= 0x10425)) ||
2945            ((code >= 0x1d400) && (code <= 0x1d419)) ||
2946            ((code >= 0x1d434) && (code <= 0x1d44d)) ||
2947            ((code >= 0x1d468) && (code <= 0x1d481)) ||
2948            (code == 0x1d49c) ||
2949            ((code >= 0x1d49e) && (code <= 0x1d49f)) ||
2950            (code == 0x1d4a2) ||
2951            ((code >= 0x1d4a5) && (code <= 0x1d4a6)) ||
2952            ((code >= 0x1d4a9) && (code <= 0x1d4ac)) ||
2953            ((code >= 0x1d4ae) && (code <= 0x1d4b5)) ||
2954            ((code >= 0x1d4d0) && (code <= 0x1d4e9)) ||
2955            ((code >= 0x1d504) && (code <= 0x1d505)) ||
2956            ((code >= 0x1d507) && (code <= 0x1d50a)) ||
2957            ((code >= 0x1d50d) && (code <= 0x1d514)) ||
2958            ((code >= 0x1d516) && (code <= 0x1d51c)) ||
2959            ((code >= 0x1d538) && (code <= 0x1d539)) ||
2960            ((code >= 0x1d53b) && (code <= 0x1d53e)) ||
2961            ((code >= 0x1d540) && (code <= 0x1d544)) ||
2962            (code == 0x1d546) ||
2963            ((code >= 0x1d54a) && (code <= 0x1d550)) ||
2964            ((code >= 0x1d56c) && (code <= 0x1d585)) ||
2965            ((code >= 0x1d5a0) && (code <= 0x1d5b9)) ||
2966            ((code >= 0x1d5d4) && (code <= 0x1d5ed)) ||
2967            ((code >= 0x1d608) && (code <= 0x1d621)) ||
2968            ((code >= 0x1d63c) && (code <= 0x1d655)) ||
2969            ((code >= 0x1d670) && (code <= 0x1d689)) ||
2970            ((code >= 0x1d6a8) && (code <= 0x1d6c0)) ||
2971            ((code >= 0x1d6e2) && (code <= 0x1d6fa)) ||
2972            ((code >= 0x1d71c) && (code <= 0x1d734)) ||
2973            ((code >= 0x1d756) && (code <= 0x1d76e)) ||
2974            ((code >= 0x1d790) && (code <= 0x1d7a8)));
2975 }
2976
2977 /**
2978  * xmlUCSIsCatM:
2979  * @code: UCS code point
2980  *
2981  * Check whether the character is part of M UCS Category
2982  *
2983  * Returns 1 if true 0 otherwise
2984  */
2985 int
2986 xmlUCSIsCatM(int code) {
2987     return(((code >= 0x300) && (code <= 0x34e)) ||
2988            ((code >= 0x360) && (code <= 0x362)) ||
2989            ((code >= 0x483) && (code <= 0x486)) ||
2990            ((code >= 0x488) && (code <= 0x489)) ||
2991            ((code >= 0x591) && (code <= 0x5a1)) ||
2992            ((code >= 0x5a3) && (code <= 0x5b9)) ||
2993            ((code >= 0x5bb) && (code <= 0x5bd)) ||
2994            (code == 0x5bf) ||
2995            ((code >= 0x5c1) && (code <= 0x5c2)) ||
2996            (code == 0x5c4) ||
2997            ((code >= 0x64b) && (code <= 0x655)) ||
2998            (code == 0x670) ||
2999            ((code >= 0x6d6) && (code <= 0x6e4)) ||
3000            ((code >= 0x6e7) && (code <= 0x6e8)) ||
3001            ((code >= 0x6ea) && (code <= 0x6ed)) ||
3002            (code == 0x711) ||
3003            ((code >= 0x730) && (code <= 0x74a)) ||
3004            ((code >= 0x7a6) && (code <= 0x7b0)) ||
3005            ((code >= 0x901) && (code <= 0x903)) ||
3006            (code == 0x93c) ||
3007            ((code >= 0x93e) && (code <= 0x94d)) ||
3008            ((code >= 0x951) && (code <= 0x954)) ||
3009            ((code >= 0x962) && (code <= 0x963)) ||
3010            ((code >= 0x981) && (code <= 0x983)) ||
3011            (code == 0x9bc) ||
3012            ((code >= 0x9be) && (code <= 0x9c4)) ||
3013            ((code >= 0x9c7) && (code <= 0x9c8)) ||
3014            ((code >= 0x9cb) && (code <= 0x9cd)) ||
3015            (code == 0x9d7) ||
3016            ((code >= 0x9e2) && (code <= 0x9e3)) ||
3017            (code == 0xa02) ||
3018            (code == 0xa3c) ||
3019            ((code >= 0xa3e) && (code <= 0xa42)) ||
3020            ((code >= 0xa47) && (code <= 0xa48)) ||
3021            ((code >= 0xa4b) && (code <= 0xa4d)) ||
3022            ((code >= 0xa70) && (code <= 0xa71)) ||
3023            ((code >= 0xa81) && (code <= 0xa83)) ||
3024            (code == 0xabc) ||
3025            ((code >= 0xabe) && (code <= 0xac5)) ||
3026            ((code >= 0xac7) && (code <= 0xac9)) ||
3027            ((code >= 0xacb) && (code <= 0xacd)) ||
3028            ((code >= 0xb01) && (code <= 0xb03)) ||
3029            (code == 0xb3c) ||
3030            ((code >= 0xb3e) && (code <= 0xb43)) ||
3031            ((code >= 0xb47) && (code <= 0xb48)) ||
3032            ((code >= 0xb4b) && (code <= 0xb4d)) ||
3033            ((code >= 0xb56) && (code <= 0xb57)) ||
3034            ((code >= 0xb82) && (code <= 0xb83)) ||
3035            ((code >= 0xbbe) && (code <= 0xbc2)) ||
3036            ((code >= 0xbc6) && (code <= 0xbc8)) ||
3037            ((code >= 0xbca) && (code <= 0xbcd)) ||
3038            (code == 0xbd7) ||
3039            ((code >= 0xc01) && (code <= 0xc03)) ||
3040            ((code >= 0xc3e) && (code <= 0xc44)) ||
3041            ((code >= 0xc46) && (code <= 0xc48)) ||
3042            ((code >= 0xc4a) && (code <= 0xc4d)) ||
3043            ((code >= 0xc55) && (code <= 0xc56)) ||
3044            ((code >= 0xc82) && (code <= 0xc83)) ||
3045            ((code >= 0xcbe) && (code <= 0xcc4)) ||
3046            ((code >= 0xcc6) && (code <= 0xcc8)) ||
3047            ((code >= 0xcca) && (code <= 0xccd)) ||
3048            ((code >= 0xcd5) && (code <= 0xcd6)) ||
3049            ((code >= 0xd02) && (code <= 0xd03)) ||
3050            ((code >= 0xd3e) && (code <= 0xd43)) ||
3051            ((code >= 0xd46) && (code <= 0xd48)) ||
3052            ((code >= 0xd4a) && (code <= 0xd4d)) ||
3053            (code == 0xd57) ||
3054            ((code >= 0xd82) && (code <= 0xd83)) ||
3055            (code == 0xdca) ||
3056            ((code >= 0xdcf) && (code <= 0xdd4)) ||
3057            (code == 0xdd6) ||
3058            ((code >= 0xdd8) && (code <= 0xddf)) ||
3059            ((code >= 0xdf2) && (code <= 0xdf3)) ||
3060            (code == 0xe31) ||
3061            ((code >= 0xe34) && (code <= 0xe3a)) ||
3062            ((code >= 0xe47) && (code <= 0xe4e)) ||
3063            (code == 0xeb1) ||
3064            ((code >= 0xeb4) && (code <= 0xeb9)) ||
3065            ((code >= 0xebb) && (code <= 0xebc)) ||
3066            ((code >= 0xec8) && (code <= 0xecd)) ||
3067            ((code >= 0xf18) && (code <= 0xf19)) ||
3068            (code == 0xf35) ||
3069            (code == 0xf37) ||
3070            (code == 0xf39) ||
3071            ((code >= 0xf3e) && (code <= 0xf3f)) ||
3072            ((code >= 0xf71) && (code <= 0xf84)) ||
3073            ((code >= 0xf86) && (code <= 0xf87)) ||
3074            ((code >= 0xf90) && (code <= 0xf97)) ||
3075            ((code >= 0xf99) && (code <= 0xfbc)) ||
3076            (code == 0xfc6) ||
3077            ((code >= 0x102c) && (code <= 0x1032)) ||
3078            ((code >= 0x1036) && (code <= 0x1039)) ||
3079            ((code >= 0x1056) && (code <= 0x1059)) ||
3080            ((code >= 0x17b4) && (code <= 0x17d3)) ||
3081            (code == 0x18a9) ||
3082            ((code >= 0x20d0) && (code <= 0x20e3)) ||
3083            ((code >= 0x302a) && (code <= 0x302f)) ||
3084            ((code >= 0x3099) && (code <= 0x309a)) ||
3085            (code == 0xfb1e) ||
3086            ((code >= 0xfe20) && (code <= 0xfe23)) ||
3087            ((code >= 0x1d165) && (code <= 0x1d169)) ||
3088            ((code >= 0x1d16d) && (code <= 0x1d172)) ||
3089            ((code >= 0x1d17b) && (code <= 0x1d182)) ||
3090            ((code >= 0x1d185) && (code <= 0x1d18b)) ||
3091            ((code >= 0x1d1aa) && (code <= 0x1d1ad)));
3092 }
3093
3094 /**
3095  * xmlUCSIsCatMc:
3096  * @code: UCS code point
3097  *
3098  * Check whether the character is part of Mc UCS Category
3099  *
3100  * Returns 1 if true 0 otherwise
3101  */
3102 int
3103 xmlUCSIsCatMc(int code) {
3104     return((code == 0x903) ||
3105            ((code >= 0x93e) && (code <= 0x940)) ||
3106            ((code >= 0x949) && (code <= 0x94c)) ||
3107            ((code >= 0x982) && (code <= 0x983)) ||
3108            ((code >= 0x9be) && (code <= 0x9c0)) ||
3109            ((code >= 0x9c7) && (code <= 0x9c8)) ||
3110            ((code >= 0x9cb) && (code <= 0x9cc)) ||
3111            (code == 0x9d7) ||
3112            ((code >= 0xa3e) && (code <= 0xa40)) ||
3113            (code == 0xa83) ||
3114            ((code >= 0xabe) && (code <= 0xac0)) ||
3115            (code == 0xac9) ||
3116            ((code >= 0xacb) && (code <= 0xacc)) ||
3117            ((code >= 0xb02) && (code <= 0xb03)) ||
3118            (code == 0xb3e) ||
3119            (code == 0xb40) ||
3120            ((code >= 0xb47) && (code <= 0xb48)) ||
3121            ((code >= 0xb4b) && (code <= 0xb4c)) ||
3122            (code == 0xb57) ||
3123            (code == 0xb83) ||
3124            ((code >= 0xbbe) && (code <= 0xbbf)) ||
3125            ((code >= 0xbc1) && (code <= 0xbc2)) ||
3126            ((code >= 0xbc6) && (code <= 0xbc8)) ||
3127            ((code >= 0xbca) && (code <= 0xbcc)) ||
3128            (code == 0xbd7) ||
3129            ((code >= 0xc01) && (code <= 0xc03)) ||
3130            ((code >= 0xc41) && (code <= 0xc44)) ||
3131            ((code >= 0xc82) && (code <= 0xc83)) ||
3132            (code == 0xcbe) ||
3133            ((code >= 0xcc0) && (code <= 0xcc4)) ||
3134            ((code >= 0xcc7) && (code <= 0xcc8)) ||
3135            ((code >= 0xcca) && (code <= 0xccb)) ||
3136            ((code >= 0xcd5) && (code <= 0xcd6)) ||
3137            ((code >= 0xd02) && (code <= 0xd03)) ||
3138            ((code >= 0xd3e) && (code <= 0xd40)) ||
3139            ((code >= 0xd46) && (code <= 0xd48)) ||
3140            ((code >= 0xd4a) && (code <= 0xd4c)) ||
3141            (code == 0xd57) ||
3142            ((code >= 0xd82) && (code <= 0xd83)) ||
3143            ((code >= 0xdcf) && (code <= 0xdd1)) ||
3144            ((code >= 0xdd8) && (code <= 0xddf)) ||
3145            ((code >= 0xdf2) && (code <= 0xdf3)) ||
3146            ((code >= 0xf3e) && (code <= 0xf3f)) ||
3147            (code == 0xf7f) ||
3148            (code == 0x102c) ||
3149            (code == 0x1031) ||
3150            (code == 0x1038) ||
3151            ((code >= 0x1056) && (code <= 0x1057)) ||
3152            ((code >= 0x17b4) && (code <= 0x17b6)) ||
3153            ((code >= 0x17be) && (code <= 0x17c5)) ||
3154            ((code >= 0x17c7) && (code <= 0x17c8)) ||
3155            ((code >= 0x1d165) && (code <= 0x1d166)) ||
3156            ((code >= 0x1d16d) && (code <= 0x1d172)));
3157 }
3158
3159 /**
3160  * xmlUCSIsCatMe:
3161  * @code: UCS code point
3162  *
3163  * Check whether the character is part of Me UCS Category
3164  *
3165  * Returns 1 if true 0 otherwise
3166  */
3167 int
3168 xmlUCSIsCatMe(int code) {
3169     return(((code >= 0x488) && (code <= 0x489)) ||
3170            ((code >= 0x6dd) && (code <= 0x6de)) ||
3171            ((code >= 0x20dd) && (code <= 0x20e0)) ||
3172            ((code >= 0x20e2) && (code <= 0x20e3)));
3173 }
3174
3175 /**
3176  * xmlUCSIsCatMn:
3177  * @code: UCS code point
3178  *
3179  * Check whether the character is part of Mn UCS Category
3180  *
3181  * Returns 1 if true 0 otherwise
3182  */
3183 int
3184 xmlUCSIsCatMn(int code) {
3185     return(((code >= 0x300) && (code <= 0x34e)) ||
3186            ((code >= 0x360) && (code <= 0x362)) ||
3187            ((code >= 0x483) && (code <= 0x486)) ||
3188            ((code >= 0x591) && (code <= 0x5a1)) ||
3189            ((code >= 0x5a3) && (code <= 0x5b9)) ||
3190            ((code >= 0x5bb) && (code <= 0x5bd)) ||
3191            (code == 0x5bf) ||
3192            ((code >= 0x5c1) && (code <= 0x5c2)) ||
3193            (code == 0x5c4) ||
3194            ((code >= 0x64b) && (code <= 0x655)) ||
3195            (code == 0x670) ||
3196            ((code >= 0x6d6) && (code <= 0x6dc)) ||
3197            ((code >= 0x6df) && (code <= 0x6e4)) ||
3198            ((code >= 0x6e7) && (code <= 0x6e8)) ||
3199            ((code >= 0x6ea) && (code <= 0x6ed)) ||
3200            (code == 0x711) ||
3201            ((code >= 0x730) && (code <= 0x74a)) ||
3202            ((code >= 0x7a6) && (code <= 0x7b0)) ||
3203            ((code >= 0x901) && (code <= 0x902)) ||
3204            (code == 0x93c) ||
3205            ((code >= 0x941) && (code <= 0x948)) ||
3206            (code == 0x94d) ||
3207            ((code >= 0x951) && (code <= 0x954)) ||
3208            ((code >= 0x962) && (code <= 0x963)) ||
3209            (code == 0x981) ||
3210            (code == 0x9bc) ||
3211            ((code >= 0x9c1) && (code <= 0x9c4)) ||
3212            (code == 0x9cd) ||
3213            ((code >= 0x9e2) && (code <= 0x9e3)) ||
3214            (code == 0xa02) ||
3215            (code == 0xa3c) ||
3216            ((code >= 0xa41) && (code <= 0xa42)) ||
3217            ((code >= 0xa47) && (code <= 0xa48)) ||
3218            ((code >= 0xa4b) && (code <= 0xa4d)) ||
3219            ((code >= 0xa70) && (code <= 0xa71)) ||
3220            ((code >= 0xa81) && (code <= 0xa82)) ||
3221            (code == 0xabc) ||
3222            ((code >= 0xac1) && (code <= 0xac5)) ||
3223            ((code >= 0xac7) && (code <= 0xac8)) ||
3224            (code == 0xacd) ||
3225            (code == 0xb01) ||
3226            (code == 0xb3c) ||
3227            (code == 0xb3f) ||
3228            ((code >= 0xb41) && (code <= 0xb43)) ||
3229            (code == 0xb4d) ||
3230            (code == 0xb56) ||
3231            (code == 0xb82) ||
3232            (code == 0xbc0) ||
3233            (code == 0xbcd) ||
3234            ((code >= 0xc3e) && (code <= 0xc40)) ||
3235            ((code >= 0xc46) && (code <= 0xc48)) ||
3236            ((code >= 0xc4a) && (code <= 0xc4d)) ||
3237            ((code >= 0xc55) && (code <= 0xc56)) ||
3238            (code == 0xcbf) ||
3239            (code == 0xcc6) ||
3240            ((code >= 0xccc) && (code <= 0xccd)) ||
3241            ((code >= 0xd41) && (code <= 0xd43)) ||
3242            (code == 0xd4d) ||
3243            (code == 0xdca) ||
3244            ((code >= 0xdd2) && (code <= 0xdd4)) ||
3245            (code == 0xdd6) ||
3246            (code == 0xe31) ||
3247            ((code >= 0xe34) && (code <= 0xe3a)) ||
3248            ((code >= 0xe47) && (code <= 0xe4e)) ||
3249            (code == 0xeb1) ||
3250            ((code >= 0xeb4) && (code <= 0xeb9)) ||
3251            ((code >= 0xebb) && (code <= 0xebc)) ||
3252            ((code >= 0xec8) && (code <= 0xecd)) ||
3253            ((code >= 0xf18) && (code <= 0xf19)) ||
3254            (code == 0xf35) ||
3255            (code == 0xf37) ||
3256            (code == 0xf39) ||
3257            ((code >= 0xf71) && (code <= 0xf7e)) ||
3258            ((code >= 0xf80) && (code <= 0xf84)) ||
3259            ((code >= 0xf86) && (code <= 0xf87)) ||
3260            ((code >= 0xf90) && (code <= 0xf97)) ||
3261            ((code >= 0xf99) && (code <= 0xfbc)) ||
3262            (code == 0xfc6) ||
3263            ((code >= 0x102d) && (code <= 0x1030)) ||
3264            (code == 0x1032) ||
3265            ((code >= 0x1036) && (code <= 0x1037)) ||
3266            (code == 0x1039) ||
3267            ((code >= 0x1058) && (code <= 0x1059)) ||
3268            ((code >= 0x17b7) && (code <= 0x17bd)) ||
3269            (code == 0x17c6) ||
3270            ((code >= 0x17c9) && (code <= 0x17d3)) ||
3271            (code == 0x18a9) ||
3272            ((code >= 0x20d0) && (code <= 0x20dc)) ||
3273            (code == 0x20e1) ||
3274            ((code >= 0x302a) && (code <= 0x302f)) ||
3275            ((code >= 0x3099) && (code <= 0x309a)) ||
3276            (code == 0xfb1e) ||
3277            ((code >= 0xfe20) && (code <= 0xfe23)) ||
3278            ((code >= 0x1d167) && (code <= 0x1d169)) ||
3279            ((code >= 0x1d17b) && (code <= 0x1d182)) ||
3280            ((code >= 0x1d185) && (code <= 0x1d18b)) ||
3281            ((code >= 0x1d1aa) && (code <= 0x1d1ad)));
3282 }
3283
3284 /**
3285  * xmlUCSIsCatN:
3286  * @code: UCS code point
3287  *
3288  * Check whether the character is part of N UCS Category
3289  *
3290  * Returns 1 if true 0 otherwise
3291  */
3292 int
3293 xmlUCSIsCatN(int code) {
3294     return(((code >= 0x30) && (code <= 0x39)) ||
3295            ((code >= 0xb2) && (code <= 0xb3)) ||
3296            (code == 0xb9) ||
3297            ((code >= 0xbc) && (code <= 0xbe)) ||
3298            ((code >= 0x660) && (code <= 0x669)) ||
3299            ((code >= 0x6f0) && (code <= 0x6f9)) ||
3300            ((code >= 0x966) && (code <= 0x96f)) ||
3301            ((code >= 0x9e6) && (code <= 0x9ef)) ||
3302            ((code >= 0x9f4) && (code <= 0x9f9)) ||
3303            ((code >= 0xa66) && (code <= 0xa6f)) ||
3304            ((code >= 0xae6) && (code <= 0xaef)) ||
3305            ((code >= 0xb66) && (code <= 0xb6f)) ||
3306            ((code >= 0xbe7) && (code <= 0xbf2)) ||
3307            ((code >= 0xc66) && (code <= 0xc6f)) ||
3308            ((code >= 0xce6) && (code <= 0xcef)) ||
3309            ((code >= 0xd66) && (code <= 0xd6f)) ||
3310            ((code >= 0xe50) && (code <= 0xe59)) ||
3311            ((code >= 0xed0) && (code <= 0xed9)) ||
3312            ((code >= 0xf20) && (code <= 0xf33)) ||
3313            ((code >= 0x1040) && (code <= 0x1049)) ||
3314            ((code >= 0x1369) && (code <= 0x137c)) ||
3315            ((code >= 0x16ee) && (code <= 0x16f0)) ||
3316            ((code >= 0x17e0) && (code <= 0x17e9)) ||
3317            ((code >= 0x1810) && (code <= 0x1819)) ||
3318            (code == 0x2070) ||
3319            ((code >= 0x2074) && (code <= 0x2079)) ||
3320            ((code >= 0x2080) && (code <= 0x2089)) ||
3321            ((code >= 0x2153) && (code <= 0x2183)) ||
3322            ((code >= 0x2460) && (code <= 0x249b)) ||
3323            (code == 0x24ea) ||
3324            ((code >= 0x2776) && (code <= 0x2793)) ||
3325            (code == 0x3007) ||
3326            ((code >= 0x3021) && (code <= 0x3029)) ||
3327            ((code >= 0x3038) && (code <= 0x303a)) ||
3328            ((code >= 0x3192) && (code <= 0x3195)) ||
3329            ((code >= 0x3220) && (code <= 0x3229)) ||
3330            ((code >= 0x3280) && (code <= 0x3289)) ||
3331            ((code >= 0xff10) && (code <= 0xff19)) ||
3332            ((code >= 0x10320) && (code <= 0x10323)) ||
3333            (code == 0x1034a) ||
3334            ((code >= 0x1d7ce) && (code <= 0x1d7ff)));
3335 }
3336
3337 /**
3338  * xmlUCSIsCatNd:
3339  * @code: UCS code point
3340  *
3341  * Check whether the character is part of Nd UCS Category
3342  *
3343  * Returns 1 if true 0 otherwise
3344  */
3345 int
3346 xmlUCSIsCatNd(int code) {
3347     return(((code >= 0x30) && (code <= 0x39)) ||
3348            ((code >= 0x660) && (code <= 0x669)) ||
3349            ((code >= 0x6f0) && (code <= 0x6f9)) ||
3350            ((code >= 0x966) && (code <= 0x96f)) ||
3351            ((code >= 0x9e6) && (code <= 0x9ef)) ||
3352            ((code >= 0xa66) && (code <= 0xa6f)) ||
3353            ((code >= 0xae6) && (code <= 0xaef)) ||
3354            ((code >= 0xb66) && (code <= 0xb6f)) ||
3355            ((code >= 0xbe7) && (code <= 0xbef)) ||
3356            ((code >= 0xc66) && (code <= 0xc6f)) ||
3357            ((code >= 0xce6) && (code <= 0xcef)) ||
3358            ((code >= 0xd66) && (code <= 0xd6f)) ||
3359            ((code >= 0xe50) && (code <= 0xe59)) ||
3360            ((code >= 0xed0) && (code <= 0xed9)) ||
3361            ((code >= 0xf20) && (code <= 0xf29)) ||
3362            ((code >= 0x1040) && (code <= 0x1049)) ||
3363            ((code >= 0x1369) && (code <= 0x1371)) ||
3364            ((code >= 0x17e0) && (code <= 0x17e9)) ||
3365            ((code >= 0x1810) && (code <= 0x1819)) ||
3366            ((code >= 0xff10) && (code <= 0xff19)) ||
3367            ((code >= 0x1d7ce) && (code <= 0x1d7ff)));
3368 }
3369
3370 /**
3371  * xmlUCSIsCatNl:
3372  * @code: UCS code point
3373  *
3374  * Check whether the character is part of Nl UCS Category
3375  *
3376  * Returns 1 if true 0 otherwise
3377  */
3378 int
3379 xmlUCSIsCatNl(int code) {
3380     return(((code >= 0x16ee) && (code <= 0x16f0)) ||
3381            ((code >= 0x2160) && (code <= 0x2183)) ||
3382            (code == 0x3007) ||
3383            ((code >= 0x3021) && (code <= 0x3029)) ||
3384            ((code >= 0x3038) && (code <= 0x303a)) ||
3385            (code == 0x1034a));
3386 }
3387
3388 /**
3389  * xmlUCSIsCatNo:
3390  * @code: UCS code point
3391  *
3392  * Check whether the character is part of No UCS Category
3393  *
3394  * Returns 1 if true 0 otherwise
3395  */
3396 int
3397 xmlUCSIsCatNo(int code) {
3398     return(((code >= 0xb2) && (code <= 0xb3)) ||
3399            (code == 0xb9) ||
3400            ((code >= 0xbc) && (code <= 0xbe)) ||
3401            ((code >= 0x9f4) && (code <= 0x9f9)) ||
3402            ((code >= 0xbf0) && (code <= 0xbf2)) ||
3403            ((code >= 0xf2a) && (code <= 0xf33)) ||
3404            ((code >= 0x1372) && (code <= 0x137c)) ||
3405            (code == 0x2070) ||
3406            ((code >= 0x2074) && (code <= 0x2079)) ||
3407            ((code >= 0x2080) && (code <= 0x2089)) ||
3408            ((code >= 0x2153) && (code <= 0x215f)) ||
3409            ((code >= 0x2460) && (code <= 0x249b)) ||
3410            (code == 0x24ea) ||
3411            ((code >= 0x2776) && (code <= 0x2793)) ||
3412            ((code >= 0x3192) && (code <= 0x3195)) ||
3413            ((code >= 0x3220) && (code <= 0x3229)) ||
3414            ((code >= 0x3280) && (code <= 0x3289)) ||
3415            ((code >= 0x10320) && (code <= 0x10323)));
3416 }
3417
3418 /**
3419  * xmlUCSIsCatP:
3420  * @code: UCS code point
3421  *
3422  * Check whether the character is part of P UCS Category
3423  *
3424  * Returns 1 if true 0 otherwise
3425  */
3426 int
3427 xmlUCSIsCatP(int code) {
3428     return(((code >= 0x21) && (code <= 0x23)) ||
3429            ((code >= 0x25) && (code <= 0x2a)) ||
3430            ((code >= 0x2c) && (code <= 0x2f)) ||
3431            ((code >= 0x3a) && (code <= 0x3b)) ||
3432            ((code >= 0x3f) && (code <= 0x40)) ||
3433            ((code >= 0x5b) && (code <= 0x5d)) ||
3434            (code == 0x5f) ||
3435            (code == 0x7b) ||
3436            (code == 0x7d) ||
3437            (code == 0xa1) ||
3438            (code == 0xab) ||
3439            (code == 0xad) ||
3440            (code == 0xb7) ||
3441            (code == 0xbb) ||
3442            (code == 0xbf) ||
3443            (code == 0x37e) ||
3444            (code == 0x387) ||
3445            ((code >= 0x55a) && (code <= 0x55f)) ||
3446            ((code >= 0x589) && (code <= 0x58a)) ||
3447            (code == 0x5be) ||
3448            (code == 0x5c0) ||
3449            (code == 0x5c3) ||
3450            ((code >= 0x5f3) && (code <= 0x5f4)) ||
3451            (code == 0x60c) ||
3452            (code == 0x61b) ||
3453            (code == 0x61f) ||
3454            ((code >= 0x66a) && (code <= 0x66d)) ||
3455            (code == 0x6d4) ||
3456            ((code >= 0x700) && (code <= 0x70d)) ||
3457            ((code >= 0x964) && (code <= 0x965)) ||
3458            (code == 0x970) ||
3459            (code == 0xdf4) ||
3460            (code == 0xe4f) ||
3461            ((code >= 0xe5a) && (code <= 0xe5b)) ||
3462            ((code >= 0xf04) && (code <= 0xf12)) ||
3463            ((code >= 0xf3a) && (code <= 0xf3d)) ||
3464            (code == 0xf85) ||
3465            ((code >= 0x104a) && (code <= 0x104f)) ||
3466            (code == 0x10fb) ||
3467            ((code >= 0x1361) && (code <= 0x1368)) ||
3468            ((code >= 0x166d) && (code <= 0x166e)) ||
3469            ((code >= 0x169b) && (code <= 0x169c)) ||
3470            ((code >= 0x16eb) && (code <= 0x16ed)) ||
3471            ((code >= 0x17d4) && (code <= 0x17da)) ||
3472            (code == 0x17dc) ||
3473            ((code >= 0x1800) && (code <= 0x180a)) ||
3474            ((code >= 0x2010) && (code <= 0x2027)) ||
3475            ((code >= 0x2030) && (code <= 0x2043)) ||
3476            ((code >= 0x2045) && (code <= 0x2046)) ||
3477            ((code >= 0x2048) && (code <= 0x204d)) ||
3478            ((code >= 0x207d) && (code <= 0x207e)) ||
3479            ((code >= 0x208d) && (code <= 0x208e)) ||
3480            ((code >= 0x2329) && (code <= 0x232a)) ||
3481            ((code >= 0x3001) && (code <= 0x3003)) ||
3482            ((code >= 0x3008) && (code <= 0x3011)) ||
3483            ((code >= 0x3014) && (code <= 0x301f)) ||
3484            (code == 0x3030) ||
3485            (code == 0x30fb) ||
3486            ((code >= 0xfd3e) && (code <= 0xfd3f)) ||
3487            ((code >= 0xfe30) && (code <= 0xfe44)) ||
3488            ((code >= 0xfe49) && (code <= 0xfe52)) ||
3489            ((code >= 0xfe54) && (code <= 0xfe61)) ||
3490            (code == 0xfe63) ||
3491            (code == 0xfe68) ||
3492            ((code >= 0xfe6a) && (code <= 0xfe6b)) ||
3493            ((code >= 0xff01) && (code <= 0xff03)) ||
3494            ((code >= 0xff05) && (code <= 0xff0a)) ||
3495            ((code >= 0xff0c) && (code <= 0xff0f)) ||
3496            ((code >= 0xff1a) && (code <= 0xff1b)) ||
3497            ((code >= 0xff1f) && (code <= 0xff20)) ||
3498            ((code >= 0xff3b) && (code <= 0xff3d)) ||
3499            (code == 0xff3f) ||
3500            (code == 0xff5b) ||
3501            (code == 0xff5d) ||
3502            ((code >= 0xff61) && (code <= 0xff65)));
3503 }
3504
3505 /**
3506  * xmlUCSIsCatPc:
3507  * @code: UCS code point
3508  *
3509  * Check whether the character is part of Pc UCS Category
3510  *
3511  * Returns 1 if true 0 otherwise
3512  */
3513 int
3514 xmlUCSIsCatPc(int code) {
3515     return((code == 0x5f) ||
3516            ((code >= 0x203f) && (code <= 0x2040)) ||
3517            (code == 0x30fb) ||
3518            ((code >= 0xfe33) && (code <= 0xfe34)) ||
3519            ((code >= 0xfe4d) && (code <= 0xfe4f)) ||
3520            (code == 0xff3f) ||
3521            (code == 0xff65));
3522 }
3523
3524 /**
3525  * xmlUCSIsCatPd:
3526  * @code: UCS code point
3527  *
3528  * Check whether the character is part of Pd UCS Category
3529  *
3530  * Returns 1 if true 0 otherwise
3531  */
3532 int
3533 xmlUCSIsCatPd(int code) {
3534     return((code == 0x2d) ||
3535            (code == 0xad) ||
3536            (code == 0x58a) ||
3537            (code == 0x1806) ||
3538            ((code >= 0x2010) && (code <= 0x2015)) ||
3539            (code == 0x301c) ||
3540            (code == 0x3030) ||
3541            ((code >= 0xfe31) && (code <= 0xfe32)) ||
3542            (code == 0xfe58) ||
3543            (code == 0xfe63) ||
3544            (code == 0xff0d));
3545 }
3546
3547 /**
3548  * xmlUCSIsCatPe:
3549  * @code: UCS code point
3550  *
3551  * Check whether the character is part of Pe UCS Category
3552  *
3553  * Returns 1 if true 0 otherwise
3554  */
3555 int
3556 xmlUCSIsCatPe(int code) {
3557     return((code == 0x29) ||
3558            (code == 0x5d) ||
3559            (code == 0x7d) ||
3560            (code == 0xf3b) ||
3561            (code == 0xf3d) ||
3562            (code == 0x169c) ||
3563            (code == 0x2046) ||
3564            (code == 0x207e) ||
3565            (code == 0x208e) ||
3566            (code == 0x232a) ||
3567            (code == 0x3009) ||
3568            (code == 0x300b) ||
3569            (code == 0x300d) ||
3570            (code == 0x300f) ||
3571            (code == 0x3011) ||
3572            (code == 0x3015) ||
3573            (code == 0x3017) ||
3574            (code == 0x3019) ||
3575            (code == 0x301b) ||
3576            ((code >= 0x301e) && (code <= 0x301f)) ||
3577            (code == 0xfd3f) ||
3578            (code == 0xfe36) ||
3579            (code == 0xfe38) ||
3580            (code == 0xfe3a) ||
3581            (code == 0xfe3c) ||
3582            (code == 0xfe3e) ||
3583            (code == 0xfe40) ||
3584            (code == 0xfe42) ||
3585            (code == 0xfe44) ||
3586            (code == 0xfe5a) ||
3587            (code == 0xfe5c) ||
3588            (code == 0xfe5e) ||
3589            (code == 0xff09) ||
3590            (code == 0xff3d) ||
3591            (code == 0xff5d) ||
3592            (code == 0xff63));
3593 }
3594
3595 /**
3596  * xmlUCSIsCatPf:
3597  * @code: UCS code point
3598  *
3599  * Check whether the character is part of Pf UCS Category
3600  *
3601  * Returns 1 if true 0 otherwise
3602  */
3603 int
3604 xmlUCSIsCatPf(int code) {
3605     return((code == 0xbb) ||
3606            (code == 0x2019) ||
3607            (code == 0x201d) ||
3608            (code == 0x203a));
3609 }
3610
3611 /**
3612  * xmlUCSIsCatPi:
3613  * @code: UCS code point
3614  *
3615  * Check whether the character is part of Pi UCS Category
3616  *
3617  * Returns 1 if true 0 otherwise
3618  */
3619 int
3620 xmlUCSIsCatPi(int code) {
3621     return((code == 0xab) ||
3622            (code == 0x2018) ||
3623            ((code >= 0x201b) && (code <= 0x201c)) ||
3624            (code == 0x201f) ||
3625            (code == 0x2039));
3626 }
3627
3628 /**
3629  * xmlUCSIsCatPo:
3630  * @code: UCS code point
3631  *
3632  * Check whether the character is part of Po UCS Category
3633  *
3634  * Returns 1 if true 0 otherwise
3635  */
3636 int
3637 xmlUCSIsCatPo(int code) {
3638     return(((code >= 0x21) && (code <= 0x23)) ||
3639            ((code >= 0x25) && (code <= 0x27)) ||
3640            (code == 0x2a) ||
3641            (code == 0x2c) ||
3642            ((code >= 0x2e) && (code <= 0x2f)) ||
3643            ((code >= 0x3a) && (code <= 0x3b)) ||
3644            ((code >= 0x3f) && (code <= 0x40)) ||
3645            (code == 0x5c) ||
3646            (code == 0xa1) ||
3647            (code == 0xb7) ||
3648            (code == 0xbf) ||
3649            (code == 0x37e) ||
3650            (code == 0x387) ||
3651            ((code >= 0x55a) && (code <= 0x55f)) ||
3652            (code == 0x589) ||
3653            (code == 0x5be) ||
3654            (code == 0x5c0) ||
3655            (code == 0x5c3) ||
3656            ((code >= 0x5f3) && (code <= 0x5f4)) ||
3657            (code == 0x60c) ||
3658            (code == 0x61b) ||
3659            (code == 0x61f) ||
3660            ((code >= 0x66a) && (code <= 0x66d)) ||
3661            (code == 0x6d4) ||
3662            ((code >= 0x700) && (code <= 0x70d)) ||
3663            ((code >= 0x964) && (code <= 0x965)) ||
3664            (code == 0x970) ||
3665            (code == 0xdf4) ||
3666            (code == 0xe4f) ||
3667            ((code >= 0xe5a) && (code <= 0xe5b)) ||
3668            ((code >= 0xf04) && (code <= 0xf12)) ||
3669            (code == 0xf85) ||
3670            ((code >= 0x104a) && (code <= 0x104f)) ||
3671            (code == 0x10fb) ||
3672            ((code >= 0x1361) && (code <= 0x1368)) ||
3673            ((code >= 0x166d) && (code <= 0x166e)) ||
3674            ((code >= 0x16eb) && (code <= 0x16ed)) ||
3675            ((code >= 0x17d4) && (code <= 0x17da)) ||
3676            (code == 0x17dc) ||
3677            ((code >= 0x1800) && (code <= 0x1805)) ||
3678            ((code >= 0x1807) && (code <= 0x180a)) ||
3679            ((code >= 0x2016) && (code <= 0x2017)) ||
3680            ((code >= 0x2020) && (code <= 0x2027)) ||
3681            ((code >= 0x2030) && (code <= 0x2038)) ||
3682            ((code >= 0x203b) && (code <= 0x203e)) ||
3683            ((code >= 0x2041) && (code <= 0x2043)) ||
3684            ((code >= 0x2048) && (code <= 0x204d)) ||
3685            ((code >= 0x3001) && (code <= 0x3003)) ||
3686            (code == 0xfe30) ||
3687            ((code >= 0xfe49) && (code <= 0xfe4c)) ||
3688            ((code >= 0xfe50) && (code <= 0xfe52)) ||
3689            ((code >= 0xfe54) && (code <= 0xfe57)) ||
3690            ((code >= 0xfe5f) && (code <= 0xfe61)) ||
3691            (code == 0xfe68) ||
3692            ((code >= 0xfe6a) && (code <= 0xfe6b)) ||
3693            ((code >= 0xff01) && (code <= 0xff03)) ||
3694            ((code >= 0xff05) && (code <= 0xff07)) ||
3695            (code == 0xff0a) ||
3696            (code == 0xff0c) ||
3697            ((code >= 0xff0e) && (code <= 0xff0f)) ||
3698            ((code >= 0xff1a) && (code <= 0xff1b)) ||
3699            ((code >= 0xff1f) && (code <= 0xff20)) ||
3700            (code == 0xff3c) ||
3701            (code == 0xff61) ||
3702            (code == 0xff64));
3703 }
3704
3705 /**
3706  * xmlUCSIsCatPs:
3707  * @code: UCS code point
3708  *
3709  * Check whether the character is part of Ps UCS Category
3710  *
3711  * Returns 1 if true 0 otherwise
3712  */
3713 int
3714 xmlUCSIsCatPs(int code) {
3715     return((code == 0x28) ||
3716            (code == 0x5b) ||
3717            (code == 0x7b) ||
3718            (code == 0xf3a) ||
3719            (code == 0xf3c) ||
3720            (code == 0x169b) ||
3721            (code == 0x201a) ||
3722            (code == 0x201e) ||
3723            (code == 0x2045) ||
3724            (code == 0x207d) ||
3725            (code == 0x208d) ||
3726            (code == 0x2329) ||
3727            (code == 0x3008) ||
3728            (code == 0x300a) ||
3729            (code == 0x300c) ||
3730            (code == 0x300e) ||
3731            (code == 0x3010) ||
3732            (code == 0x3014) ||
3733            (code == 0x3016) ||
3734            (code == 0x3018) ||
3735            (code == 0x301a) ||
3736            (code == 0x301d) ||
3737            (code == 0xfd3e) ||
3738            (code == 0xfe35) ||
3739            (code == 0xfe37) ||
3740            (code == 0xfe39) ||
3741            (code == 0xfe3b) ||
3742            (code == 0xfe3d) ||
3743            (code == 0xfe3f) ||
3744            (code == 0xfe41) ||
3745            (code == 0xfe43) ||
3746            (code == 0xfe59) ||
3747            (code == 0xfe5b) ||
3748            (code == 0xfe5d) ||
3749            (code == 0xff08) ||
3750            (code == 0xff3b) ||
3751            (code == 0xff5b) ||
3752            (code == 0xff62));
3753 }
3754
3755 /**
3756  * xmlUCSIsCatS:
3757  * @code: UCS code point
3758  *
3759  * Check whether the character is part of S UCS Category
3760  *
3761  * Returns 1 if true 0 otherwise
3762  */
3763 int
3764 xmlUCSIsCatS(int code) {
3765     return((code == 0x24) ||
3766            (code == 0x2b) ||
3767            ((code >= 0x3c) && (code <= 0x3e)) ||
3768            (code == 0x5e) ||
3769            (code == 0x60) ||
3770            (code == 0x7c) ||
3771            (code == 0x7e) ||
3772            ((code >= 0xa2) && (code <= 0xa9)) ||
3773            (code == 0xac) ||
3774            ((code >= 0xae) && (code <= 0xb1)) ||
3775            (code == 0xb4) ||
3776            (code == 0xb6) ||
3777            (code == 0xb8) ||
3778            (code == 0xd7) ||
3779            (code == 0xf7) ||
3780            ((code >= 0x2b9) && (code <= 0x2ba)) ||
3781            ((code >= 0x2c2) && (code <= 0x2cf)) ||
3782            ((code >= 0x2d2) && (code <= 0x2df)) ||
3783            ((code >= 0x2e5) && (code <= 0x2ed)) ||
3784            ((code >= 0x374) && (code <= 0x375)) ||
3785            ((code >= 0x384) && (code <= 0x385)) ||
3786            (code == 0x482) ||
3787            (code == 0x6e9) ||
3788            ((code >= 0x6fd) && (code <= 0x6fe)) ||
3789            ((code >= 0x9f2) && (code <= 0x9f3)) ||
3790            (code == 0x9fa) ||
3791            (code == 0xb70) ||
3792            (code == 0xe3f) ||
3793            ((code >= 0xf01) && (code <= 0xf03)) ||
3794            ((code >= 0xf13) && (code <= 0xf17)) ||
3795            ((code >= 0xf1a) && (code <= 0xf1f)) ||
3796            (code == 0xf34) ||
3797            (code == 0xf36) ||
3798            (code == 0xf38) ||
3799            ((code >= 0xfbe) && (code <= 0xfc5)) ||
3800            ((code >= 0xfc7) && (code <= 0xfcc)) ||
3801            (code == 0xfcf) ||
3802            (code == 0x17db) ||
3803            (code == 0x1fbd) ||
3804            ((code >= 0x1fbf) && (code <= 0x1fc1)) ||
3805            ((code >= 0x1fcd) && (code <= 0x1fcf)) ||
3806            ((code >= 0x1fdd) && (code <= 0x1fdf)) ||
3807            ((code >= 0x1fed) && (code <= 0x1fef)) ||
3808            ((code >= 0x1ffd) && (code <= 0x1ffe)) ||
3809            (code == 0x2044) ||
3810            ((code >= 0x207a) && (code <= 0x207c)) ||
3811            ((code >= 0x208a) && (code <= 0x208c)) ||
3812            ((code >= 0x20a0) && (code <= 0x20af)) ||
3813            ((code >= 0x2100) && (code <= 0x2101)) ||
3814            ((code >= 0x2103) && (code <= 0x2106)) ||
3815            ((code >= 0x2108) && (code <= 0x2109)) ||
3816            (code == 0x2114) ||
3817            ((code >= 0x2116) && (code <= 0x2118)) ||
3818            ((code >= 0x211e) && (code <= 0x2123)) ||
3819            (code == 0x2125) ||
3820            (code == 0x2127) ||
3821            (code == 0x2129) ||
3822            (code == 0x212e) ||
3823            (code == 0x2132) ||
3824            (code == 0x213a) ||
3825            ((code >= 0x2190) && (code <= 0x21f3)) ||
3826            ((code >= 0x2200) && (code <= 0x22f1)) ||
3827            ((code >= 0x2300) && (code <= 0x2328)) ||
3828            ((code >= 0x232b) && (code <= 0x237b)) ||
3829            ((code >= 0x237d) && (code <= 0x239a)) ||
3830            ((code >= 0x2400) && (code <= 0x2426)) ||
3831            ((code >= 0x2440) && (code <= 0x244a)) ||
3832            ((code >= 0x249c) && (code <= 0x24e9)) ||
3833            ((code >= 0x2500) && (code <= 0x2595)) ||
3834            ((code >= 0x25a0) && (code <= 0x25f7)) ||
3835            ((code >= 0x2600) && (code <= 0x2613)) ||
3836            ((code >= 0x2619) && (code <= 0x2671)) ||
3837            ((code >= 0x2701) && (code <= 0x2704)) ||
3838            ((code >= 0x2706) && (code <= 0x2709)) ||
3839            ((code >= 0x270c) && (code <= 0x2727)) ||
3840            ((code >= 0x2729) && (code <= 0x274b)) ||
3841            (code == 0x274d) ||
3842            ((code >= 0x274f) && (code <= 0x2752)) ||
3843            (code == 0x2756) ||
3844            ((code >= 0x2758) && (code <= 0x275e)) ||
3845            ((code >= 0x2761) && (code <= 0x2767)) ||
3846            (code == 0x2794) ||
3847            ((code >= 0x2798) && (code <= 0x27af)) ||
3848            ((code >= 0x27b1) && (code <= 0x27be)) ||
3849            ((code >= 0x2800) && (code <= 0x28ff)) ||
3850            ((code >= 0x2e80) && (code <= 0x2e99)) ||
3851            ((code >= 0x2e9b) && (code <= 0x2ef3)) ||
3852            ((code >= 0x2f00) && (code <= 0x2fd5)) ||
3853            ((code >= 0x2ff0) && (code <= 0x2ffb)) ||
3854            (code == 0x3004) ||
3855            ((code >= 0x3012) && (code <= 0x3013)) ||
3856            (code == 0x3020) ||
3857            ((code >= 0x3036) && (code <= 0x3037)) ||
3858            ((code >= 0x303e) && (code <= 0x303f)) ||
3859            ((code >= 0x309b) && (code <= 0x309c)) ||
3860            ((code >= 0x3190) && (code <= 0x3191)) ||
3861            ((code >= 0x3196) && (code <= 0x319f)) ||
3862            ((code >= 0x3200) && (code <= 0x321c)) ||
3863            ((code >= 0x322a) && (code <= 0x3243)) ||
3864            ((code >= 0x3260) && (code <= 0x327b)) ||
3865            (code == 0x327f) ||
3866            ((code >= 0x328a) && (code <= 0x32b0)) ||
3867            ((code >= 0x32c0) && (code <= 0x32cb)) ||
3868            ((code >= 0x32d0) && (code <= 0x32fe)) ||
3869            ((code >= 0x3300) && (code <= 0x3376)) ||
3870            ((code >= 0x337b) && (code <= 0x33dd)) ||
3871            ((code >= 0x33e0) && (code <= 0x33fe)) ||
3872            ((code >= 0xa490) && (code <= 0xa4a1)) ||
3873            ((code >= 0xa4a4) && (code <= 0xa4b3)) ||
3874            ((code >= 0xa4b5) && (code <= 0xa4c0)) ||
3875            ((code >= 0xa4c2) && (code <= 0xa4c4)) ||
3876            (code == 0xa4c6) ||
3877            (code == 0xfb29) ||
3878            (code == 0xfe62) ||
3879            ((code >= 0xfe64) && (code <= 0xfe66)) ||
3880            (code == 0xfe69) ||
3881            (code == 0xff04) ||
3882            (code == 0xff0b) ||
3883            ((code >= 0xff1c) && (code <= 0xff1e)) ||
3884            (code == 0xff3e) ||
3885            (code == 0xff40) ||
3886            (code == 0xff5c) ||
3887            (code == 0xff5e) ||
3888            ((code >= 0xffe0) && (code <= 0xffe6)) ||
3889            ((code >= 0xffe8) && (code <= 0xffee)) ||
3890            ((code >= 0xfffc) && (code <= 0xfffd)) ||
3891            ((code >= 0x1d000) && (code <= 0x1d0f5)) ||
3892            ((code >= 0x1d100) && (code <= 0x1d126)) ||
3893            ((code >= 0x1d12a) && (code <= 0x1d164)) ||
3894            ((code >= 0x1d16a) && (code <= 0x1d16c)) ||
3895            ((code >= 0x1d183) && (code <= 0x1d184)) ||
3896            ((code >= 0x1d18c) && (code <= 0x1d1a9)) ||
3897            ((code >= 0x1d1ae) && (code <= 0x1d1dd)) ||
3898            (code == 0x1d6c1) ||
3899            (code == 0x1d6db) ||
3900            (code == 0x1d6fb) ||
3901            (code == 0x1d715) ||
3902            (code == 0x1d735) ||
3903            (code == 0x1d74f) ||
3904            (code == 0x1d76f) ||
3905            (code == 0x1d789) ||
3906            (code == 0x1d7a9) ||
3907            (code == 0x1d7c3));
3908 }
3909
3910 /**
3911  * xmlUCSIsCatSc:
3912  * @code: UCS code point
3913  *
3914  * Check whether the character is part of Sc UCS Category
3915  *
3916  * Returns 1 if true 0 otherwise
3917  */
3918 int
3919 xmlUCSIsCatSc(int code) {
3920     return((code == 0x24) ||
3921            ((code >= 0xa2) && (code <= 0xa5)) ||
3922            ((code >= 0x9f2) && (code <= 0x9f3)) ||
3923            (code == 0xe3f) ||
3924            (code == 0x17db) ||
3925            ((code >= 0x20a0) && (code <= 0x20af)) ||
3926            (code == 0xfe69) ||
3927            (code == 0xff04) ||
3928            ((code >= 0xffe0) && (code <= 0xffe1)) ||
3929            ((code >= 0xffe5) && (code <= 0xffe6)));
3930 }
3931
3932 /**
3933  * xmlUCSIsCatSk:
3934  * @code: UCS code point
3935  *
3936  * Check whether the character is part of Sk UCS Category
3937  *
3938  * Returns 1 if true 0 otherwise
3939  */
3940 int
3941 xmlUCSIsCatSk(int code) {
3942     return((code == 0x5e) ||
3943            (code == 0x60) ||
3944            (code == 0xa8) ||
3945            (code == 0xaf) ||
3946            (code == 0xb4) ||
3947            (code == 0xb8) ||
3948            ((code >= 0x2b9) && (code <= 0x2ba)) ||
3949            ((code >= 0x2c2) && (code <= 0x2cf)) ||
3950            ((code >= 0x2d2) && (code <= 0x2df)) ||
3951            ((code >= 0x2e5) && (code <= 0x2ed)) ||
3952            ((code >= 0x374) && (code <= 0x375)) ||
3953            ((code >= 0x384) && (code <= 0x385)) ||
3954            (code == 0x1fbd) ||
3955            ((code >= 0x1fbf) && (code <= 0x1fc1)) ||
3956            ((code >= 0x1fcd) && (code <= 0x1fcf)) ||
3957            ((code >= 0x1fdd) && (code <= 0x1fdf)) ||
3958            ((code >= 0x1fed) && (code <= 0x1fef)) ||
3959            ((code >= 0x1ffd) && (code <= 0x1ffe)) ||
3960            ((code >= 0x309b) && (code <= 0x309c)) ||
3961            (code == 0xff3e) ||
3962            (code == 0xff40) ||
3963            (code == 0xffe3));
3964 }
3965
3966 /**
3967  * xmlUCSIsCatSm:
3968  * @code: UCS code point
3969  *
3970  * Check whether the character is part of Sm UCS Category
3971  *
3972  * Returns 1 if true 0 otherwise
3973  */
3974 int
3975 xmlUCSIsCatSm(int code) {
3976     return((code == 0x2b) ||
3977            ((code >= 0x3c) && (code <= 0x3e)) ||
3978            (code == 0x7c) ||
3979            (code == 0x7e) ||
3980            (code == 0xac) ||
3981            (code == 0xb1) ||
3982            (code == 0xd7) ||
3983            (code == 0xf7) ||
3984            (code == 0x2044) ||
3985            ((code >= 0x207a) && (code <= 0x207c)) ||
3986            ((code >= 0x208a) && (code <= 0x208c)) ||
3987            ((code >= 0x2190) && (code <= 0x2194)) ||
3988            ((code >= 0x219a) && (code <= 0x219b)) ||
3989            (code == 0x21a0) ||
3990            (code == 0x21a3) ||
3991            (code == 0x21a6) ||
3992            (code == 0x21ae) ||
3993            ((code >= 0x21ce) && (code <= 0x21cf)) ||
3994            (code == 0x21d2) ||
3995            (code == 0x21d4) ||
3996            ((code >= 0x2200) && (code <= 0x22f1)) ||
3997            ((code >= 0x2308) && (code <= 0x230b)) ||
3998            ((code >= 0x2320) && (code <= 0x2321)) ||
3999            (code == 0x25b7) ||
4000            (code == 0x25c1) ||
4001            (code == 0x266f) ||
4002            (code == 0xfb29) ||
4003            (code == 0xfe62) ||
4004            ((code >= 0xfe64) && (code <= 0xfe66)) ||
4005            (code == 0xff0b) ||
4006            ((code >= 0xff1c) && (code <= 0xff1e)) ||
4007            (code == 0xff5c) ||
4008            (code == 0xff5e) ||
4009            (code == 0xffe2) ||
4010            ((code >= 0xffe9) && (code <= 0xffec)) ||
4011            (code == 0x1d6c1) ||
4012            (code == 0x1d6db) ||
4013            (code == 0x1d6fb) ||
4014            (code == 0x1d715) ||
4015            (code == 0x1d735) ||
4016            (code == 0x1d74f) ||
4017            (code == 0x1d76f) ||
4018            (code == 0x1d789) ||
4019            (code == 0x1d7a9) ||
4020            (code == 0x1d7c3));
4021 }
4022
4023 /**
4024  * xmlUCSIsCatSo:
4025  * @code: UCS code point
4026  *
4027  * Check whether the character is part of So UCS Category
4028  *
4029  * Returns 1 if true 0 otherwise
4030  */
4031 int
4032 xmlUCSIsCatSo(int code) {
4033     return(((code >= 0xa6) && (code <= 0xa7)) ||
4034            (code == 0xa9) ||
4035            (code == 0xae) ||
4036            (code == 0xb0) ||
4037            (code == 0xb6) ||
4038            (code == 0x482) ||
4039            (code == 0x6e9) ||
4040            ((code >= 0x6fd) && (code <= 0x6fe)) ||
4041            (code == 0x9fa) ||
4042            (code == 0xb70) ||
4043            ((code >= 0xf01) && (code <= 0xf03)) ||
4044            ((code >= 0xf13) && (code <= 0xf17)) ||
4045            ((code >= 0xf1a) && (code <= 0xf1f)) ||
4046            (code == 0xf34) ||
4047            (code == 0xf36) ||
4048            (code == 0xf38) ||
4049            ((code >= 0xfbe) && (code <= 0xfc5)) ||
4050            ((code >= 0xfc7) && (code <= 0xfcc)) ||
4051            (code == 0xfcf) ||
4052            ((code >= 0x2100) && (code <= 0x2101)) ||
4053            ((code >= 0x2103) && (code <= 0x2106)) ||
4054            ((code >= 0x2108) && (code <= 0x2109)) ||
4055            (code == 0x2114) ||
4056            ((code >= 0x2116) && (code <= 0x2118)) ||
4057            ((code >= 0x211e) && (code <= 0x2123)) ||
4058            (code == 0x2125) ||
4059            (code == 0x2127) ||
4060            (code == 0x2129) ||
4061            (code == 0x212e) ||
4062            (code == 0x2132) ||
4063            (code == 0x213a) ||
4064            ((code >= 0x2195) && (code <= 0x2199)) ||
4065            ((code >= 0x219c) && (code <= 0x219f)) ||
4066            ((code >= 0x21a1) && (code <= 0x21a2)) ||
4067            ((code >= 0x21a4) && (code <= 0x21a5)) ||
4068            ((code >= 0x21a7) && (code <= 0x21ad)) ||
4069            ((code >= 0x21af) && (code <= 0x21cd)) ||
4070            ((code >= 0x21d0) && (code <= 0x21d1)) ||
4071            (code == 0x21d3) ||
4072            ((code >= 0x21d5) && (code <= 0x21f3)) ||
4073            ((code >= 0x2300) && (code <= 0x2307)) ||
4074            ((code >= 0x230c) && (code <= 0x231f)) ||
4075            ((code >= 0x2322) && (code <= 0x2328)) ||
4076            ((code >= 0x232b) && (code <= 0x237b)) ||
4077            ((code >= 0x237d) && (code <= 0x239a)) ||
4078            ((code >= 0x2400) && (code <= 0x2426)) ||
4079            ((code >= 0x2440) && (code <= 0x244a)) ||
4080            ((code >= 0x249c) && (code <= 0x24e9)) ||
4081            ((code >= 0x2500) && (code <= 0x2595)) ||
4082            ((code >= 0x25a0) && (code <= 0x25b6)) ||
4083            ((code >= 0x25b8) && (code <= 0x25c0)) ||
4084            ((code >= 0x25c2) && (code <= 0x25f7)) ||
4085            ((code >= 0x2600) && (code <= 0x2613)) ||
4086            ((code >= 0x2619) && (code <= 0x266e)) ||
4087            ((code >= 0x2670) && (code <= 0x2671)) ||
4088            ((code >= 0x2701) && (code <= 0x2704)) ||
4089            ((code >= 0x2706) && (code <= 0x2709)) ||
4090            ((code >= 0x270c) && (code <= 0x2727)) ||
4091            ((code >= 0x2729) && (code <= 0x274b)) ||
4092            (code == 0x274d) ||
4093            ((code >= 0x274f) && (code <= 0x2752)) ||
4094            (code == 0x2756) ||
4095            ((code >= 0x2758) && (code <= 0x275e)) ||
4096            ((code >= 0x2761) && (code <= 0x2767)) ||
4097            (code == 0x2794) ||
4098            ((code >= 0x2798) && (code <= 0x27af)) ||
4099            ((code >= 0x27b1) && (code <= 0x27be)) ||
4100            ((code >= 0x2800) && (code <= 0x28ff)) ||
4101            ((code >= 0x2e80) && (code <= 0x2e99)) ||
4102            ((code >= 0x2e9b) && (code <= 0x2ef3)) ||
4103            ((code >= 0x2f00) && (code <= 0x2fd5)) ||
4104            ((code >= 0x2ff0) && (code <= 0x2ffb)) ||
4105            (code == 0x3004) ||
4106            ((code >= 0x3012) && (code <= 0x3013)) ||
4107            (code == 0x3020) ||
4108            ((code >= 0x3036) && (code <= 0x3037)) ||
4109            ((code >= 0x303e) && (code <= 0x303f)) ||
4110            ((code >= 0x3190) && (code <= 0x3191)) ||
4111            ((code >= 0x3196) && (code <= 0x319f)) ||
4112            ((code >= 0x3200) && (code <= 0x321c)) ||
4113            ((code >= 0x322a) && (code <= 0x3243)) ||
4114            ((code >= 0x3260) && (code <= 0x327b)) ||
4115            (code == 0x327f) ||
4116            ((code >= 0x328a) && (code <= 0x32b0)) ||
4117            ((code >= 0x32c0) && (code <= 0x32cb)) ||
4118            ((code >= 0x32d0) && (code <= 0x32fe)) ||
4119            ((code >= 0x3300) && (code <= 0x3376)) ||
4120            ((code >= 0x337b) && (code <= 0x33dd)) ||
4121            ((code >= 0x33e0) && (code <= 0x33fe)) ||
4122            ((code >= 0xa490) && (code <= 0xa4a1)) ||
4123            ((code >= 0xa4a4) && (code <= 0xa4b3)) ||
4124            ((code >= 0xa4b5) && (code <= 0xa4c0)) ||
4125            ((code >= 0xa4c2) && (code <= 0xa4c4)) ||
4126            (code == 0xa4c6) ||
4127            (code == 0xffe4) ||
4128            (code == 0xffe8) ||
4129            ((code >= 0xffed) && (code <= 0xffee)) ||
4130            ((code >= 0xfffc) && (code <= 0xfffd)) ||
4131            ((code >= 0x1d000) && (code <= 0x1d0f5)) ||
4132            ((code >= 0x1d100) && (code <= 0x1d126)) ||
4133            ((code >= 0x1d12a) && (code <= 0x1d164)) ||
4134            ((code >= 0x1d16a) && (code <= 0x1d16c)) ||
4135            ((code >= 0x1d183) && (code <= 0x1d184)) ||
4136            ((code >= 0x1d18c) && (code <= 0x1d1a9)) ||
4137            ((code >= 0x1d1ae) && (code <= 0x1d1dd)));
4138 }
4139
4140 /**
4141  * xmlUCSIsCatZ:
4142  * @code: UCS code point
4143  *
4144  * Check whether the character is part of Z UCS Category
4145  *
4146  * Returns 1 if true 0 otherwise
4147  */
4148 int
4149 xmlUCSIsCatZ(int code) {
4150     return((code == 0x20) ||
4151            (code == 0xa0) ||
4152            (code == 0x1680) ||
4153            ((code >= 0x2000) && (code <= 0x200b)) ||
4154            ((code >= 0x2028) && (code <= 0x2029)) ||
4155            (code == 0x202f) ||
4156            (code == 0x3000));
4157 }
4158
4159 /**
4160  * xmlUCSIsCatZl:
4161  * @code: UCS code point
4162  *
4163  * Check whether the character is part of Zl UCS Category
4164  *
4165  * Returns 1 if true 0 otherwise
4166  */
4167 int
4168 xmlUCSIsCatZl(int code) {
4169     return((code == 0x2028));
4170 }
4171
4172 /**
4173  * xmlUCSIsCatZp:
4174  * @code: UCS code point
4175  *
4176  * Check whether the character is part of Zp UCS Category
4177  *
4178  * Returns 1 if true 0 otherwise
4179  */
4180 int
4181 xmlUCSIsCatZp(int code) {
4182     return((code == 0x2029));
4183 }
4184
4185 /**
4186  * xmlUCSIsCatZs:
4187  * @code: UCS code point
4188  *
4189  * Check whether the character is part of Zs UCS Category
4190  *
4191  * Returns 1 if true 0 otherwise
4192  */
4193 int
4194 xmlUCSIsCatZs(int code) {
4195     return((code == 0x20) ||
4196            (code == 0xa0) ||
4197            (code == 0x1680) ||
4198            ((code >= 0x2000) && (code <= 0x200b)) ||
4199            (code == 0x202f) ||
4200            (code == 0x3000));
4201 }
4202
4203 /**
4204  * xmlUCSIsCat:
4205  * @code: UCS code point
4206  * @cat: UCS Category name
4207  *
4208  * Check whether the caracter is part of the UCS Category
4209  *
4210  * Returns 1 if true, 0 if false and -1 on unknown category
4211  */
4212 int
4213 xmlUCSIsCat(int code, const char *cat) {
4214     if (!strcmp(cat, "C"))
4215         return(xmlUCSIsCatC(code));
4216     if (!strcmp(cat, "Cc"))
4217         return(xmlUCSIsCatCc(code));
4218     if (!strcmp(cat, "Cf"))
4219         return(xmlUCSIsCatCf(code));
4220     if (!strcmp(cat, "Co"))
4221         return(xmlUCSIsCatCo(code));
4222     if (!strcmp(cat, "Cs"))
4223         return(xmlUCSIsCatCs(code));
4224     if (!strcmp(cat, "L"))
4225         return(xmlUCSIsCatL(code));
4226     if (!strcmp(cat, "Ll"))
4227         return(xmlUCSIsCatLl(code));
4228     if (!strcmp(cat, "Lm"))
4229         return(xmlUCSIsCatLm(code));
4230     if (!strcmp(cat, "Lo"))
4231         return(xmlUCSIsCatLo(code));
4232     if (!strcmp(cat, "Lt"))
4233         return(xmlUCSIsCatLt(code));
4234     if (!strcmp(cat, "Lu"))
4235         return(xmlUCSIsCatLu(code));
4236     if (!strcmp(cat, "M"))
4237         return(xmlUCSIsCatM(code));
4238     if (!strcmp(cat, "Mc"))
4239         return(xmlUCSIsCatMc(code));
4240     if (!strcmp(cat, "Me"))
4241         return(xmlUCSIsCatMe(code));
4242     if (!strcmp(cat, "Mn"))
4243         return(xmlUCSIsCatMn(code));
4244     if (!strcmp(cat, "N"))
4245         return(xmlUCSIsCatN(code));
4246     if (!strcmp(cat, "Nd"))
4247         return(xmlUCSIsCatNd(code));
4248     if (!strcmp(cat, "Nl"))
4249         return(xmlUCSIsCatNl(code));
4250     if (!strcmp(cat, "No"))
4251         return(xmlUCSIsCatNo(code));
4252     if (!strcmp(cat, "P"))
4253         return(xmlUCSIsCatP(code));
4254     if (!strcmp(cat, "Pc"))
4255         return(xmlUCSIsCatPc(code));
4256     if (!strcmp(cat, "Pd"))
4257         return(xmlUCSIsCatPd(code));
4258     if (!strcmp(cat, "Pe"))
4259         return(xmlUCSIsCatPe(code));
4260     if (!strcmp(cat, "Pf"))
4261         return(xmlUCSIsCatPf(code));
4262     if (!strcmp(cat, "Pi"))
4263         return(xmlUCSIsCatPi(code));
4264     if (!strcmp(cat, "Po"))
4265         return(xmlUCSIsCatPo(code));
4266     if (!strcmp(cat, "Ps"))
4267         return(xmlUCSIsCatPs(code));
4268     if (!strcmp(cat, "S"))
4269         return(xmlUCSIsCatS(code));
4270     if (!strcmp(cat, "Sc"))
4271         return(xmlUCSIsCatSc(code));
4272     if (!strcmp(cat, "Sk"))
4273         return(xmlUCSIsCatSk(code));
4274     if (!strcmp(cat, "Sm"))
4275         return(xmlUCSIsCatSm(code));
4276     if (!strcmp(cat, "So"))
4277         return(xmlUCSIsCatSo(code));
4278     if (!strcmp(cat, "Z"))
4279         return(xmlUCSIsCatZ(code));
4280     if (!strcmp(cat, "Zl"))
4281         return(xmlUCSIsCatZl(code));
4282     if (!strcmp(cat, "Zp"))
4283         return(xmlUCSIsCatZp(code));
4284     if (!strcmp(cat, "Zs"))
4285         return(xmlUCSIsCatZs(code));
4286     return(-1);
4287 }
4288
4289
4290 #endif /* LIBXML_UNICODE_ENABLED */