1 /*
2 * libxml2_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 *
8 * Generation date: Tue Nov 18 08:14:21 2003
9 * Sources: chvalid.def
10 * William Brack <wbrack@mmm.com.hk>
11 *
12 * See Copyright for the status of this software.
13 * Portion Copyright � 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
14 */
15
16 #define IN_LIBXML
17 #define UNDEF_IMPORT_C_IN_DATA
18 #include "xmlenglibxml.h"
19 #include <libxml2_chvalid.h>
20
21 /*
22 =====================================================================================
23 GLOBAL CONSTANTS (moved from _xmlGlobalState struct)
24 =====================================================================================
25 */
26 XMLPUBFUNEXPORT const xmlChSRange xmlIsBaseChar_srng[197] = { {0x100, 0x131}, {0x134, 0x13e},
27 {0x141, 0x148}, {0x14a, 0x17e}, {0x180, 0x1c3}, {0x1cd, 0x1f0},
28 {0x1f4, 0x1f5}, {0x1fa, 0x217}, {0x250, 0x2a8}, {0x2bb, 0x2c1},
29 {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c}, {0x38e, 0x3a1},
30 {0x3a3, 0x3ce}, {0x3d0, 0x3d6}, {0x3da, 0x3da}, {0x3dc, 0x3dc},
31 {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3f3}, {0x401, 0x40c},
32 {0x40e, 0x44f}, {0x451, 0x45c}, {0x45e, 0x481}, {0x490, 0x4c4},
33 {0x4c7, 0x4c8}, {0x4cb, 0x4cc}, {0x4d0, 0x4eb}, {0x4ee, 0x4f5},
34 {0x4f8, 0x4f9}, {0x531, 0x556}, {0x559, 0x559}, {0x561, 0x586},
35 {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x641, 0x64a},
36 {0x671, 0x6b7}, {0x6ba, 0x6be}, {0x6c0, 0x6ce}, {0x6d0, 0x6d3},
37 {0x6d5, 0x6d5}, {0x6e5, 0x6e6}, {0x905, 0x939}, {0x93d, 0x93d},
38 {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8},
39 {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9dc, 0x9dd},
40 {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10},
41 {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36},
42 {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74},
43 {0xa85, 0xa8b}, {0xa8d, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8},
44 {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd},
45 {0xae0, 0xae0}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28},
46 {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb36, 0xb39}, {0xb3d, 0xb3d},
47 {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb85, 0xb8a}, {0xb8e, 0xb90},
48 {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f},
49 {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5}, {0xbb7, 0xbb9},
50 {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc33},
51 {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c}, {0xc8e, 0xc90},
52 {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcde, 0xcde},
53 {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd28},
54 {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xe01, 0xe2e}, {0xe30, 0xe30},
55 {0xe32, 0xe33}, {0xe40, 0xe45}, {0xe81, 0xe82}, {0xe84, 0xe84},
56 {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, {0xe94, 0xe97},
57 {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xea7},
58 {0xeaa, 0xeab}, {0xead, 0xeae}, {0xeb0, 0xeb0}, {0xeb2, 0xeb3},
59 {0xebd, 0xebd}, {0xec0, 0xec4}, {0xf40, 0xf47}, {0xf49, 0xf69},
60 {0x10a0, 0x10c5}, {0x10d0, 0x10f6}, {0x1100, 0x1100}, {0x1102, 0x1103},
61 {0x1105, 0x1107}, {0x1109, 0x1109}, {0x110b, 0x110c}, {0x110e, 0x1112},
62 {0x113c, 0x113c}, {0x113e, 0x113e}, {0x1140, 0x1140}, {0x114c, 0x114c},
63 {0x114e, 0x114e}, {0x1150, 0x1150}, {0x1154, 0x1155}, {0x1159, 0x1159},
64 {0x115f, 0x1161}, {0x1163, 0x1163}, {0x1165, 0x1165}, {0x1167, 0x1167},
65 {0x1169, 0x1169}, {0x116d, 0x116e}, {0x1172, 0x1173}, {0x1175, 0x1175},
66 {0x119e, 0x119e}, {0x11a8, 0x11a8}, {0x11ab, 0x11ab}, {0x11ae, 0x11af},
67 {0x11b7, 0x11b8}, {0x11ba, 0x11ba}, {0x11bc, 0x11c2}, {0x11eb, 0x11eb},
68 {0x11f0, 0x11f0}, {0x11f9, 0x11f9}, {0x1e00, 0x1e9b}, {0x1ea0, 0x1ef9},
69 {0x1f00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d},
70 {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d},
71 {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe},
72 {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb},
73 {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2126, 0x2126},
74 {0x212a, 0x212b}, {0x212e, 0x212e}, {0x2180, 0x2182}, {0x3041, 0x3094},
75 {0x30a1, 0x30fa}, {0x3105, 0x312c}, {0xac00, 0xd7a3}};
76
77 XMLPUBFUNEXPORT const xmlChRangeGroup xmlIsBaseCharGroup =
78 {197, 0, xmlIsBaseChar_srng, (xmlChLRangePtr)0};
79
80 XMLPUBFUNEXPORT const xmlChSRange xmlIsCombining_srng[] = { {0x300, 0x345},
81 {0x360, 0x361}, {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9},
82 {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4},
83 {0x64b, 0x652}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6dd, 0x6df},
84 {0x6e0, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x901, 0x903},
85 {0x93c, 0x93c}, {0x93e, 0x94c}, {0x94d, 0x94d}, {0x951, 0x954},
86 {0x962, 0x963}, {0x981, 0x983}, {0x9bc, 0x9bc}, {0x9be, 0x9be},
87 {0x9bf, 0x9bf}, {0x9c0, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd},
88 {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa02, 0xa02}, {0xa3c, 0xa3c},
89 {0xa3e, 0xa3e}, {0xa3f, 0xa3f}, {0xa40, 0xa42}, {0xa47, 0xa48},
90 {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa83}, {0xabc, 0xabc},
91 {0xabe, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, {0xb01, 0xb03},
92 {0xb3c, 0xb3c}, {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d},
93 {0xb56, 0xb57}, {0xb82, 0xb83}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8},
94 {0xbca, 0xbcd}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44},
95 {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83},
96 {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6},
97 {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d},
98 {0xd57, 0xd57}, {0xe31, 0xe31}, {0xe34, 0xe3a}, {0xe47, 0xe4e},
99 {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, {0xec8, 0xecd},
100 {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39},
101 {0xf3e, 0xf3e}, {0xf3f, 0xf3f}, {0xf71, 0xf84}, {0xf86, 0xf8b},
102 {0xf90, 0xf95}, {0xf97, 0xf97}, {0xf99, 0xfad}, {0xfb1, 0xfb7},
103 {0xfb9, 0xfb9}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, {0x302a, 0x302f},
104 {0x3099, 0x3099}, {0x309a, 0x309a}};
105
106 XMLPUBFUNEXPORT const xmlChRangeGroup xmlIsCombiningGroup =
107 {95, 0, xmlIsCombining_srng, (xmlChLRangePtr)0};
108
109 const xmlChSRange xmlIsChar_srng[] = { {0x100, 0xd7ff}, {0xe000, 0xfffd}};
110
111 const xmlChLRange xmlIsChar_lrng[] = { {0x10000, 0x10ffff}};
112
113 const xmlChRangeGroup xmlIsCharGroup = {2, 1, xmlIsChar_srng, xmlIsChar_lrng};
114
115 const xmlChSRange xmlIsIdeographic_srng[] = { {0x3007, 0x3007},
116 {0x3021, 0x3029}, {0x4e00, 0x9fa5}};
117
118 const xmlChRangeGroup xmlIsIdeographicGroup = {3, 0, xmlIsIdeographic_srng, (xmlChLRangePtr)0};
119
120
121 XMLPUBFUNEXPORT const xmlChSRange xmlIsDigit_srng[] = { {0x660, 0x669}, {0x6f0, 0x6f9},
122 {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f}, {0xae6, 0xaef},
123 {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f}, {0xce6, 0xcef},
124 {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, {0xf20, 0xf29}};
125
126 XMLPUBFUNEXPORT const xmlChRangeGroup xmlIsDigitGroup =
127 {14, 0, xmlIsDigit_srng, (xmlChLRangePtr)0};
128
129 XMLPUBFUNEXPORT const xmlChSRange xmlIsExtender_srng[] = { {0x2d0, 0x2d0}, {0x2d1, 0x2d1},
130 {0x387, 0x387}, {0x640, 0x640}, {0xe46, 0xe46}, {0xec6, 0xec6},
131 {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309d, 0x309e}, {0x30fc, 0x30fe}};
132
133 XMLPUBFUNEXPORT const xmlChRangeGroup xmlIsExtenderGroup =
134 {10, 0, xmlIsExtender_srng, (xmlChLRangePtr)0};
135
136 /*
137 * The initial tables ({func_name}_tab) are used to validate whether a
138 * single-byte character is within the specified group. Each table
139 * contains 256 bytes, with each byte representing one of the 256
140 * possible characters. If the table byte is set, the character is
141 * allowed.
142 *
143 */
144 XMLPUBFUNEXPORT const unsigned char xmlIsPubidChar_tab[256] = {
145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
146 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01,
148 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
149 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
150 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
151 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
152 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
153 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
154 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
155 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
166 0x00, 0x00, 0x00, 0x00 };
167
168 /**
169 * xmlCharInRange:
170 * @param val character to be validated
171 * @param rptr pointer to range to be used to validate
172 *
173 * Does a binary search of the range table to determine if char
174 * is valid
175 *
176 * Returns: true if character valid, false otherwise
177 */
178 XMLPUBFUNEXPORT int
xmlCharInRange(unsigned int val,const xmlChRangeGroupPtr rptr)179 xmlCharInRange (unsigned int val, const xmlChRangeGroupPtr rptr) {
180 int low, high, mid;
181 xmlChSRangePtr sptr;
182 xmlChLRangePtr lptr;
183 if (val < 0x10000) { /* is val in 'short' or 'long' array? */
184 if (rptr->nbShortRange == 0)
185 return 0;
186 low = 0;
187 high = rptr->nbShortRange - 1;
188 sptr = rptr->shortRange;
189 while (low <= high)
190 {
191 mid = (low + high) / 2;
192 if ((unsigned short) val < sptr[mid].low) {
193 high = mid - 1;
194 } else {
195 if ((unsigned short) val > sptr[mid].high) {
196 low = mid + 1;
197 } else {
198 return 1;
199 }
200 }
201 }
202 } else {
203 if (rptr->nbLongRange == 0) {
204 return 0;
205 }
206 low = 0;
207 high = rptr->nbLongRange - 1;
208 lptr = rptr->longRange;
209 while (low <= high) {
210 mid = (low + high) / 2;
211 if (val < lptr[mid].low) {
212 high = mid - 1;
213 } else {
214 if (val > lptr[mid].high) {
215 low = mid + 1;
216 } else {
217 return 1;
218 }
219 }
220 }
221 }
222 return 0;
223 }
224
225 #ifndef XMLENGINE_EXCLUDE_UNUSED
226 /**
227 * xmlIsBaseChar:
228 * @param ch character to validate
229 *
230 * This function is DEPRECATED.
231 * Use xmlIsBaseChar_ch or xmlIsBaseCharQ instead
232 *
233 * Returns true if argument valid, false otherwise
234 */
235 int
xmlIsBaseChar(unsigned int ch)236 xmlIsBaseChar(unsigned int ch) {
237 return(xmlIsBaseCharQ(ch));
238 }
239
240
241 /**
242 * xmlIsBlank:
243 * @param ch character to validate
244 *
245 * This function is DEPRECATED.
246 * Use xmlIsBlank_ch or xmlIsBlankQ instead
247 *
248 * Returns true if argument valid, false otherwise
249 */
250 int
xmlIsBlank(unsigned int ch)251 xmlIsBlank(unsigned int ch) {
252 return(xmlIsBlankQ(ch));
253 }
254
255
256 /**
257 * xmlIsChar:
258 * @param ch character to validate
259 *
260 * This function is DEPRECATED.
261 * Use xmlIsChar_ch or xmlIsCharQ instead
262 *
263 * Returns true if argument valid, false otherwise
264 */
265 int
xmlIsChar(unsigned int ch)266 xmlIsChar(unsigned int ch) {
267 return(xmlIsCharQ(ch));
268 }
269
270
271 /**
272 * xmlIsCombining:
273 * @param ch character to validate
274 *
275 * This function is DEPRECATED.
276 * Use xmlIsCombiningQ instead
277 *
278 * Returns true if argument valid, false otherwise
279 */
280 int
xmlIsCombining(unsigned int ch)281 xmlIsCombining(unsigned int ch) {
282 return(xmlIsCombiningQ(ch));
283 }
284
285
286 /**
287 * xmlIsDigit:
288 * @param ch character to validate
289 *
290 * This function is DEPRECATED.
291 * Use xmlIsDigit_ch or xmlIsDigitQ instead
292 *
293 * Returns true if argument valid, false otherwise
294 */
295 int
xmlIsDigit(unsigned int ch)296 xmlIsDigit(unsigned int ch) {
297 return(xmlIsDigitQ(ch));
298 }
299
300
301 /**
302 * xmlIsExtender:
303 * @param ch character to validate
304 *
305 * This function is DEPRECATED.
306 * Use xmlIsExtender_ch or xmlIsExtenderQ instead
307 *
308 * Returns true if argument valid, false otherwise
309 */
310 int
xmlIsExtender(unsigned int ch)311 xmlIsExtender(unsigned int ch) {
312 return(xmlIsExtenderQ(ch));
313 }
314
315
316 /**
317 * xmlIsIdeographic:
318 * @param ch character to validate
319 *
320 * This function is DEPRECATED.
321 * Use xmlIsIdeographicQ instead
322 *
323 * Returns true if argument valid, false otherwise
324 */
325 int
xmlIsIdeographic(unsigned int ch)326 xmlIsIdeographic(unsigned int ch) {
327 return(xmlIsIdeographicQ(ch));
328 }
329
330
331 /**
332 * xmlIsPubidChar:
333 * @param ch character to validate
334 *
335 * This function is DEPRECATED.
336 * Use xmlIsPubidChar_ch or xmlIsPubidCharQ instead
337 *
338 * Returns true if argument valid, false otherwise
339 */
340 int
xmlIsPubidChar(unsigned int ch)341 xmlIsPubidChar(unsigned int ch) {
342 return(xmlIsPubidCharQ(ch));
343 }
344 #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */
345
346