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