blob: 212d0521632b8fc08d7c112bfaf0f7c8de536ab7 [file] [log] [blame]
William M. Brack68aca052003-10-11 15:22:13 +00001/*
2 * chvalid.c: this module implements the character range
3 * validation APIs
4 *
5 * This file is automatically generated from the cvs source
6 * definition files using the genChRanges.py Python script
7 *
William M. Brackc4b81892003-10-12 10:42:46 +00008 * Generation date: Sun Oct 12 18:17:45 2003
William M. Brack68aca052003-10-11 15:22:13 +00009 * Sources: chvalid.def
10 * William Brack <wbrack@mmm.com.hk>
11 */
12
William M. Brack6819a4e2003-10-11 15:59:36 +000013#include <libxml/chvalid.h>
William M. Brack68aca052003-10-11 15:22:13 +000014
15/*
16 * The initial tables ({func_name}_tab) are used to validate whether a
17 * single-byte character is within the specified group. Each table
18 * contains 256 bytes, with each byte representing one of the 256
19 * possible characters. If the table byte is set, the character is
20 * allowed.
21 *
22 */
23unsigned char xmlIsPubidChar_tab[256] = {
24 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
25 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01,
Daniel Veillard1a993962003-10-11 20:58:06 +000027 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
William M. Brack68aca052003-10-11 15:22:13 +000028 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
29 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
30 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
Daniel Veillard1a993962003-10-11 20:58:06 +000031 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
William M. Brack68aca052003-10-11 15:22:13 +000032 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
33 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
34 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
36 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
38 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
40 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
45 0x00, 0x00, 0x00, 0x00 };
46
47static xmlChSRange xmlIsBaseChar_srng[] = { {0x100, 0x131}, {0x134, 0x13e},
48 {0x141, 0x148}, {0x14a, 0x17e}, {0x180, 0x1c3}, {0x1cd, 0x1f0},
49 {0x1f4, 0x1f5}, {0x1fa, 0x217}, {0x250, 0x2a8}, {0x2bb, 0x2c1},
50 {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c}, {0x38e, 0x3a1},
51 {0x3a3, 0x3ce}, {0x3d0, 0x3d6}, {0x3da, 0x3da}, {0x3dc, 0x3dc},
52 {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3f3}, {0x401, 0x40c},
53 {0x40e, 0x44f}, {0x451, 0x45c}, {0x45e, 0x481}, {0x490, 0x4c4},
54 {0x4c7, 0x4c8}, {0x4cb, 0x4cc}, {0x4d0, 0x4eb}, {0x4ee, 0x4f5},
55 {0x4f8, 0x4f9}, {0x531, 0x556}, {0x559, 0x559}, {0x561, 0x586},
56 {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x641, 0x64a},
57 {0x671, 0x6b7}, {0x6ba, 0x6be}, {0x6c0, 0x6ce}, {0x6d0, 0x6d3},
58 {0x6d5, 0x6d5}, {0x6e5, 0x6e6}, {0x905, 0x939}, {0x93d, 0x93d},
59 {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8},
60 {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9dc, 0x9dd},
61 {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10},
62 {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36},
63 {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74},
64 {0xa85, 0xa8b}, {0xa8d, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8},
65 {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd},
66 {0xae0, 0xae0}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28},
67 {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb36, 0xb39}, {0xb3d, 0xb3d},
68 {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb85, 0xb8a}, {0xb8e, 0xb90},
69 {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f},
70 {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5}, {0xbb7, 0xbb9},
71 {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc33},
72 {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c}, {0xc8e, 0xc90},
73 {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcde, 0xcde},
74 {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd28},
75 {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xe01, 0xe2e}, {0xe30, 0xe30},
76 {0xe32, 0xe33}, {0xe40, 0xe45}, {0xe81, 0xe82}, {0xe84, 0xe84},
77 {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, {0xe94, 0xe97},
78 {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xea7},
79 {0xeaa, 0xeab}, {0xead, 0xeae}, {0xeb0, 0xeb0}, {0xeb2, 0xeb3},
80 {0xebd, 0xebd}, {0xec0, 0xec4}, {0xf40, 0xf47}, {0xf49, 0xf69},
81 {0x10a0, 0x10c5}, {0x10d0, 0x10f6}, {0x1100, 0x1100}, {0x1102, 0x1103},
82 {0x1105, 0x1107}, {0x1109, 0x1109}, {0x110b, 0x110c}, {0x110e, 0x1112},
83 {0x113c, 0x113c}, {0x113e, 0x113e}, {0x1140, 0x1140}, {0x114c, 0x114c},
84 {0x114e, 0x114e}, {0x1150, 0x1150}, {0x1154, 0x1155}, {0x1159, 0x1159},
85 {0x115f, 0x1161}, {0x1163, 0x1163}, {0x1165, 0x1165}, {0x1167, 0x1167},
86 {0x1169, 0x1169}, {0x116d, 0x116e}, {0x1172, 0x1173}, {0x1175, 0x1175},
87 {0x119e, 0x119e}, {0x11a8, 0x11a8}, {0x11ab, 0x11ab}, {0x11ae, 0x11af},
88 {0x11b7, 0x11b8}, {0x11ba, 0x11ba}, {0x11bc, 0x11c2}, {0x11eb, 0x11eb},
89 {0x11f0, 0x11f0}, {0x11f9, 0x11f9}, {0x1e00, 0x1e9b}, {0x1ea0, 0x1ef9},
90 {0x1f00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d},
91 {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d},
92 {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe},
93 {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb},
94 {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2126, 0x2126},
95 {0x212a, 0x212b}, {0x212e, 0x212e}, {0x2180, 0x2182}, {0x3041, 0x3094},
96 {0x30a1, 0x30fa}, {0x3105, 0x312c}, {0xac00, 0xd7a3}};
William M. Brackc4b81892003-10-12 10:42:46 +000097xmlChRangeGroup xmlIsBaseCharGroup =
98 {197, 0, xmlIsBaseChar_srng, (xmlChLRangePtr)0};
William M. Brack68aca052003-10-11 15:22:13 +000099
100static xmlChSRange xmlIsChar_srng[] = { {0x100, 0xd7ff}, {0xe000, 0xfffd}};
101static xmlChLRange xmlIsChar_lrng[] = { {0x10000, 0x10ffff}};
William M. Brackc4b81892003-10-12 10:42:46 +0000102xmlChRangeGroup xmlIsCharGroup =
103 {2, 1, xmlIsChar_srng, xmlIsChar_lrng};
William M. Brack68aca052003-10-11 15:22:13 +0000104
105static xmlChSRange xmlIsCombining_srng[] = { {0x300, 0x345},
106 {0x360, 0x361}, {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9},
107 {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4},
108 {0x64b, 0x652}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6dd, 0x6df},
109 {0x6e0, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x901, 0x903},
110 {0x93c, 0x93c}, {0x93e, 0x94c}, {0x94d, 0x94d}, {0x951, 0x954},
111 {0x962, 0x963}, {0x981, 0x983}, {0x9bc, 0x9bc}, {0x9be, 0x9be},
112 {0x9bf, 0x9bf}, {0x9c0, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd},
113 {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa02, 0xa02}, {0xa3c, 0xa3c},
114 {0xa3e, 0xa3e}, {0xa3f, 0xa3f}, {0xa40, 0xa42}, {0xa47, 0xa48},
115 {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa83}, {0xabc, 0xabc},
116 {0xabe, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, {0xb01, 0xb03},
117 {0xb3c, 0xb3c}, {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d},
118 {0xb56, 0xb57}, {0xb82, 0xb83}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8},
119 {0xbca, 0xbcd}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44},
120 {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83},
121 {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6},
122 {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d},
123 {0xd57, 0xd57}, {0xe31, 0xe31}, {0xe34, 0xe3a}, {0xe47, 0xe4e},
124 {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, {0xec8, 0xecd},
125 {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39},
126 {0xf3e, 0xf3e}, {0xf3f, 0xf3f}, {0xf71, 0xf84}, {0xf86, 0xf8b},
127 {0xf90, 0xf95}, {0xf97, 0xf97}, {0xf99, 0xfad}, {0xfb1, 0xfb7},
128 {0xfb9, 0xfb9}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, {0x302a, 0x302f},
129 {0x3099, 0x3099}, {0x309a, 0x309a}};
William M. Brackc4b81892003-10-12 10:42:46 +0000130xmlChRangeGroup xmlIsCombiningGroup =
131 {95, 0, xmlIsCombining_srng, (xmlChLRangePtr)0};
William M. Brack68aca052003-10-11 15:22:13 +0000132
133static xmlChSRange xmlIsDigit_srng[] = { {0x660, 0x669}, {0x6f0, 0x6f9},
134 {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f}, {0xae6, 0xaef},
135 {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f}, {0xce6, 0xcef},
136 {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, {0xf20, 0xf29}};
William M. Brackc4b81892003-10-12 10:42:46 +0000137xmlChRangeGroup xmlIsDigitGroup =
138 {14, 0, xmlIsDigit_srng, (xmlChLRangePtr)0};
William M. Brack68aca052003-10-11 15:22:13 +0000139
140static xmlChSRange xmlIsExtender_srng[] = { {0x2d0, 0x2d0}, {0x2d1, 0x2d1},
141 {0x387, 0x387}, {0x640, 0x640}, {0xe46, 0xe46}, {0xec6, 0xec6},
Daniel Veillardea887cf2003-10-11 22:53:44 +0000142 {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309d, 0x309e}, {0x30fc, 0x30fe}};
William M. Brackc4b81892003-10-12 10:42:46 +0000143xmlChRangeGroup xmlIsExtenderGroup =
144 {10, 0, xmlIsExtender_srng, (xmlChLRangePtr)0};
William M. Brack68aca052003-10-11 15:22:13 +0000145
146static xmlChSRange xmlIsIdeographic_srng[] = { {0x3007, 0x3007},
Daniel Veillardea887cf2003-10-11 22:53:44 +0000147 {0x3021, 0x3029}, {0x4e00, 0x9fa5}};
William M. Brackc4b81892003-10-12 10:42:46 +0000148xmlChRangeGroup xmlIsIdeographicGroup =
149 {3, 0, xmlIsIdeographic_srng, (xmlChLRangePtr)0};
William M. Brack68aca052003-10-11 15:22:13 +0000150
151
152int
153xmlCharInRange (unsigned int val, xmlChRangeGroupPtr rptr) {
154 int low, high, mid;
155 xmlChSRangePtr sptr;
156 xmlChLRangePtr lptr;
157 if (val < 0x10000) { /* is val in 'short' or 'long' array? */
158 if (rptr->nbShortRange == 0)
159 return 0;
160 low = 0;
William M. Brackc4b81892003-10-12 10:42:46 +0000161 high = rptr->nbShortRange - 1;
William M. Brack68aca052003-10-11 15:22:13 +0000162 sptr = rptr->shortRange;
163 while (low <= high) {
164 mid = (low + high) / 2;
William M. Brackc4b81892003-10-12 10:42:46 +0000165 if ((unsigned short) val < sptr[mid].low) {
William M. Brack68aca052003-10-11 15:22:13 +0000166 high = mid - 1;
William M. Brackc4b81892003-10-12 10:42:46 +0000167 } else {
168 if ((unsigned short) val > sptr[mid].high) {
169 low = mid + 1;
170 } else {
171 return 1;
172 }
173 }
William M. Brack68aca052003-10-11 15:22:13 +0000174 }
175 } else {
William M. Brackc4b81892003-10-12 10:42:46 +0000176 if (rptr->nbLongRange == 0) {
William M. Brack68aca052003-10-11 15:22:13 +0000177 return 0;
William M. Brackc4b81892003-10-12 10:42:46 +0000178 }
William M. Brack68aca052003-10-11 15:22:13 +0000179 low = 0;
William M. Brackc4b81892003-10-12 10:42:46 +0000180 high = rptr->nbLongRange - 1;
William M. Brack68aca052003-10-11 15:22:13 +0000181 lptr = rptr->longRange;
182 while (low <= high) {
183 mid = (low + high) / 2;
William M. Brackc4b81892003-10-12 10:42:46 +0000184 if (val < lptr[mid].low) {
William M. Brack68aca052003-10-11 15:22:13 +0000185 high = mid - 1;
William M. Brackc4b81892003-10-12 10:42:46 +0000186 } else {
187 if (val > lptr[mid].high) {
188 low = mid + 1;
189 } else {
190 return 1;
191 }
192 }
William M. Brack68aca052003-10-11 15:22:13 +0000193 }
194 }
195 return 0;
196}
197