Changeset 214 for libyaml/trunk/src/scanner.c
- Timestamp:
- 07/28/06 16:09:34 (7 years ago)
- File:
-
- 1 edited
-
libyaml/trunk/src/scanner.c (modified) (73 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libyaml/trunk/src/scanner.c
r213 r214 489 489 490 490 /* 491 * Check the octet at the specified position.492 */493 494 #define CHECK_AT(parser,octet,offset) \495 (parser->buffer.pointer[offset] == (yaml_char_t)(octet))496 497 /*498 * Check the current octet in the buffer.499 */500 501 #define CHECK(parser,octet) CHECK_AT(parser,(octet),0)502 503 /*504 * Check if the character at the specified position is an alphabetical505 * character, a digit, '_', or '-'.506 */507 508 #define IS_ALPHA_AT(parser,offset) \509 ((parser->buffer.pointer[offset] >= (yaml_char_t) '0' && \510 parser->buffer.pointer[offset] <= (yaml_char_t) '9') || \511 (parser->buffer.pointer[offset] >= (yaml_char_t) 'A' && \512 parser->buffer.pointer[offset] <= (yaml_char_t) 'Z') || \513 (parser->buffer.pointer[offset] >= (yaml_char_t) 'a' && \514 parser->buffer.pointer[offset] <= (yaml_char_t) 'z') || \515 parser->buffer.pointer[offset] == '_' || \516 parser->buffer.pointer[offset] == '-')517 518 #define IS_ALPHA(parser) IS_ALPHA_AT(parser,0)519 520 /*521 * Check if the character at the specified position is a digit.522 */523 524 #define IS_DIGIT_AT(parser,offset) \525 ((parser->buffer.pointer[offset] >= (yaml_char_t) '0' && \526 parser->buffer.pointer[offset] <= (yaml_char_t) '9'))527 528 #define IS_DIGIT(parser) IS_DIGIT_AT(parser,0)529 530 /*531 * Get the value of a digit.532 */533 534 #define AS_DIGIT_AT(parser,offset) \535 (parser->buffer.pointer[offset] - (yaml_char_t) '0')536 537 #define AS_DIGIT(parser) AS_DIGIT_AT(parser,0)538 539 /*540 * Check if the character at the specified position is a hex-digit.541 */542 543 #define IS_HEX_AT(parser,offset) \544 ((parser->buffer.pointer[offset] >= (yaml_char_t) '0' && \545 parser->buffer.pointer[offset] <= (yaml_char_t) '9') || \546 (parser->buffer.pointer[offset] >= (yaml_char_t) 'A' && \547 parser->buffer.pointer[offset] <= (yaml_char_t) 'F') || \548 (parser->buffer.pointer[offset] >= (yaml_char_t) 'a' && \549 parser->buffer.pointer[offset] <= (yaml_char_t) 'f'))550 551 #define IS_HEX(parser) IS_HEX_AT(parser,0)552 553 /*554 * Get the value of a hex-digit.555 */556 557 #define AS_HEX_AT(parser,offset) \558 ((parser->buffer.pointer[offset] >= (yaml_char_t) 'A' && \559 parser->buffer.pointer[offset] <= (yaml_char_t) 'F') ? \560 (parser->buffer.pointer[offset] - (yaml_char_t) 'A' + 10) : \561 (parser->buffer.pointer[offset] >= (yaml_char_t) 'a' && \562 parser->buffer.pointer[offset] <= (yaml_char_t) 'f') ? \563 (parser->buffer.pointer[offset] - (yaml_char_t) 'a' + 10) : \564 (parser->buffer.pointer[offset] - (yaml_char_t) '0'))565 566 #define AS_HEX(parser) AS_HEX_AT(parser,0)567 568 /*569 * Check if the character at the specified position is NUL.570 */571 572 #define IS_Z_AT(parser,offset) CHECK_AT(parser,'\0',(offset))573 574 #define IS_Z(parser) IS_Z_AT(parser,0)575 576 /*577 * Check if the character at the specified position is BOM.578 */579 580 #define IS_BOM_AT(parser,offset) \581 (CHECK_AT(parser,'\xEF',(offset)) \582 && CHECK_AT(parser,'\xBB',(offset)+1) \583 && CHECK_AT(parser,'\xBF',(offset)+1)) /* BOM (#xFEFF) */584 585 #define IS_BOM(parser) IS_BOM_AT(parser,0)586 587 /*588 * Check if the character at the specified position is space.589 */590 591 #define IS_SPACE_AT(parser,offset) CHECK_AT(parser,' ',(offset))592 593 #define IS_SPACE(parser) IS_SPACE_AT(parser,0)594 595 /*596 * Check if the character at the specified position is tab.597 */598 599 #define IS_TAB_AT(parser,offset) CHECK_AT(parser,'\t',(offset))600 601 #define IS_TAB(parser) IS_TAB_AT(parser,0)602 603 /*604 * Check if the character at the specified position is blank (space or tab).605 */606 607 #define IS_BLANK_AT(parser,offset) \608 (IS_SPACE_AT(parser,(offset)) || IS_TAB_AT(parser,(offset)))609 610 #define IS_BLANK(parser) IS_BLANK_AT(parser,0)611 612 /*613 * Check if the character at the specified position is a line break.614 */615 616 #define IS_BREAK_AT(parser,offset) \617 (CHECK_AT(parser,'\r',(offset)) /* CR (#xD)*/ \618 || CHECK_AT(parser,'\n',(offset)) /* LF (#xA) */ \619 || (CHECK_AT(parser,'\xC2',(offset)) \620 && CHECK_AT(parser,'\x85',(offset)+1)) /* NEL (#x85) */ \621 || (CHECK_AT(parser,'\xE2',(offset)) \622 && CHECK_AT(parser,'\x80',(offset)+1) \623 && CHECK_AT(parser,'\xA8',(offset)+2)) /* LS (#x2028) */ \624 || (CHECK_AT(parser,'\xE2',(offset)) \625 && CHECK_AT(parser,'\x80',(offset)+1) \626 && CHECK_AT(parser,'\xA9',(offset)+2))) /* PS (#x2029) */627 628 #define IS_BREAK(parser) IS_BREAK_AT(parser,0)629 630 #define IS_CRLF_AT(parser,offset) \631 (CHECK_AT(parser,'\r',(offset)) && CHECK_AT(parser,'\n',(offset)+1))632 633 #define IS_CRLF(parser) IS_CRLF_AT(parser,0)634 635 /*636 * Check if the character is a line break or NUL.637 */638 639 #define IS_BREAKZ_AT(parser,offset) \640 (IS_BREAK_AT(parser,(offset)) || IS_Z_AT(parser,(offset)))641 642 #define IS_BREAKZ(parser) IS_BREAKZ_AT(parser,0)643 644 /*645 * Check if the character is a line break, space, or NUL.646 */647 648 #define IS_SPACEZ_AT(parser,offset) \649 (IS_SPACE_AT(parser,(offset)) || IS_BREAKZ_AT(parser,(offset)))650 651 #define IS_SPACEZ(parser) IS_SPACEZ_AT(parser,0)652 653 /*654 * Check if the character is a line break, space, tab, or NUL.655 */656 657 #define IS_BLANKZ_AT(parser,offset) \658 (IS_BLANK_AT(parser,(offset)) || IS_BREAKZ_AT(parser,(offset)))659 660 #define IS_BLANKZ(parser) IS_BLANKZ_AT(parser,0)661 662 /*663 * Determine the width of the character.664 */665 666 #define WIDTH_AT(parser,offset) \667 ((parser->buffer.pointer[offset] & 0x80) == 0x00 ? 1 : \668 (parser->buffer.pointer[offset] & 0xE0) == 0xC0 ? 2 : \669 (parser->buffer.pointer[offset] & 0xF0) == 0xE0 ? 3 : \670 (parser->buffer.pointer[offset] & 0xF8) == 0xF0 ? 4 : 0)671 672 #define WIDTH(parser) WIDTH_AT(parser,0)673 674 /*675 491 * Advance the buffer pointer. 676 492 */ … … 680 496 parser->mark.column ++, \ 681 497 parser->unread --, \ 682 parser->buffer.pointer += WIDTH(parser ))498 parser->buffer.pointer += WIDTH(parser->buffer)) 683 499 684 500 #define SKIP_LINE(parser) \ 685 (IS_CRLF(parser ) ?\501 (IS_CRLF(parser->buffer) ? \ 686 502 (parser->mark.index += 2, \ 687 503 parser->mark.column = 0, \ … … 689 505 parser->unread -= 2, \ 690 506 parser->buffer.pointer += 2) : \ 691 IS_BREAK(parser ) ?\507 IS_BREAK(parser->buffer) ? \ 692 508 (parser->mark.index ++, \ 693 509 parser->mark.column = 0, \ 694 510 parser->mark.line ++, \ 695 511 parser->unread --, \ 696 parser->buffer.pointer += WIDTH(parser )) : 0)512 parser->buffer.pointer += WIDTH(parser->buffer)) : 0) 697 513 698 514 /* … … 702 518 #define READ(parser,string) \ 703 519 (STRING_EXTEND(parser,string) ? \ 704 (((*parser->buffer.pointer & 0x80) == 0x00 ? \ 705 (*((string).pointer++) = *(parser->buffer.pointer++)) : \ 706 (*parser->buffer.pointer & 0xE0) == 0xC0 ? \ 707 (*((string).pointer++) = *(parser->buffer.pointer++), \ 708 *((string).pointer++) = *(parser->buffer.pointer++)) : \ 709 (*parser->buffer.pointer & 0xF0) == 0xE0 ? \ 710 (*((string).pointer++) = *(parser->buffer.pointer++), \ 711 *((string).pointer++) = *(parser->buffer.pointer++), \ 712 *((string).pointer++) = *(parser->buffer.pointer++)) : \ 713 (*parser->buffer.pointer & 0xF8) == 0xF0 ? \ 714 (*((string).pointer++) = *(parser->buffer.pointer++), \ 715 *((string).pointer++) = *(parser->buffer.pointer++), \ 716 *((string).pointer++) = *(parser->buffer.pointer++), \ 717 *((string).pointer++) = *(parser->buffer.pointer++)) : 0), \ 520 (COPY(string,parser->buffer), \ 718 521 parser->mark.index ++, \ 719 522 parser->mark.column ++, \ … … 727 530 #define READ_LINE(parser,string) \ 728 531 (STRING_EXTEND(parser,string) ? \ 729 (((CHECK_AT(parser,'\r',0) && CHECK_AT(parser,'\n',1)) ? /* CR LF -> LF */ \ 532 (((CHECK_AT(parser->buffer,'\r',0) \ 533 && CHECK_AT(parser->buffer,'\n',1)) ? /* CR LF -> LF */ \ 730 534 (*((string).pointer++) = (yaml_char_t) '\n', \ 731 535 parser->buffer.pointer += 2, \ … … 734 538 parser->mark.line ++, \ 735 539 parser->unread -= 2) : \ 736 (CHECK_AT(parser,'\r',0) || CHECK_AT(parser,'\n',0)) ? /* CR|LF -> LF */ \ 540 (CHECK_AT(parser->buffer,'\r',0) \ 541 || CHECK_AT(parser->buffer,'\n',0)) ? /* CR|LF -> LF */ \ 737 542 (*((string).pointer++) = (yaml_char_t) '\n', \ 738 543 parser->buffer.pointer ++, \ … … 741 546 parser->mark.line ++, \ 742 547 parser->unread --) : \ 743 (CHECK_AT(parser,'\xC2',0) && CHECK_AT(parser,'\x85',1)) ? /* NEL -> LF */ \ 548 (CHECK_AT(parser->buffer,'\xC2',0) \ 549 && CHECK_AT(parser->buffer,'\x85',1)) ? /* NEL -> LF */ \ 744 550 (*((string).pointer++) = (yaml_char_t) '\n', \ 745 551 parser->buffer.pointer += 2, \ … … 748 554 parser->mark.line ++, \ 749 555 parser->unread --) : \ 750 (CHECK_AT(parser ,'\xE2',0) &&\751 CHECK_AT(parser ,'\x80',1) &&\752 (CHECK_AT(parser ,'\xA8',2) ||\753 CHECK_AT(parser ,'\xA9',2))) ? /* LS|PS -> LS|PS */\556 (CHECK_AT(parser->buffer,'\xE2',0) && \ 557 CHECK_AT(parser->buffer,'\x80',1) && \ 558 (CHECK_AT(parser->buffer,'\xA8',2) || \ 559 CHECK_AT(parser->buffer,'\xA9',2))) ? /* LS|PS -> LS|PS */ \ 754 560 (*((string).pointer++) = *(parser->buffer.pointer++), \ 755 561 *((string).pointer++) = *(parser->buffer.pointer++), \ … … 1089 895 /* Is it the end of the stream? */ 1090 896 1091 if (IS_Z(parser ))897 if (IS_Z(parser->buffer)) 1092 898 return yaml_parser_fetch_stream_end(parser); 1093 899 1094 900 /* Is it a directive? */ 1095 901 1096 if (parser->mark.column == 0 && CHECK(parser , '%'))902 if (parser->mark.column == 0 && CHECK(parser->buffer, '%')) 1097 903 return yaml_parser_fetch_directive(parser); 1098 904 … … 1100 906 1101 907 if (parser->mark.column == 0 1102 && CHECK_AT(parser , '-', 0)1103 && CHECK_AT(parser , '-', 1)1104 && CHECK_AT(parser , '-', 2)1105 && IS_BLANKZ_AT(parser , 3))908 && CHECK_AT(parser->buffer, '-', 0) 909 && CHECK_AT(parser->buffer, '-', 1) 910 && CHECK_AT(parser->buffer, '-', 2) 911 && IS_BLANKZ_AT(parser->buffer, 3)) 1106 912 return yaml_parser_fetch_document_indicator(parser, 1107 913 YAML_DOCUMENT_START_TOKEN); … … 1110 916 1111 917 if (parser->mark.column == 0 1112 && CHECK_AT(parser , '.', 0)1113 && CHECK_AT(parser , '.', 1)1114 && CHECK_AT(parser , '.', 2)1115 && IS_BLANKZ_AT(parser , 3))918 && CHECK_AT(parser->buffer, '.', 0) 919 && CHECK_AT(parser->buffer, '.', 1) 920 && CHECK_AT(parser->buffer, '.', 2) 921 && IS_BLANKZ_AT(parser->buffer, 3)) 1116 922 return yaml_parser_fetch_document_indicator(parser, 1117 923 YAML_DOCUMENT_END_TOKEN); … … 1119 925 /* Is it the flow sequence start indicator? */ 1120 926 1121 if (CHECK(parser , '['))927 if (CHECK(parser->buffer, '[')) 1122 928 return yaml_parser_fetch_flow_collection_start(parser, 1123 929 YAML_FLOW_SEQUENCE_START_TOKEN); … … 1125 931 /* Is it the flow mapping start indicator? */ 1126 932 1127 if (CHECK(parser , '{'))933 if (CHECK(parser->buffer, '{')) 1128 934 return yaml_parser_fetch_flow_collection_start(parser, 1129 935 YAML_FLOW_MAPPING_START_TOKEN); … … 1131 937 /* Is it the flow sequence end indicator? */ 1132 938 1133 if (CHECK(parser , ']'))939 if (CHECK(parser->buffer, ']')) 1134 940 return yaml_parser_fetch_flow_collection_end(parser, 1135 941 YAML_FLOW_SEQUENCE_END_TOKEN); … … 1137 943 /* Is it the flow mapping end indicator? */ 1138 944 1139 if (CHECK(parser , '}'))945 if (CHECK(parser->buffer, '}')) 1140 946 return yaml_parser_fetch_flow_collection_end(parser, 1141 947 YAML_FLOW_MAPPING_END_TOKEN); … … 1143 949 /* Is it the flow entry indicator? */ 1144 950 1145 if (CHECK(parser , ','))951 if (CHECK(parser->buffer, ',')) 1146 952 return yaml_parser_fetch_flow_entry(parser); 1147 953 1148 954 /* Is it the block entry indicator? */ 1149 955 1150 if (CHECK(parser , '-') && IS_BLANKZ_AT(parser, 1))956 if (CHECK(parser->buffer, '-') && IS_BLANKZ_AT(parser->buffer, 1)) 1151 957 return yaml_parser_fetch_block_entry(parser); 1152 958 1153 959 /* Is it the key indicator? */ 1154 960 1155 if (CHECK(parser, '?') && (parser->flow_level || IS_BLANKZ_AT(parser, 1))) 961 if (CHECK(parser->buffer, '?') 962 && (parser->flow_level || IS_BLANKZ_AT(parser->buffer, 1))) 1156 963 return yaml_parser_fetch_key(parser); 1157 964 1158 965 /* Is it the value indicator? */ 1159 966 1160 if (CHECK(parser, ':') && (parser->flow_level || IS_BLANKZ_AT(parser, 1))) 967 if (CHECK(parser->buffer, ':') 968 && (parser->flow_level || IS_BLANKZ_AT(parser->buffer, 1))) 1161 969 return yaml_parser_fetch_value(parser); 1162 970 1163 971 /* Is it an alias? */ 1164 972 1165 if (CHECK(parser , '*'))973 if (CHECK(parser->buffer, '*')) 1166 974 return yaml_parser_fetch_anchor(parser, YAML_ALIAS_TOKEN); 1167 975 1168 976 /* Is it an anchor? */ 1169 977 1170 if (CHECK(parser , '&'))978 if (CHECK(parser->buffer, '&')) 1171 979 return yaml_parser_fetch_anchor(parser, YAML_ANCHOR_TOKEN); 1172 980 1173 981 /* Is it a tag? */ 1174 982 1175 if (CHECK(parser , '!'))983 if (CHECK(parser->buffer, '!')) 1176 984 return yaml_parser_fetch_tag(parser); 1177 985 1178 986 /* Is it a literal scalar? */ 1179 987 1180 if (CHECK(parser , '|') && !parser->flow_level)988 if (CHECK(parser->buffer, '|') && !parser->flow_level) 1181 989 return yaml_parser_fetch_block_scalar(parser, 1); 1182 990 1183 991 /* Is it a folded scalar? */ 1184 992 1185 if (CHECK(parser , '>') && !parser->flow_level)993 if (CHECK(parser->buffer, '>') && !parser->flow_level) 1186 994 return yaml_parser_fetch_block_scalar(parser, 0); 1187 995 1188 996 /* Is it a single-quoted scalar? */ 1189 997 1190 if (CHECK(parser , '\''))998 if (CHECK(parser->buffer, '\'')) 1191 999 return yaml_parser_fetch_flow_scalar(parser, 1); 1192 1000 1193 1001 /* Is it a double-quoted scalar? */ 1194 1002 1195 if (CHECK(parser , '"'))1003 if (CHECK(parser->buffer, '"')) 1196 1004 return yaml_parser_fetch_flow_scalar(parser, 0); 1197 1005 … … 1215 1023 */ 1216 1024 1217 if (!(IS_BLANKZ(parser) || CHECK(parser, '-') || CHECK(parser, '?') 1218 || CHECK(parser, ':') || CHECK(parser, ',') || CHECK(parser, '[') 1219 || CHECK(parser, ']') || CHECK(parser, '{') || CHECK(parser, '}') 1220 || CHECK(parser, '#') || CHECK(parser, '&') || CHECK(parser, '*') 1221 || CHECK(parser, '!') || CHECK(parser, '|') || CHECK(parser, '>') 1222 || CHECK(parser, '\'') || CHECK(parser, '"') || CHECK(parser, '%') 1223 || CHECK(parser, '@') || CHECK(parser, '`')) || 1224 (CHECK(parser, '-') && !IS_BLANK_AT(parser, 1)) || 1025 if (!(IS_BLANKZ(parser->buffer) || CHECK(parser->buffer, '-') 1026 || CHECK(parser->buffer, '?') || CHECK(parser->buffer, ':') 1027 || CHECK(parser->buffer, ',') || CHECK(parser->buffer, '[') 1028 || CHECK(parser->buffer, ']') || CHECK(parser->buffer, '{') 1029 || CHECK(parser->buffer, '}') || CHECK(parser->buffer, '#') 1030 || CHECK(parser->buffer, '&') || CHECK(parser->buffer, '*') 1031 || CHECK(parser->buffer, '!') || CHECK(parser->buffer, '|') 1032 || CHECK(parser->buffer, '>') || CHECK(parser->buffer, '\'') 1033 || CHECK(parser->buffer, '"') || CHECK(parser->buffer, '%') 1034 || CHECK(parser->buffer, '@') || CHECK(parser->buffer, '`')) || 1035 (CHECK(parser->buffer, '-') && !IS_BLANK_AT(parser->buffer, 1)) || 1225 1036 (!parser->flow_level && 1226 (CHECK(parser, '?') || CHECK(parser, ':')) && !IS_BLANKZ_AT(parser, 1))) 1037 (CHECK(parser->buffer, '?') || CHECK(parser->buffer, ':')) 1038 && !IS_BLANKZ_AT(parser->buffer, 1))) 1227 1039 return yaml_parser_fetch_plain_scalar(parser); 1228 1040 … … 2102 1914 if (!CACHE(parser, 1)) return 0; 2103 1915 2104 if (parser->mark.column == 0 && IS_BOM(parser ))1916 if (parser->mark.column == 0 && IS_BOM(parser->buffer)) 2105 1917 SKIP(parser); 2106 1918 … … 2117 1929 if (!CACHE(parser, 1)) return 0; 2118 1930 2119 while (CHECK(parser ,' ') ||1931 while (CHECK(parser->buffer,' ') || 2120 1932 ((parser->flow_level || !parser->simple_key_allowed) && 2121 CHECK(parser , '\t'))) {1933 CHECK(parser->buffer, '\t'))) { 2122 1934 SKIP(parser); 2123 1935 if (!CACHE(parser, 1)) return 0; … … 2126 1938 /* Eat a comment until a line break. */ 2127 1939 2128 if (CHECK(parser , '#')) {2129 while (!IS_BREAKZ(parser )) {1940 if (CHECK(parser->buffer, '#')) { 1941 while (!IS_BREAKZ(parser->buffer)) { 2130 1942 SKIP(parser); 2131 1943 if (!CACHE(parser, 1)) return 0; … … 2135 1947 /* If it is a line break, eat it. */ 2136 1948 2137 if (IS_BREAK(parser ))1949 if (IS_BREAK(parser->buffer)) 2138 1950 { 2139 1951 if (!CACHE(parser, 2)) return 0; … … 2235 2047 if (!CACHE(parser, 1)) goto error; 2236 2048 2237 while (IS_BLANK(parser )) {2049 while (IS_BLANK(parser->buffer)) { 2238 2050 SKIP(parser); 2239 2051 if (!CACHE(parser, 1)) goto error; 2240 2052 } 2241 2053 2242 if (CHECK(parser , '#')) {2243 while (!IS_BREAKZ(parser )) {2054 if (CHECK(parser->buffer, '#')) { 2055 while (!IS_BREAKZ(parser->buffer)) { 2244 2056 SKIP(parser); 2245 2057 if (!CACHE(parser, 1)) goto error; … … 2249 2061 /* Check if we are at the end of the line. */ 2250 2062 2251 if (!IS_BREAKZ(parser )) {2063 if (!IS_BREAKZ(parser->buffer)) { 2252 2064 yaml_parser_set_scanner_error(parser, "while scanning a directive", 2253 2065 start_mark, "did not found expected comment or line break"); … … 2257 2069 /* Eat a line break. */ 2258 2070 2259 if (IS_BREAK(parser )) {2071 if (IS_BREAK(parser->buffer)) { 2260 2072 if (!CACHE(parser, 2)) goto error; 2261 2073 SKIP_LINE(parser); … … 2295 2107 if (!CACHE(parser, 1)) goto error; 2296 2108 2297 while (IS_ALPHA(parser ))2109 while (IS_ALPHA(parser->buffer)) 2298 2110 { 2299 2111 if (!READ(parser, string)) goto error; … … 2311 2123 /* Check for an blank character after the name. */ 2312 2124 2313 if (!IS_BLANKZ(parser )) {2125 if (!IS_BLANKZ(parser->buffer)) { 2314 2126 yaml_parser_set_scanner_error(parser, "while scanning a directive", 2315 2127 start_mark, "found unexpected non-alphabetical character"); … … 2342 2154 if (!CACHE(parser, 1)) return 0; 2343 2155 2344 while (IS_BLANK(parser )) {2156 while (IS_BLANK(parser->buffer)) { 2345 2157 SKIP(parser); 2346 2158 if (!CACHE(parser, 1)) return 0; … … 2354 2166 /* Eat '.'. */ 2355 2167 2356 if (!CHECK(parser , '.')) {2168 if (!CHECK(parser->buffer, '.')) { 2357 2169 return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", 2358 2170 start_mark, "did not find expected digit or '.' character"); … … 2392 2204 if (!CACHE(parser, 1)) return 0; 2393 2205 2394 while (IS_DIGIT(parser ))2206 while (IS_DIGIT(parser->buffer)) 2395 2207 { 2396 2208 /* Check if the number is too long. */ … … 2401 2213 } 2402 2214 2403 value = value*10 + AS_DIGIT(parser );2215 value = value*10 + AS_DIGIT(parser->buffer); 2404 2216 2405 2217 SKIP(parser); … … 2439 2251 if (!CACHE(parser, 1)) goto error; 2440 2252 2441 while (IS_BLANK(parser )) {2253 while (IS_BLANK(parser->buffer)) { 2442 2254 SKIP(parser); 2443 2255 if (!CACHE(parser, 1)) goto error; … … 2453 2265 if (!CACHE(parser, 1)) goto error; 2454 2266 2455 if (!IS_BLANK(parser )) {2267 if (!IS_BLANK(parser->buffer)) { 2456 2268 yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", 2457 2269 start_mark, "did not find expected whitespace"); … … 2461 2273 /* Eat whitespaces. */ 2462 2274 2463 while (IS_BLANK(parser )) {2275 while (IS_BLANK(parser->buffer)) { 2464 2276 SKIP(parser); 2465 2277 if (!CACHE(parser, 1)) goto error; … … 2475 2287 if (!CACHE(parser, 1)) goto error; 2476 2288 2477 if (!IS_BLANKZ(parser )) {2289 if (!IS_BLANKZ(parser->buffer)) { 2478 2290 yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", 2479 2291 start_mark, "did not find expected whitespace or line break"); … … 2512 2324 if (!CACHE(parser, 1)) goto error; 2513 2325 2514 while (IS_ALPHA(parser )) {2326 while (IS_ALPHA(parser->buffer)) { 2515 2327 if (!READ(parser, string)) goto error; 2516 2328 if (!CACHE(parser, 1)) goto error; … … 2527 2339 */ 2528 2340 2529 if (!length || !(IS_BLANKZ(parser) || CHECK(parser, '?') || CHECK(parser, ':') || 2530 CHECK(parser, ',') || CHECK(parser, ']') || CHECK(parser, '}') || 2531 CHECK(parser, '%') || CHECK(parser, '@') || CHECK(parser, '`'))) { 2341 if (!length || !(IS_BLANKZ(parser->buffer) || CHECK(parser->buffer, '?') 2342 || CHECK(parser->buffer, ':') || CHECK(parser->buffer, ',') 2343 || CHECK(parser->buffer, ']') || CHECK(parser->buffer, '}') 2344 || CHECK(parser->buffer, '%') || CHECK(parser->buffer, '@') 2345 || CHECK(parser->buffer, '`'))) { 2532 2346 yaml_parser_set_scanner_error(parser, type == YAML_ANCHOR_TOKEN ? 2533 2347 "while scanning an anchor" : "while scanning an alias", start_mark, … … 2569 2383 if (!CACHE(parser, 2)) goto error; 2570 2384 2571 if (CHECK_AT(parser , '<', 1))2385 if (CHECK_AT(parser->buffer, '<', 1)) 2572 2386 { 2573 2387 /* Set the handle to '' */ … … 2589 2403 /* Check for '>' and eat it. */ 2590 2404 2591 if (!CHECK(parser , '>')) {2405 if (!CHECK(parser->buffer, '>')) { 2592 2406 yaml_parser_set_scanner_error(parser, "while scanning a tag", 2593 2407 start_mark, "did not find the expected '>'"); … … 2647 2461 if (!CACHE(parser, 1)) goto error; 2648 2462 2649 if (!IS_BLANKZ(parser )) {2463 if (!IS_BLANKZ(parser->buffer)) { 2650 2464 yaml_parser_set_scanner_error(parser, "while scanning a tag", 2651 2465 start_mark, "did not found expected whitespace or line break"); … … 2683 2497 if (!CACHE(parser, 1)) goto error; 2684 2498 2685 if (!CHECK(parser , '!')) {2499 if (!CHECK(parser->buffer, '!')) { 2686 2500 yaml_parser_set_scanner_error(parser, directive ? 2687 2501 "while scanning a tag directive" : "while scanning a tag", … … 2698 2512 if (!CACHE(parser, 1)) goto error; 2699 2513 2700 while (IS_ALPHA(parser ))2514 while (IS_ALPHA(parser->buffer)) 2701 2515 { 2702 2516 if (!READ(parser, string)) goto error; … … 2706 2520 /* Check if the trailing character is '!' and copy it. */ 2707 2521 2708 if (CHECK(parser , '!'))2522 if (CHECK(parser->buffer, '!')) 2709 2523 { 2710 2524 if (!READ(parser, string)) goto error; … … 2779 2593 */ 2780 2594 2781 while (IS_ALPHA(parser) || CHECK(parser, ';') || CHECK(parser, '/') || 2782 CHECK(parser, '?') || CHECK(parser, ':') || CHECK(parser, '@') || 2783 CHECK(parser, '&') || CHECK(parser, '=') || CHECK(parser, '+') || 2784 CHECK(parser, '$') || CHECK(parser, ',') || CHECK(parser, '.') || 2785 CHECK(parser, '!') || CHECK(parser, '~') || CHECK(parser, '*') || 2786 CHECK(parser, '\'') || CHECK(parser, '(') || CHECK(parser, ')') || 2787 CHECK(parser, '[') || CHECK(parser, ']') || CHECK(parser, '%')) 2595 while (IS_ALPHA(parser->buffer) || CHECK(parser->buffer, ';') 2596 || CHECK(parser->buffer, '/') || CHECK(parser->buffer, '?') 2597 || CHECK(parser->buffer, ':') || CHECK(parser->buffer, '@') 2598 || CHECK(parser->buffer, '&') || CHECK(parser->buffer, '=') 2599 || CHECK(parser->buffer, '+') || CHECK(parser->buffer, '$') 2600 || CHECK(parser->buffer, ',') || CHECK(parser->buffer, '.') 2601 || CHECK(parser->buffer, '!') || CHECK(parser->buffer, '~') 2602 || CHECK(parser->buffer, '*') || CHECK(parser->buffer, '\'') 2603 || CHECK(parser->buffer, '(') || CHECK(parser->buffer, ')') 2604 || CHECK(parser->buffer, '[') || CHECK(parser->buffer, ']') 2605 || CHECK(parser->buffer, '%')) 2788 2606 { 2789 2607 /* Check if it is a URI-escape sequence. */ 2790 2608 2791 if (CHECK(parser , '%')) {2609 if (CHECK(parser->buffer, '%')) { 2792 2610 if (!yaml_parser_scan_uri_escapes(parser, 2793 2611 directive, start_mark, &string)) goto error; … … 2842 2660 if (!CACHE(parser, 3)) return 0; 2843 2661 2844 if (!(CHECK(parser, '%') && IS_HEX_AT(parser, 1) && IS_HEX_AT(parser, 2))) { 2662 if (!(CHECK(parser->buffer, '%') 2663 && IS_HEX_AT(parser->buffer, 1) 2664 && IS_HEX_AT(parser->buffer, 2))) { 2845 2665 return yaml_parser_set_scanner_error(parser, directive ? 2846 2666 "while parsing a %TAG directive" : "while parsing a tag", … … 2850 2670 /* Get the octet. */ 2851 2671 2852 octet = (AS_HEX_AT(parser , 1) << 4) + AS_HEX_AT(parser, 2);2672 octet = (AS_HEX_AT(parser->buffer, 1) << 4) + AS_HEX_AT(parser->buffer, 2); 2853 2673 2854 2674 /* If it is the leading octet, determine the length of the UTF-8 sequence. */ … … 2924 2744 /* Check for a chomping indicator. */ 2925 2745 2926 if (CHECK(parser , '+') || CHECK(parser, '-'))2746 if (CHECK(parser->buffer, '+') || CHECK(parser->buffer, '-')) 2927 2747 { 2928 2748 /* Set the chomping method and eat the indicator. */ 2929 2749 2930 chomping = CHECK(parser , '+') ? +1 : -1;2750 chomping = CHECK(parser->buffer, '+') ? +1 : -1; 2931 2751 2932 2752 SKIP(parser); … … 2936 2756 if (!CACHE(parser, 1)) goto error; 2937 2757 2938 if (IS_DIGIT(parser ))2758 if (IS_DIGIT(parser->buffer)) 2939 2759 { 2940 2760 /* Check that the intendation is greater than 0. */ 2941 2761 2942 if (CHECK(parser , '0')) {2762 if (CHECK(parser->buffer, '0')) { 2943 2763 yaml_parser_set_scanner_error(parser, "while scanning a block scalar", 2944 2764 start_mark, "found an intendation indicator equal to 0"); … … 2948 2768 /* Get the intendation level and eat the indicator. */ 2949 2769 2950 increment = AS_DIGIT(parser );2770 increment = AS_DIGIT(parser->buffer); 2951 2771 2952 2772 SKIP(parser); … … 2956 2776 /* Do the same as above, but in the opposite order. */ 2957 2777 2958 else if (IS_DIGIT(parser ))2778 else if (IS_DIGIT(parser->buffer)) 2959 2779 { 2960 if (CHECK(parser , '0')) {2780 if (CHECK(parser->buffer, '0')) { 2961 2781 yaml_parser_set_scanner_error(parser, "while scanning a block scalar", 2962 2782 start_mark, "found an intendation indicator equal to 0"); … … 2964 2784 } 2965 2785 2966 increment = AS_DIGIT(parser );2786 increment = AS_DIGIT(parser->buffer); 2967 2787 2968 2788 SKIP(parser); … … 2970 2790 if (!CACHE(parser, 1)) goto error; 2971 2791 2972 if (CHECK(parser , '+') || CHECK(parser, '-')) {2973 chomping = CHECK(parser , '+') ? +1 : -1;2792 if (CHECK(parser->buffer, '+') || CHECK(parser->buffer, '-')) { 2793 chomping = CHECK(parser->buffer, '+') ? +1 : -1; 2974 2794 2975 2795 SKIP(parser); … … 2981 2801 if (!CACHE(parser, 1)) goto error; 2982 2802 2983 while (IS_BLANK(parser )) {2803 while (IS_BLANK(parser->buffer)) { 2984 2804 SKIP(parser); 2985 2805 if (!CACHE(parser, 1)) goto error; 2986 2806 } 2987 2807 2988 if (CHECK(parser , '#')) {2989 while (!IS_BREAKZ(parser )) {2808 if (CHECK(parser->buffer, '#')) { 2809 while (!IS_BREAKZ(parser->buffer)) { 2990 2810 SKIP(parser); 2991 2811 if (!CACHE(parser, 1)) goto error; … … 2995 2815 /* Check if we are at the end of the line. */ 2996 2816 2997 if (!IS_BREAKZ(parser )) {2817 if (!IS_BREAKZ(parser->buffer)) { 2998 2818 yaml_parser_set_scanner_error(parser, "while scanning a block scalar", 2999 2819 start_mark, "did not found expected comment or line break"); … … 3003 2823 /* Eat a line break. */ 3004 2824 3005 if (IS_BREAK(parser )) {2825 if (IS_BREAK(parser->buffer)) { 3006 2826 if (!CACHE(parser, 2)) goto error; 3007 2827 SKIP_LINE(parser); … … 3025 2845 if (!CACHE(parser, 1)) goto error; 3026 2846 3027 while (parser->mark.column == indent && !IS_Z(parser ))2847 while (parser->mark.column == indent && !IS_Z(parser->buffer)) 3028 2848 { 3029 2849 /* … … 3033 2853 /* Is it a trailing whitespace? */ 3034 2854 3035 trailing_blank = IS_BLANK(parser );2855 trailing_blank = IS_BLANK(parser->buffer); 3036 2856 3037 2857 /* Check if we need to fold the leading line break. */ … … 3061 2881 /* Is it a leading whitespace? */ 3062 2882 3063 leading_blank = IS_BLANK(parser );2883 leading_blank = IS_BLANK(parser->buffer); 3064 2884 3065 2885 /* Consume the current line. */ 3066 2886 3067 while (!IS_BREAKZ(parser )) {2887 while (!IS_BREAKZ(parser->buffer)) { 3068 2888 if (!READ(parser, string)) goto error; 3069 2889 if (!CACHE(parser, 1)) goto error; … … 3132 2952 if (!CACHE(parser, 1)) return 0; 3133 2953 3134 while ((!*indent || parser->mark.column < *indent) && IS_SPACE(parser)) { 2954 while ((!*indent || parser->mark.column < *indent) 2955 && IS_SPACE(parser->buffer)) { 3135 2956 SKIP(parser); 3136 2957 if (!CACHE(parser, 1)) return 0; … … 3142 2963 /* Check for a tab character messing the intendation. */ 3143 2964 3144 if ((!*indent || parser->mark.column < *indent) && IS_TAB(parser)) { 2965 if ((!*indent || parser->mark.column < *indent) 2966 && IS_TAB(parser->buffer)) { 3145 2967 return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", 3146 2968 start_mark, "found a tab character where an intendation space is expected"); … … 3149 2971 /* Have we found a non-empty line? */ 3150 2972 3151 if (!IS_BREAK(parser )) break;2973 if (!IS_BREAK(parser->buffer)) break; 3152 2974 3153 2975 /* Consume the line break. */ … … 3207 3029 3208 3030 if (parser->mark.column == 0 && 3209 ((CHECK_AT(parser , '-', 0) &&3210 CHECK_AT(parser , '-', 1) &&3211 CHECK_AT(parser , '-', 2)) ||3212 (CHECK_AT(parser , '.', 0) &&3213 CHECK_AT(parser , '.', 1) &&3214 CHECK_AT(parser , '.', 2))) &&3215 IS_BLANKZ_AT(parser , 3))3031 ((CHECK_AT(parser->buffer, '-', 0) && 3032 CHECK_AT(parser->buffer, '-', 1) && 3033 CHECK_AT(parser->buffer, '-', 2)) || 3034 (CHECK_AT(parser->buffer, '.', 0) && 3035 CHECK_AT(parser->buffer, '.', 1) && 3036 CHECK_AT(parser->buffer, '.', 2))) && 3037 IS_BLANKZ_AT(parser->buffer, 3)) 3216 3038 { 3217 3039 yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", … … 3222 3044 /* Check for EOF. */ 3223 3045 3224 if (IS_Z(parser )) {3046 if (IS_Z(parser->buffer)) { 3225 3047 yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", 3226 3048 start_mark, "found unexpected end of stream"); … … 3234 3056 leading_blanks = 0; 3235 3057 3236 while (!IS_BLANKZ(parser ))3058 while (!IS_BLANKZ(parser->buffer)) 3237 3059 { 3238 3060 /* Check for an escaped single quote. */ 3239 3061 3240 if (single && CHECK_AT(parser, '\'', 0) && CHECK_AT(parser, '\'', 1)) 3062 if (single && CHECK_AT(parser->buffer, '\'', 0) 3063 && CHECK_AT(parser->buffer, '\'', 1)) 3241 3064 { 3242 3065 if (!STRING_EXTEND(parser, string)) goto error; … … 3248 3071 /* Check for the right quote. */ 3249 3072 3250 else if (CHECK(parser , single ? '\'' : '"'))3073 else if (CHECK(parser->buffer, single ? '\'' : '"')) 3251 3074 { 3252 3075 break; … … 3255 3078 /* Check for an escaped line break. */ 3256 3079 3257 else if (!single && CHECK(parser, '\\') && IS_BREAK_AT(parser, 1)) 3080 else if (!single && CHECK(parser->buffer, '\\') 3081 && IS_BREAK_AT(parser->buffer, 1)) 3258 3082 { 3259 3083 if (!CACHE(parser, 3)) goto error; … … 3266 3090 /* Check for an escape sequence. */ 3267 3091 3268 else if (!single && CHECK(parser , '\\'))3092 else if (!single && CHECK(parser->buffer, '\\')) 3269 3093 { 3270 3094 int code_length = 0; … … 3384 3208 3385 3209 for (k = 0; k < code_length; k ++) { 3386 if (!IS_HEX_AT(parser , k)) {3210 if (!IS_HEX_AT(parser->buffer, k)) { 3387 3211 yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", 3388 3212 start_mark, "did not find expected hexdecimal number"); 3389 3213 goto error; 3390 3214 } 3391 value = (value << 4) + AS_HEX_AT(parser , k);3215 value = (value << 4) + AS_HEX_AT(parser->buffer, k); 3392 3216 } 3393 3217 … … 3439 3263 /* Check if we are at the end of the scalar. */ 3440 3264 3441 if (CHECK(parser , single ? '\'' : '"'))3265 if (CHECK(parser->buffer, single ? '\'' : '"')) 3442 3266 break; 3443 3267 … … 3446 3270 if (!CACHE(parser, 1)) goto error; 3447 3271 3448 while (IS_BLANK(parser ) || IS_BREAK(parser))3272 while (IS_BLANK(parser->buffer) || IS_BREAK(parser->buffer)) 3449 3273 { 3450 if (IS_BLANK(parser ))3274 if (IS_BLANK(parser->buffer)) 3451 3275 { 3452 3276 /* Consume a space or a tab character. */ … … 3569 3393 3570 3394 if (parser->mark.column == 0 && 3571 ((CHECK_AT(parser , '-', 0) &&3572 CHECK_AT(parser , '-', 1) &&3573 CHECK_AT(parser , '-', 2)) ||3574 (CHECK_AT(parser , '.', 0) &&3575 CHECK_AT(parser , '.', 1) &&3576 CHECK_AT(parser , '.', 2))) &&3577 IS_BLANKZ_AT(parser , 3)) break;3395 ((CHECK_AT(parser->buffer, '-', 0) && 3396 CHECK_AT(parser->buffer, '-', 1) && 3397 CHECK_AT(parser->buffer, '-', 2)) || 3398 (CHECK_AT(parser->buffer, '.', 0) && 3399 CHECK_AT(parser->buffer, '.', 1) && 3400 CHECK_AT(parser->buffer, '.', 2))) && 3401 IS_BLANKZ_AT(parser->buffer, 3)) break; 3578 3402 3579 3403 /* Check for a comment. */ 3580 3404 3581 if (CHECK(parser , '#'))3405 if (CHECK(parser->buffer, '#')) 3582 3406 break; 3583 3407 3584 3408 /* Consume non-blank characters. */ 3585 3409 3586 while (!IS_BLANKZ(parser ))3410 while (!IS_BLANKZ(parser->buffer)) 3587 3411 { 3588 3412 /* Check for 'x:x' in the flow context. TODO: Fix the test "spec-08-13". */ 3589 3413 3590 if (parser->flow_level && CHECK(parser, ':') && !IS_BLANKZ_AT(parser, 1)) { 3414 if (parser->flow_level 3415 && CHECK(parser->buffer, ':') 3416 && !IS_BLANKZ_AT(parser->buffer, 1)) { 3591 3417 yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", 3592 3418 start_mark, "found unexpected ':'"); … … 3596 3422 /* Check for indicators that may end a plain scalar. */ 3597 3423 3598 if ((CHECK(parser , ':') && IS_BLANKZ_AT(parser, 1)) ||3599 (parser->flow_level &&3600 (CHECK(parser, ',') || CHECK(parser, ':') ||3601 CHECK(parser, '?') || CHECK(parser, '[') ||3602 CHECK(parser, ']') || CHECK(parser, '{') ||3603 CHECK(parser, '}'))))3424 if ((CHECK(parser->buffer, ':') && IS_BLANKZ_AT(parser->buffer, 1)) 3425 || (parser->flow_level && 3426 (CHECK(parser->buffer, ',') || CHECK(parser->buffer, ':') 3427 || CHECK(parser->buffer, '?') || CHECK(parser->buffer, '[') 3428 || CHECK(parser->buffer, ']') || CHECK(parser->buffer, '{') 3429 || CHECK(parser->buffer, '}')))) 3604 3430 break; 3605 3431 … … 3650 3476 /* Is it the end? */ 3651 3477 3652 if (!(IS_BLANK(parser ) || IS_BREAK(parser)))3478 if (!(IS_BLANK(parser->buffer) || IS_BREAK(parser->buffer))) 3653 3479 break; 3654 3480 … … 3657 3483 if (!CACHE(parser, 1)) goto error; 3658 3484 3659 while (IS_BLANK(parser ) || IS_BREAK(parser))3485 while (IS_BLANK(parser->buffer) || IS_BREAK(parser->buffer)) 3660 3486 { 3661 if (IS_BLANK(parser ))3487 if (IS_BLANK(parser->buffer)) 3662 3488 { 3663 3489 /* Check for tab character that abuse intendation. */ 3664 3490 3665 if (leading_blanks && parser->mark.column < indent && IS_TAB(parser)) { 3491 if (leading_blanks && parser->mark.column < indent 3492 && IS_TAB(parser->buffer)) { 3666 3493 yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", 3667 3494 start_mark, "found a tab character that violate intendation");
Note: See TracChangeset
for help on using the changeset viewer.
