Deleted Added
full compact
xmltok_impl.c (104349) xmltok_impl.c (178848)
1/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
2 See the file COPYING for copying permission.
3*/
4
1/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
2 See the file COPYING for copying permission.
3*/
4
5/* This file is included! */
6#ifdef XML_TOK_IMPL_C
7
5#ifndef IS_INVALID_CHAR
6#define IS_INVALID_CHAR(enc, ptr, n) (0)
7#endif
8
9#define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \
10 case BT_LEAD ## n: \
11 if (end - ptr < n) \
12 return XML_TOK_PARTIAL_CHAR; \

--- 68 unchanged lines hidden (view full) ---

81 CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
82
83#ifndef PREFIX
84#define PREFIX(ident) ident
85#endif
86
87/* ptr points to character following "<!-" */
88
8#ifndef IS_INVALID_CHAR
9#define IS_INVALID_CHAR(enc, ptr, n) (0)
10#endif
11
12#define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \
13 case BT_LEAD ## n: \
14 if (end - ptr < n) \
15 return XML_TOK_PARTIAL_CHAR; \

--- 68 unchanged lines hidden (view full) ---

84 CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
85
86#ifndef PREFIX
87#define PREFIX(ident) ident
88#endif
89
90/* ptr points to character following "<!-" */
91
89static int FASTCALL
92static int PTRCALL
90PREFIX(scanComment)(const ENCODING *enc, const char *ptr,
91 const char *end, const char **nextTokPtr)
92{
93 if (ptr != end) {
94 if (!CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
95 *nextTokPtr = ptr;
96 return XML_TOK_INVALID;
97 }

--- 21 unchanged lines hidden (view full) ---

119 }
120 }
121 }
122 return XML_TOK_PARTIAL;
123}
124
125/* ptr points to character following "<!" */
126
93PREFIX(scanComment)(const ENCODING *enc, const char *ptr,
94 const char *end, const char **nextTokPtr)
95{
96 if (ptr != end) {
97 if (!CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
98 *nextTokPtr = ptr;
99 return XML_TOK_INVALID;
100 }

--- 21 unchanged lines hidden (view full) ---

122 }
123 }
124 }
125 return XML_TOK_PARTIAL;
126}
127
128/* ptr points to character following "<!" */
129
127static int FASTCALL
130static int PTRCALL
128PREFIX(scanDecl)(const ENCODING *enc, const char *ptr,
129 const char *end, const char **nextTokPtr)
130{
131 if (ptr == end)
132 return XML_TOK_PARTIAL;
133 switch (BYTE_TYPE(enc, ptr)) {
134 case BT_MINUS:
135 return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);

--- 30 unchanged lines hidden (view full) ---

166 default:
167 *nextTokPtr = ptr;
168 return XML_TOK_INVALID;
169 }
170 }
171 return XML_TOK_PARTIAL;
172}
173
131PREFIX(scanDecl)(const ENCODING *enc, const char *ptr,
132 const char *end, const char **nextTokPtr)
133{
134 if (ptr == end)
135 return XML_TOK_PARTIAL;
136 switch (BYTE_TYPE(enc, ptr)) {
137 case BT_MINUS:
138 return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);

--- 30 unchanged lines hidden (view full) ---

169 default:
170 *nextTokPtr = ptr;
171 return XML_TOK_INVALID;
172 }
173 }
174 return XML_TOK_PARTIAL;
175}
176
174static int FASTCALL
177static int PTRCALL
175PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr,
176 const char *end, int *tokPtr)
177{
178 int upper = 0;
179 *tokPtr = XML_TOK_PI;
180 if (end - ptr != MINBPC(enc)*3)
181 return 1;
182 switch (BYTE_TO_ASCII(enc, ptr)) {

--- 28 unchanged lines hidden (view full) ---

211 if (upper)
212 return 0;
213 *tokPtr = XML_TOK_XML_DECL;
214 return 1;
215}
216
217/* ptr points to character following "<?" */
218
178PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr,
179 const char *end, int *tokPtr)
180{
181 int upper = 0;
182 *tokPtr = XML_TOK_PI;
183 if (end - ptr != MINBPC(enc)*3)
184 return 1;
185 switch (BYTE_TO_ASCII(enc, ptr)) {

--- 28 unchanged lines hidden (view full) ---

214 if (upper)
215 return 0;
216 *tokPtr = XML_TOK_XML_DECL;
217 return 1;
218}
219
220/* ptr points to character following "<?" */
221
219static int FASTCALL
222static int PTRCALL
220PREFIX(scanPi)(const ENCODING *enc, const char *ptr,
221 const char *end, const char **nextTokPtr)
222{
223 int tok;
224 const char *target = ptr;
225 if (ptr == end)
226 return XML_TOK_PARTIAL;
227 switch (BYTE_TYPE(enc, ptr)) {

--- 45 unchanged lines hidden (view full) ---

273 default:
274 *nextTokPtr = ptr;
275 return XML_TOK_INVALID;
276 }
277 }
278 return XML_TOK_PARTIAL;
279}
280
223PREFIX(scanPi)(const ENCODING *enc, const char *ptr,
224 const char *end, const char **nextTokPtr)
225{
226 int tok;
227 const char *target = ptr;
228 if (ptr == end)
229 return XML_TOK_PARTIAL;
230 switch (BYTE_TYPE(enc, ptr)) {

--- 45 unchanged lines hidden (view full) ---

276 default:
277 *nextTokPtr = ptr;
278 return XML_TOK_INVALID;
279 }
280 }
281 return XML_TOK_PARTIAL;
282}
283
281static int FASTCALL
284static int PTRCALL
282PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr,
283 const char *end, const char **nextTokPtr)
284{
285 static const char CDATA_LSQB[] = { ASCII_C, ASCII_D, ASCII_A,
286 ASCII_T, ASCII_A, ASCII_LSQB };
287 int i;
288 /* CDATA[ */
289 if (end - ptr < 6 * MINBPC(enc))
290 return XML_TOK_PARTIAL;
291 for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
292 if (!CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
293 *nextTokPtr = ptr;
294 return XML_TOK_INVALID;
295 }
296 }
297 *nextTokPtr = ptr;
298 return XML_TOK_CDATA_SECT_OPEN;
299}
300
285PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr,
286 const char *end, const char **nextTokPtr)
287{
288 static const char CDATA_LSQB[] = { ASCII_C, ASCII_D, ASCII_A,
289 ASCII_T, ASCII_A, ASCII_LSQB };
290 int i;
291 /* CDATA[ */
292 if (end - ptr < 6 * MINBPC(enc))
293 return XML_TOK_PARTIAL;
294 for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
295 if (!CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
296 *nextTokPtr = ptr;
297 return XML_TOK_INVALID;
298 }
299 }
300 *nextTokPtr = ptr;
301 return XML_TOK_CDATA_SECT_OPEN;
302}
303
301static int FASTCALL
304static int PTRCALL
302PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr,
303 const char *end, const char **nextTokPtr)
304{
305 if (ptr == end)
306 return XML_TOK_NONE;
307 if (MINBPC(enc) > 1) {
308 size_t n = end - ptr;
309 if (n & (MINBPC(enc) - 1)) {

--- 61 unchanged lines hidden (view full) ---

371 }
372 }
373 *nextTokPtr = ptr;
374 return XML_TOK_DATA_CHARS;
375}
376
377/* ptr points to character following "</" */
378
305PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr,
306 const char *end, const char **nextTokPtr)
307{
308 if (ptr == end)
309 return XML_TOK_NONE;
310 if (MINBPC(enc) > 1) {
311 size_t n = end - ptr;
312 if (n & (MINBPC(enc) - 1)) {

--- 61 unchanged lines hidden (view full) ---

374 }
375 }
376 *nextTokPtr = ptr;
377 return XML_TOK_DATA_CHARS;
378}
379
380/* ptr points to character following "</" */
381
379static int FASTCALL
382static int PTRCALL
380PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr,
381 const char *end, const char **nextTokPtr)
382{
383 if (ptr == end)
384 return XML_TOK_PARTIAL;
385 switch (BYTE_TYPE(enc, ptr)) {
386 CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
387 default:

--- 32 unchanged lines hidden (view full) ---

420 return XML_TOK_INVALID;
421 }
422 }
423 return XML_TOK_PARTIAL;
424}
425
426/* ptr points to character following "&#X" */
427
383PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr,
384 const char *end, const char **nextTokPtr)
385{
386 if (ptr == end)
387 return XML_TOK_PARTIAL;
388 switch (BYTE_TYPE(enc, ptr)) {
389 CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
390 default:

--- 32 unchanged lines hidden (view full) ---

423 return XML_TOK_INVALID;
424 }
425 }
426 return XML_TOK_PARTIAL;
427}
428
429/* ptr points to character following "&#X" */
430
428static int FASTCALL
431static int PTRCALL
429PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr,
430 const char *end, const char **nextTokPtr)
431{
432 if (ptr != end) {
433 switch (BYTE_TYPE(enc, ptr)) {
434 case BT_DIGIT:
435 case BT_HEX:
436 break;

--- 15 unchanged lines hidden (view full) ---

452 }
453 }
454 }
455 return XML_TOK_PARTIAL;
456}
457
458/* ptr points to character following "&#" */
459
432PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr,
433 const char *end, const char **nextTokPtr)
434{
435 if (ptr != end) {
436 switch (BYTE_TYPE(enc, ptr)) {
437 case BT_DIGIT:
438 case BT_HEX:
439 break;

--- 15 unchanged lines hidden (view full) ---

455 }
456 }
457 }
458 return XML_TOK_PARTIAL;
459}
460
461/* ptr points to character following "&#" */
462
460static int FASTCALL
463static int PTRCALL
461PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr,
462 const char *end, const char **nextTokPtr)
463{
464 if (ptr != end) {
465 if (CHAR_MATCHES(enc, ptr, ASCII_x))
466 return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
467 switch (BYTE_TYPE(enc, ptr)) {
468 case BT_DIGIT:

--- 15 unchanged lines hidden (view full) ---

484 }
485 }
486 }
487 return XML_TOK_PARTIAL;
488}
489
490/* ptr points to character following "&" */
491
464PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr,
465 const char *end, const char **nextTokPtr)
466{
467 if (ptr != end) {
468 if (CHAR_MATCHES(enc, ptr, ASCII_x))
469 return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
470 switch (BYTE_TYPE(enc, ptr)) {
471 case BT_DIGIT:

--- 15 unchanged lines hidden (view full) ---

487 }
488 }
489 }
490 return XML_TOK_PARTIAL;
491}
492
493/* ptr points to character following "&" */
494
492static int FASTCALL
495static int PTRCALL
493PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end,
494 const char **nextTokPtr)
495{
496 if (ptr == end)
497 return XML_TOK_PARTIAL;
498 switch (BYTE_TYPE(enc, ptr)) {
499 CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
500 case BT_NUM:

--- 13 unchanged lines hidden (view full) ---

514 return XML_TOK_INVALID;
515 }
516 }
517 return XML_TOK_PARTIAL;
518}
519
520/* ptr points to character following first character of attribute name */
521
496PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end,
497 const char **nextTokPtr)
498{
499 if (ptr == end)
500 return XML_TOK_PARTIAL;
501 switch (BYTE_TYPE(enc, ptr)) {
502 CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
503 case BT_NUM:

--- 13 unchanged lines hidden (view full) ---

517 return XML_TOK_INVALID;
518 }
519 }
520 return XML_TOK_PARTIAL;
521}
522
523/* ptr points to character following first character of attribute name */
524
522static int FASTCALL
525static int PTRCALL
523PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end,
524 const char **nextTokPtr)
525{
526#ifdef XML_NS
527 int hadColon = 0;
528#endif
529 while (ptr != end) {
530 switch (BYTE_TYPE(enc, ptr)) {

--- 142 unchanged lines hidden (view full) ---

673 return XML_TOK_INVALID;
674 }
675 }
676 return XML_TOK_PARTIAL;
677}
678
679/* ptr points to character following "<" */
680
526PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end,
527 const char **nextTokPtr)
528{
529#ifdef XML_NS
530 int hadColon = 0;
531#endif
532 while (ptr != end) {
533 switch (BYTE_TYPE(enc, ptr)) {

--- 142 unchanged lines hidden (view full) ---

676 return XML_TOK_INVALID;
677 }
678 }
679 return XML_TOK_PARTIAL;
680}
681
682/* ptr points to character following "<" */
683
681static int FASTCALL
684static int PTRCALL
682PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end,
683 const char **nextTokPtr)
684{
685#ifdef XML_NS
686 int hadColon;
687#endif
688 if (ptr == end)
689 return XML_TOK_PARTIAL;

--- 83 unchanged lines hidden (view full) ---

773 default:
774 *nextTokPtr = ptr;
775 return XML_TOK_INVALID;
776 }
777 }
778 return XML_TOK_PARTIAL;
779}
780
685PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end,
686 const char **nextTokPtr)
687{
688#ifdef XML_NS
689 int hadColon;
690#endif
691 if (ptr == end)
692 return XML_TOK_PARTIAL;

--- 83 unchanged lines hidden (view full) ---

776 default:
777 *nextTokPtr = ptr;
778 return XML_TOK_INVALID;
779 }
780 }
781 return XML_TOK_PARTIAL;
782}
783
781static int FASTCALL
784static int PTRCALL
782PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end,
783 const char **nextTokPtr)
784{
785 if (ptr == end)
786 return XML_TOK_NONE;
787 if (MINBPC(enc) > 1) {
788 size_t n = end - ptr;
789 if (n & (MINBPC(enc) - 1)) {

--- 82 unchanged lines hidden (view full) ---

872 }
873 }
874 *nextTokPtr = ptr;
875 return XML_TOK_DATA_CHARS;
876}
877
878/* ptr points to character following "%" */
879
785PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end,
786 const char **nextTokPtr)
787{
788 if (ptr == end)
789 return XML_TOK_NONE;
790 if (MINBPC(enc) > 1) {
791 size_t n = end - ptr;
792 if (n & (MINBPC(enc) - 1)) {

--- 82 unchanged lines hidden (view full) ---

875 }
876 }
877 *nextTokPtr = ptr;
878 return XML_TOK_DATA_CHARS;
879}
880
881/* ptr points to character following "%" */
882
880static int FASTCALL
883static int PTRCALL
881PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end,
882 const char **nextTokPtr)
883{
884 if (ptr == end)
884PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end,
885 const char **nextTokPtr)
886{
887 if (ptr == end)
885 return XML_TOK_PARTIAL;
888 return -XML_TOK_PERCENT;
886 switch (BYTE_TYPE(enc, ptr)) {
887 CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
888 case BT_S: case BT_LF: case BT_CR: case BT_PERCNT:
889 *nextTokPtr = ptr;
890 return XML_TOK_PERCENT;
891 default:
892 *nextTokPtr = ptr;
893 return XML_TOK_INVALID;

--- 7 unchanged lines hidden (view full) ---

901 default:
902 *nextTokPtr = ptr;
903 return XML_TOK_INVALID;
904 }
905 }
906 return XML_TOK_PARTIAL;
907}
908
889 switch (BYTE_TYPE(enc, ptr)) {
890 CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
891 case BT_S: case BT_LF: case BT_CR: case BT_PERCNT:
892 *nextTokPtr = ptr;
893 return XML_TOK_PERCENT;
894 default:
895 *nextTokPtr = ptr;
896 return XML_TOK_INVALID;

--- 7 unchanged lines hidden (view full) ---

904 default:
905 *nextTokPtr = ptr;
906 return XML_TOK_INVALID;
907 }
908 }
909 return XML_TOK_PARTIAL;
910}
911
909static int FASTCALL
912static int PTRCALL
910PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end,
911 const char **nextTokPtr)
912{
913 if (ptr == end)
914 return XML_TOK_PARTIAL;
915 switch (BYTE_TYPE(enc, ptr)) {
916 CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
917 default:

--- 10 unchanged lines hidden (view full) ---

928 default:
929 *nextTokPtr = ptr;
930 return XML_TOK_INVALID;
931 }
932 }
933 return -XML_TOK_POUND_NAME;
934}
935
913PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end,
914 const char **nextTokPtr)
915{
916 if (ptr == end)
917 return XML_TOK_PARTIAL;
918 switch (BYTE_TYPE(enc, ptr)) {
919 CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
920 default:

--- 10 unchanged lines hidden (view full) ---

931 default:
932 *nextTokPtr = ptr;
933 return XML_TOK_INVALID;
934 }
935 }
936 return -XML_TOK_POUND_NAME;
937}
938
936static int FASTCALL
939static int PTRCALL
937PREFIX(scanLit)(int open, const ENCODING *enc,
938 const char *ptr, const char *end,
939 const char **nextTokPtr)
940{
941 while (ptr != end) {
942 int t = BYTE_TYPE(enc, ptr);
943 switch (t) {
944 INVALID_CASES(ptr, nextTokPtr)

--- 15 unchanged lines hidden (view full) ---

960 default:
961 ptr += MINBPC(enc);
962 break;
963 }
964 }
965 return XML_TOK_PARTIAL;
966}
967
940PREFIX(scanLit)(int open, const ENCODING *enc,
941 const char *ptr, const char *end,
942 const char **nextTokPtr)
943{
944 while (ptr != end) {
945 int t = BYTE_TYPE(enc, ptr);
946 switch (t) {
947 INVALID_CASES(ptr, nextTokPtr)

--- 15 unchanged lines hidden (view full) ---

963 default:
964 ptr += MINBPC(enc);
965 break;
966 }
967 }
968 return XML_TOK_PARTIAL;
969}
970
968static int FASTCALL
971static int PTRCALL
969PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end,
970 const char **nextTokPtr)
971{
972 int tok;
973 if (ptr == end)
974 return XML_TOK_NONE;
975 if (MINBPC(enc) > 1) {
976 size_t n = end - ptr;

--- 214 unchanged lines hidden (view full) ---

1191 default:
1192 *nextTokPtr = ptr;
1193 return XML_TOK_INVALID;
1194 }
1195 }
1196 return -tok;
1197}
1198
972PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end,
973 const char **nextTokPtr)
974{
975 int tok;
976 if (ptr == end)
977 return XML_TOK_NONE;
978 if (MINBPC(enc) > 1) {
979 size_t n = end - ptr;

--- 214 unchanged lines hidden (view full) ---

1194 default:
1195 *nextTokPtr = ptr;
1196 return XML_TOK_INVALID;
1197 }
1198 }
1199 return -tok;
1200}
1201
1199static int FASTCALL
1202static int PTRCALL
1200PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr,
1201 const char *end, const char **nextTokPtr)
1202{
1203 const char *start;
1204 if (ptr == end)
1205 return XML_TOK_NONE;
1206 start = ptr;
1207 while (ptr != end) {

--- 41 unchanged lines hidden (view full) ---

1249 ptr += MINBPC(enc);
1250 break;
1251 }
1252 }
1253 *nextTokPtr = ptr;
1254 return XML_TOK_DATA_CHARS;
1255}
1256
1203PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr,
1204 const char *end, const char **nextTokPtr)
1205{
1206 const char *start;
1207 if (ptr == end)
1208 return XML_TOK_NONE;
1209 start = ptr;
1210 while (ptr != end) {

--- 41 unchanged lines hidden (view full) ---

1252 ptr += MINBPC(enc);
1253 break;
1254 }
1255 }
1256 *nextTokPtr = ptr;
1257 return XML_TOK_DATA_CHARS;
1258}
1259
1257static int FASTCALL
1260static int PTRCALL
1258PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr,
1259 const char *end, const char **nextTokPtr)
1260{
1261 const char *start;
1262 if (ptr == end)
1263 return XML_TOK_NONE;
1264 start = ptr;
1265 while (ptr != end) {

--- 40 unchanged lines hidden (view full) ---

1306 }
1307 }
1308 *nextTokPtr = ptr;
1309 return XML_TOK_DATA_CHARS;
1310}
1311
1312#ifdef XML_DTD
1313
1261PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr,
1262 const char *end, const char **nextTokPtr)
1263{
1264 const char *start;
1265 if (ptr == end)
1266 return XML_TOK_NONE;
1267 start = ptr;
1268 while (ptr != end) {

--- 40 unchanged lines hidden (view full) ---

1309 }
1310 }
1311 *nextTokPtr = ptr;
1312 return XML_TOK_DATA_CHARS;
1313}
1314
1315#ifdef XML_DTD
1316
1314static int FASTCALL
1317static int PTRCALL
1315PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr,
1316 const char *end, const char **nextTokPtr)
1317{
1318 int level = 0;
1319 if (MINBPC(enc) > 1) {
1320 size_t n = end - ptr;
1321 if (n & (MINBPC(enc) - 1)) {
1322 n &= ~(MINBPC(enc) - 1);

--- 36 unchanged lines hidden (view full) ---

1359 break;
1360 }
1361 }
1362 return XML_TOK_PARTIAL;
1363}
1364
1365#endif /* XML_DTD */
1366
1318PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr,
1319 const char *end, const char **nextTokPtr)
1320{
1321 int level = 0;
1322 if (MINBPC(enc) > 1) {
1323 size_t n = end - ptr;
1324 if (n & (MINBPC(enc) - 1)) {
1325 n &= ~(MINBPC(enc) - 1);

--- 36 unchanged lines hidden (view full) ---

1362 break;
1363 }
1364 }
1365 return XML_TOK_PARTIAL;
1366}
1367
1368#endif /* XML_DTD */
1369
1367static int FASTCALL
1370static int PTRCALL
1368PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
1369 const char **badPtr)
1370{
1371 ptr += MINBPC(enc);
1372 end -= MINBPC(enc);
1373 for (; ptr != end; ptr += MINBPC(enc)) {
1374 switch (BYTE_TYPE(enc, ptr)) {
1375 case BT_DIGIT:

--- 43 unchanged lines hidden (view full) ---

1419 return 1;
1420}
1421
1422/* This must only be called for a well-formed start-tag or empty
1423 element tag. Returns the number of attributes. Pointers to the
1424 first attsMax attributes are stored in atts.
1425*/
1426
1371PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
1372 const char **badPtr)
1373{
1374 ptr += MINBPC(enc);
1375 end -= MINBPC(enc);
1376 for (; ptr != end; ptr += MINBPC(enc)) {
1377 switch (BYTE_TYPE(enc, ptr)) {
1378 case BT_DIGIT:

--- 43 unchanged lines hidden (view full) ---

1422 return 1;
1423}
1424
1425/* This must only be called for a well-formed start-tag or empty
1426 element tag. Returns the number of attributes. Pointers to the
1427 first attsMax attributes are stored in atts.
1428*/
1429
1427static int FASTCALL
1430static int PTRCALL
1428PREFIX(getAtts)(const ENCODING *enc, const char *ptr,
1429 int attsMax, ATTRIBUTE *atts)
1430{
1431 enum { other, inName, inValue } state = inName;
1432 int nAtts = 0;
1433 int open = 0; /* defined when state == inValue;
1434 initialization just to shut up compilers */
1435

--- 76 unchanged lines hidden (view full) ---

1512 break;
1513 default:
1514 break;
1515 }
1516 }
1517 /* not reached */
1518}
1519
1431PREFIX(getAtts)(const ENCODING *enc, const char *ptr,
1432 int attsMax, ATTRIBUTE *atts)
1433{
1434 enum { other, inName, inValue } state = inName;
1435 int nAtts = 0;
1436 int open = 0; /* defined when state == inValue;
1437 initialization just to shut up compilers */
1438

--- 76 unchanged lines hidden (view full) ---

1515 break;
1516 default:
1517 break;
1518 }
1519 }
1520 /* not reached */
1521}
1522
1520static int FASTCALL
1523static int PTRFASTCALL
1521PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr)
1522{
1523 int result = 0;
1524 /* skip &# */
1525 ptr += 2*MINBPC(enc);
1526 if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
1527 for (ptr += MINBPC(enc);
1528 !CHAR_MATCHES(enc, ptr, ASCII_SEMI);

--- 27 unchanged lines hidden (view full) ---

1556 result += (c - ASCII_0);
1557 if (result >= 0x110000)
1558 return -1;
1559 }
1560 }
1561 return checkCharRefNumber(result);
1562}
1563
1524PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr)
1525{
1526 int result = 0;
1527 /* skip &# */
1528 ptr += 2*MINBPC(enc);
1529 if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
1530 for (ptr += MINBPC(enc);
1531 !CHAR_MATCHES(enc, ptr, ASCII_SEMI);

--- 27 unchanged lines hidden (view full) ---

1559 result += (c - ASCII_0);
1560 if (result >= 0x110000)
1561 return -1;
1562 }
1563 }
1564 return checkCharRefNumber(result);
1565}
1566
1564static int FASTCALL
1567static int PTRCALL
1565PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr,
1566 const char *end)
1567{
1568 switch ((end - ptr)/MINBPC(enc)) {
1569 case 2:
1570 if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) {
1571 switch (BYTE_TO_ASCII(enc, ptr)) {
1572 case ASCII_l:

--- 37 unchanged lines hidden (view full) ---

1610 }
1611 }
1612 break;
1613 }
1614 }
1615 return 0;
1616}
1617
1568PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr,
1569 const char *end)
1570{
1571 switch ((end - ptr)/MINBPC(enc)) {
1572 case 2:
1573 if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) {
1574 switch (BYTE_TO_ASCII(enc, ptr)) {
1575 case ASCII_l:

--- 37 unchanged lines hidden (view full) ---

1613 }
1614 }
1615 break;
1616 }
1617 }
1618 return 0;
1619}
1620
1618static int FASTCALL
1621static int PTRCALL
1619PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2)
1620{
1621 for (;;) {
1622 switch (BYTE_TYPE(enc, ptr1)) {
1623#define LEAD_CASE(n) \
1624 case BT_LEAD ## n: \
1625 if (*ptr1++ != *ptr2++) \
1626 return 0;

--- 47 unchanged lines hidden (view full) ---

1674 default:
1675 return 1;
1676 }
1677 }
1678 }
1679 /* not reached */
1680}
1681
1622PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2)
1623{
1624 for (;;) {
1625 switch (BYTE_TYPE(enc, ptr1)) {
1626#define LEAD_CASE(n) \
1627 case BT_LEAD ## n: \
1628 if (*ptr1++ != *ptr2++) \
1629 return 0;

--- 47 unchanged lines hidden (view full) ---

1677 default:
1678 return 1;
1679 }
1680 }
1681 }
1682 /* not reached */
1683}
1684
1682static int FASTCALL
1685static int PTRCALL
1683PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1,
1684 const char *end1, const char *ptr2)
1685{
1686 for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
1687 if (ptr1 == end1)
1688 return 0;
1689 if (!CHAR_MATCHES(enc, ptr1, *ptr2))
1690 return 0;
1691 }
1692 return ptr1 == end1;
1693}
1694
1686PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1,
1687 const char *end1, const char *ptr2)
1688{
1689 for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
1690 if (ptr1 == end1)
1691 return 0;
1692 if (!CHAR_MATCHES(enc, ptr1, *ptr2))
1693 return 0;
1694 }
1695 return ptr1 == end1;
1696}
1697
1695static int FASTCALL
1698static int PTRFASTCALL
1696PREFIX(nameLength)(const ENCODING *enc, const char *ptr)
1697{
1698 const char *start = ptr;
1699 for (;;) {
1700 switch (BYTE_TYPE(enc, ptr)) {
1701#define LEAD_CASE(n) \
1702 case BT_LEAD ## n: ptr += n; break;
1703 LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)

--- 5 unchanged lines hidden (view full) ---

1709#endif
1710 case BT_HEX:
1711 case BT_DIGIT:
1712 case BT_NAME:
1713 case BT_MINUS:
1714 ptr += MINBPC(enc);
1715 break;
1716 default:
1699PREFIX(nameLength)(const ENCODING *enc, const char *ptr)
1700{
1701 const char *start = ptr;
1702 for (;;) {
1703 switch (BYTE_TYPE(enc, ptr)) {
1704#define LEAD_CASE(n) \
1705 case BT_LEAD ## n: ptr += n; break;
1706 LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)

--- 5 unchanged lines hidden (view full) ---

1712#endif
1713 case BT_HEX:
1714 case BT_DIGIT:
1715 case BT_NAME:
1716 case BT_MINUS:
1717 ptr += MINBPC(enc);
1718 break;
1719 default:
1717 return ptr - start;
1720 return (int)(ptr - start);
1718 }
1719 }
1720}
1721
1721 }
1722 }
1723}
1724
1722static const char * FASTCALL
1725static const char * PTRFASTCALL
1723PREFIX(skipS)(const ENCODING *enc, const char *ptr)
1724{
1725 for (;;) {
1726 switch (BYTE_TYPE(enc, ptr)) {
1727 case BT_LF:
1728 case BT_CR:
1729 case BT_S:
1730 ptr += MINBPC(enc);
1731 break;
1732 default:
1733 return ptr;
1734 }
1735 }
1736}
1737
1726PREFIX(skipS)(const ENCODING *enc, const char *ptr)
1727{
1728 for (;;) {
1729 switch (BYTE_TYPE(enc, ptr)) {
1730 case BT_LF:
1731 case BT_CR:
1732 case BT_S:
1733 ptr += MINBPC(enc);
1734 break;
1735 default:
1736 return ptr;
1737 }
1738 }
1739}
1740
1738static void FASTCALL
1741static void PTRCALL
1739PREFIX(updatePosition)(const ENCODING *enc,
1740 const char *ptr,
1741 const char *end,
1742 POSITION *pos)
1743{
1744 while (ptr != end) {
1745 switch (BYTE_TYPE(enc, ptr)) {
1746#define LEAD_CASE(n) \
1747 case BT_LEAD ## n: \
1748 ptr += n; \
1749 break;
1750 LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
1751#undef LEAD_CASE
1752 case BT_LF:
1742PREFIX(updatePosition)(const ENCODING *enc,
1743 const char *ptr,
1744 const char *end,
1745 POSITION *pos)
1746{
1747 while (ptr != end) {
1748 switch (BYTE_TYPE(enc, ptr)) {
1749#define LEAD_CASE(n) \
1750 case BT_LEAD ## n: \
1751 ptr += n; \
1752 break;
1753 LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4)
1754#undef LEAD_CASE
1755 case BT_LF:
1753 pos->columnNumber = (unsigned)-1;
1756 pos->columnNumber = (XML_Size)-1;
1754 pos->lineNumber++;
1755 ptr += MINBPC(enc);
1756 break;
1757 case BT_CR:
1758 pos->lineNumber++;
1759 ptr += MINBPC(enc);
1760 if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF)
1761 ptr += MINBPC(enc);
1757 pos->lineNumber++;
1758 ptr += MINBPC(enc);
1759 break;
1760 case BT_CR:
1761 pos->lineNumber++;
1762 ptr += MINBPC(enc);
1763 if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF)
1764 ptr += MINBPC(enc);
1762 pos->columnNumber = (unsigned)-1;
1765 pos->columnNumber = (XML_Size)-1;
1763 break;
1764 default:
1765 ptr += MINBPC(enc);
1766 break;
1767 }
1768 pos->columnNumber++;
1769 }
1770}
1771
1772#undef DO_LEAD_CASE
1773#undef MULTIBYTE_CASES
1774#undef INVALID_CASES
1775#undef CHECK_NAME_CASE
1776#undef CHECK_NAME_CASES
1777#undef CHECK_NMSTRT_CASE
1778#undef CHECK_NMSTRT_CASES
1766 break;
1767 default:
1768 ptr += MINBPC(enc);
1769 break;
1770 }
1771 pos->columnNumber++;
1772 }
1773}
1774
1775#undef DO_LEAD_CASE
1776#undef MULTIBYTE_CASES
1777#undef INVALID_CASES
1778#undef CHECK_NAME_CASE
1779#undef CHECK_NAME_CASES
1780#undef CHECK_NMSTRT_CASE
1781#undef CHECK_NMSTRT_CASES
1782
1783#endif /* XML_TOK_IMPL_C */