/* Generated by re2c 0.5 on Sun Jun 15 16:14:26 2003 */ #line 1 "token.re" /* * token.re * * $Author$ * $Date$ * * Copyright (C) 2003 why the lucky stiff */ #include "syck.h" #include "gram.h" /* * Allocate quoted strings in chunks */ #define QUOTELEN 1024 /* * They do my bidding... */ #define YYCTYPE char #define YYCURSOR parser->cursor #define YYMARKER parser->marker #define YYLIMIT parser->limit #define YYTOKEN parser->token #define YYTOKTMP parser->toktmp #define YYLINEPTR parser->lineptr #define YYLINECTPTR parser->linectptr #define YYLINE parser->linect #define YYFILL(n) syck_parser_read(parser) /* * Repositions the cursor at `n' offset from the token start. * Only works in `Header' and `Document' sections. */ #define YYPOS(n) YYCURSOR = YYTOKEN + n /* * Track line numbers */ #define NEWLINE(ptr) YYLINEPTR = ptr + 1; if ( YYLINEPTR > YYLINECTPTR ) { YYLINE++; YYLINECTPTR = YYLINEPTR; } /* * I like seeing the level operations as macros... */ #define ADD_LEVEL(len, status) syck_parser_add_level( parser, len, status ) #define POP_LEVEL() syck_parser_pop_level( parser ) #define CURRENT_LEVEL() syck_parser_current_level( parser ) /* * Force a token next time around yylex() */ #define FORCE_NEXT_TOKEN(tok) parser->force_token = tok; /* * Nice little macro to ensure we're IOPENed to the current level. * * Only use this macro in the "Document" section * */ #define ENSURE_IOPEN(last_lvl, to_len, reset) \ if ( last_lvl->spaces < to_len ) \ { \ if ( last_lvl->status == syck_lvl_inline ) \ { \ goto Document; \ } \ else \ { \ ADD_LEVEL( to_len, syck_lvl_doc ); \ if ( reset == 1 ) YYPOS(0); \ return IOPEN; \ } \ } /* * Nice little macro to ensure closure of levels. * * Only use this macro in the "Document" section * */ #define ENSURE_IEND(last_lvl, to_len) \ if ( last_lvl->spaces > to_len ) \ { \ syck_parser_pop_level( parser ); \ YYPOS(0); \ return IEND; \ } /* * Concatenates quoted string items and manages allocation * to the quoted string */ #define QUOTECAT(s, c, i, l) \ { \ if ( i + 1 >= c ) \ { \ c += QUOTELEN; \ S_REALLOC_N( s, char, c ); \ } \ s[i++] = l; \ s[i] = '\0'; \ } #define QUOTECATS(s, c, i, cs, cl) \ { \ while ( i + cl >= c ) \ { \ c += QUOTELEN; \ S_REALLOC_N( s, char, c ); \ } \ S_MEMCPY( s + i, cs, char, cl ); \ i += cl; \ s[i] = '\0'; \ } /* * Tags a plain scalar with a transfer method * * Use only in "Plain" section * */ #define RETURN_IMPLICIT() \ { \ SyckLevel *i_lvl = CURRENT_LEVEL(); \ SyckNode *n = syck_alloc_str(); \ YYCURSOR = YYTOKTMP; \ n->data.str->ptr = qstr; \ n->data.str->len = qidx; \ yylval->nodeData = n; \ if ( parser->implicit_typing == 1 ) \ { \ try_tag_implicit( yylval->nodeData, parser->taguri_expansion ); \ } \ return PLAIN; \ } /* * Keep or chomp block? * * Use only in "ScalarBlock" section * */ #define RETURN_BLOCK() \ { \ SyckNode *n = syck_alloc_str(); \ n->data.str->ptr = qstr; \ n->data.str->len = qidx; \ if ( qidx > 0 ) \ { \ if ( nlDoWhat != NL_KEEP ) \ { \ char *fc = n->data.str->ptr + n->data.str->len - 1; \ while ( is_newline( fc ) ) fc--; \ if ( nlDoWhat != NL_CHOMP ) \ fc += 1; \ n->data.str->len = fc - n->data.str->ptr + 1; \ } \ } \ yylval->nodeData = n; \ return BLOCK; \ } /* * Handles newlines, calculates indent */ #define GOBBLE_UP_INDENT( ict, start ) \ char *indent = start; \ NEWLINE(indent); \ while ( indent < YYCURSOR ) \ { \ if ( is_newline( ++indent ) ) \ { \ NEWLINE(indent); \ } \ } \ ict = 0; \ if ( *YYCURSOR == '\0' ) \ { \ ict = -1; \ start = YYCURSOR - 1; \ } \ else if ( *YYLINEPTR == ' ' ) \ { \ ict = YYCURSOR - YYLINEPTR; \ } /* * If an indent exists at the current level, back up. */ #define GET_TRUE_INDENT(indt_len) \ { \ SyckLevel *lvl_deep = CURRENT_LEVEL(); \ indt_len = lvl_deep->spaces; \ if ( indt_len == YYTOKEN - YYLINEPTR ) \ { \ SyckLevel *lvl_over; \ parser->lvl_idx--; \ lvl_over = CURRENT_LEVEL(); \ indt_len = lvl_over->spaces; \ parser->lvl_idx++; \ } \ } /* * Argjh! I hate globals! Here for yyerror() only! */ SyckParser *syck_parser_ptr = NULL; /* * Accessory funcs later in this file. */ void eat_comments( SyckParser * ); /* * My own re-entrant yylex() using re2c. * You really get used to the limited regexp. * It's really nice to not rely on backtracking and such. */ int yylex( YYSTYPE *yylval, SyckParser *parser ) { syck_parser_ptr = parser; if ( YYCURSOR == NULL ) { syck_parser_read( parser ); } if ( parser->force_token != 0 ) { int t = parser->force_token; parser->force_token = 0; return t; } #line 245 if ( YYLINEPTR != YYCURSOR ) { goto Document; } Header: YYTOKEN = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy0; yy1: ++YYCURSOR; yy0: if((YYLIMIT - YYCURSOR) < 5) YYFILL(5); yych = *YYCURSOR; switch(yych){ case '\000': goto yy7; case '\n': goto yy9; case '\r': goto yy11; case '#': goto yy5; case '-': goto yy2; case '.': goto yy4; default: goto yy12; } yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '-': goto yy24; default: goto yy3; } yy3: #line 301 { YYPOS(0); goto Document; } yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '.': goto yy17; default: goto yy3; } yy5: yych = *++YYCURSOR; yy6: #line 286 { eat_comments( parser ); goto Header; } yy7: yych = *++YYCURSOR; yy8: #line 290 { SyckLevel *lvl = CURRENT_LEVEL(); ENSURE_IEND(lvl, -1); YYPOS(0); return 0; } yy9: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); goto yy14; yy10: #line 296 { int indt_len; GOBBLE_UP_INDENT( indt_len, YYTOKEN ); goto Header; } yy11: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy13; default: goto yy3; } yy12: yych = *++YYCURSOR; goto yy3; yy13: yyaccept = 1; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy14: switch(yych){ case '\n': case ' ': goto yy13; case '\r': goto yy15; default: goto yy10; } yy15: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy13; default: goto yy16; } yy16: YYCURSOR = YYMARKER; switch(yyaccept){ case 1: goto yy10; case 0: goto yy3; } yy17: yych = *++YYCURSOR; switch(yych){ case '.': goto yy18; default: goto yy16; } yy18: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy19; case '\r': goto yy23; case ' ': goto yy21; default: goto yy16; } yy19: yych = *++YYCURSOR; yy20: #line 272 { SyckLevel *lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_header ) { goto Header; } else { ENSURE_IEND(lvl, -1); YYPOS(0); return 0; } return 0; } yy21: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy22: switch(yych){ case ' ': goto yy21; default: goto yy20; } yy23: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy19; default: goto yy16; } yy24: yych = *++YYCURSOR; switch(yych){ case '-': goto yy25; default: goto yy16; } yy25: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy26; case '\r': goto yy30; case ' ': goto yy28; default: goto yy16; } yy26: yych = *++YYCURSOR; yy27: #line 258 { SyckLevel *lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_header ) { YYPOS(3); goto Directive; } else { ENSURE_IEND(lvl, -1); YYPOS(0); return 0; } } yy28: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy29: switch(yych){ case ' ': goto yy28; default: goto yy27; } yy30: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy26; default: goto yy16; } } #line 305 Document: { SyckLevel *lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_header ) { lvl->status = syck_lvl_doc; } YYTOKEN = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy31; yy32: ++YYCURSOR; yy31: if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; switch(yych){ case '\000': goto yy56; case '\n': goto yy33; case '\r': goto yy35; case ' ': goto yy54; case '!': goto yy45; case '"': goto yy49; case '#': goto yy52; case '&': goto yy43; case '\'': goto yy47; case '*': goto yy44; case ',': case ':': goto yy41; case '-': case '?': goto yy42; case '>': case '|': goto yy51; case '[': case '{': goto yy37; case ']': case '}': goto yy39; default: goto yy58; } yy33: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy86; yy34: #line 319 { // Isolate spaces int indt_len; GOBBLE_UP_INDENT( indt_len, YYTOKEN ); lvl = CURRENT_LEVEL(); // Check for open indent ENSURE_IEND(lvl, indt_len); ENSURE_IOPEN(lvl, indt_len, 0); if ( indt_len == -1 ) { return 0; } return INDENT; } yy35: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy85; default: goto yy36; } yy36: #line 406 { ENSURE_IOPEN(lvl, 0, 1); goto Plain; } yy37: yych = *++YYCURSOR; yy38: #line 334 { ENSURE_IOPEN(lvl, 0, 1); lvl = CURRENT_LEVEL(); ADD_LEVEL(lvl->spaces + 1, syck_lvl_inline); return YYTOKEN[0]; } yy39: yych = *++YYCURSOR; yy40: #line 340 { POP_LEVEL(); return YYTOKEN[0]; } yy41: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy80; case '\r': goto yy84; case ' ': goto yy82; default: goto yy36; } yy42: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy75; case '\r': goto yy79; case ' ': goto yy77; default: goto yy36; } yy43: yych = *++YYCURSOR; switch(yych){ case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy72; default: goto yy36; } yy44: yych = *++YYCURSOR; switch(yych){ case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy69; default: goto yy36; } yy45: yych = *++YYCURSOR; yy46: #line 379 { ENSURE_IOPEN(lvl, 0, 1); goto TransferMethod; } yy47: yych = *++YYCURSOR; yy48: #line 382 { ENSURE_IOPEN(lvl, 0, 1); goto SingleQuote; } yy49: yych = *++YYCURSOR; yy50: #line 385 { ENSURE_IOPEN(lvl, 0, 1); goto DoubleQuote; } yy51: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy64; case '\r': goto yy68; case ' ': goto yy66; case '+': case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy61; default: goto yy36; } yy52: yych = *++YYCURSOR; yy53: #line 395 { eat_comments( parser ); goto Document; } yy54: yych = *++YYCURSOR; goto yy60; yy55: #line 399 { goto Document; } yy56: yych = *++YYCURSOR; yy57: #line 401 { ENSURE_IEND(lvl, -1); YYPOS(0); return 0; } yy58: yych = *++YYCURSOR; goto yy36; yy59: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy60: switch(yych){ case ' ': goto yy59; default: goto yy55; } yy61: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy62: switch(yych){ case '\n': goto yy64; case '\r': goto yy68; case ' ': goto yy66; case '+': case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy61; default: goto yy63; } yy63: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy34; case 1: goto yy36; } yy64: yych = *++YYCURSOR; yy65: #line 388 { if ( is_newline( YYCURSOR - 1 ) ) { YYCURSOR--; } goto ScalarBlock; } yy66: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy67: switch(yych){ case ' ': goto yy66; default: goto yy65; } yy68: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy64; default: goto yy63; } yy69: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy70: switch(yych){ case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy69; default: goto yy71; } yy71: #line 374 { ENSURE_IOPEN(lvl, 0, 1); yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 ); return ALIAS; } yy72: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy73: switch(yych){ case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy72; default: goto yy74; } yy74: #line 362 { ENSURE_IOPEN(lvl, 0, 1); yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 ); // // Remove previous anchors of the same name. Since the parser will likely // construct deeper nodes first, we want those nodes to be placed in the // queue for matching at a higher level of indentation. // syck_hdlr_remove_anchor(parser, yylval->name); return ANCHOR; } yy75: yych = *++YYCURSOR; yy76: #line 348 { ENSURE_IOPEN(lvl, YYTOKEN - YYLINEPTR, 1); FORCE_NEXT_TOKEN(IOPEN); if ( is_newline( YYCURSOR ) || is_newline( YYCURSOR - 1 ) ) { YYCURSOR--; ADD_LEVEL((YYTOKEN + 1) - YYLINEPTR, syck_lvl_doc); } else { ADD_LEVEL(YYCURSOR - YYLINEPTR, syck_lvl_doc); } return YYTOKEN[0]; } yy77: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy78: switch(yych){ case ' ': goto yy77; default: goto yy76; } yy79: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy75; default: goto yy63; } yy80: yych = *++YYCURSOR; yy81: #line 344 { YYPOS(1); return YYTOKEN[0]; } yy82: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy83: switch(yych){ case ' ': goto yy82; default: goto yy81; } yy84: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy80; default: goto yy63; } yy85: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy86: switch(yych){ case '\n': case ' ': goto yy85; case '\r': goto yy87; default: goto yy34; } yy87: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy85; default: goto yy63; } } #line 410 } Directive: { YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy88; yy89: ++YYCURSOR; yy88: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy90; case ' ': goto yy93; case '%': goto yy91; default: goto yy95; } yy90: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy92; } yy91: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy98; default: goto yy92; } yy92: #line 423 { YYCURSOR = YYTOKTMP; return DOCSEP; } yy93: yych = *++YYCURSOR; goto yy97; yy94: #line 421 { goto Directive; } yy95: yych = *++YYCURSOR; goto yy92; yy96: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy97: switch(yych){ case ' ': goto yy96; default: goto yy94; } yy98: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy99: switch(yych){ case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy98; case ':': goto yy100; default: goto yy90; } yy100: yych = *++YYCURSOR; switch(yych){ case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy101; default: goto yy90; } yy101: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy102: switch(yych){ case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy101; default: goto yy103; } yy103: #line 419 { goto Directive; } } #line 426 } Plain: { int qidx = 0; int qcapa = 100; char *qstr = S_ALLOC_N( char, qcapa ); SyckLevel *plvl; int parentIndent; YYCURSOR = YYTOKEN; plvl = CURRENT_LEVEL(); GET_TRUE_INDENT(parentIndent); Plain2: YYTOKTMP = YYCURSOR; Plain3: { YYCTYPE yych; unsigned int yyaccept; goto yy104; yy105: ++YYCURSOR; yy104: if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; switch(yych){ case '\000': goto yy116; case '\n': goto yy106; case '\r': goto yy108; case ' ': goto yy114; case ',': goto yy113; case ':': goto yy110; case ']': case '}': goto yy111; default: goto yy118; } yy106: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy132; yy107: #line 449 { int indt_len, nl_count = 0; SyckLevel *lvl; char *tok = YYTOKTMP; GOBBLE_UP_INDENT( indt_len, tok ); lvl = CURRENT_LEVEL(); if ( indt_len <= parentIndent ) { RETURN_IMPLICIT(); } while ( YYTOKTMP < YYCURSOR ) { if ( is_newline( YYTOKTMP++ ) ) nl_count++; } if ( nl_count <= 1 ) { QUOTECAT(qstr, qcapa, qidx, ' '); } else { int i; for ( i = 0; i < nl_count - 1; i++ ) { QUOTECAT(qstr, qcapa, qidx, '\n'); } } goto Plain2; } yy108: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy131; default: goto yy109; } yy109: #line 503 { QUOTECATS(qstr, qcapa, qidx, YYTOKTMP, YYCURSOR - YYTOKTMP); goto Plain2; } yy110: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy126; case '\r': goto yy130; case ' ': goto yy128; default: goto yy109; } yy111: yych = *++YYCURSOR; yy112: #line 483 { if ( plvl->status != syck_lvl_inline ) { if ( *(YYCURSOR - 1) == ' ' || is_newline( YYCURSOR - 1 ) ) { YYCURSOR--; } QUOTECATS(qstr, qcapa, qidx, YYTOKTMP, YYCURSOR - YYTOKTMP); goto Plain2; } RETURN_IMPLICIT(); } yy113: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy121; case '\r': goto yy124; case ' ': goto yy122; default: goto yy109; } yy114: yych = *++YYCURSOR; switch(yych){ case '#': goto yy119; default: goto yy115; } yy115: #line 501 { goto Plain3; } yy116: yych = *++YYCURSOR; yy117: #line 499 { RETURN_IMPLICIT(); } yy118: yych = *++YYCURSOR; goto yy109; yy119: yych = *++YYCURSOR; yy120: #line 495 { eat_comments( parser ); RETURN_IMPLICIT(); } yy121: yych = *++YYCURSOR; goto yy112; yy122: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy123: switch(yych){ case ' ': goto yy122; default: goto yy112; } yy124: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy121; default: goto yy125; } yy125: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy107; case 1: goto yy109; } yy126: yych = *++YYCURSOR; yy127: #line 481 { RETURN_IMPLICIT(); } yy128: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy129: switch(yych){ case ' ': goto yy128; default: goto yy127; } yy130: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy126; default: goto yy125; } yy131: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy132: switch(yych){ case '\n': case ' ': goto yy131; case '\r': goto yy133; default: goto yy107; } yy133: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy131; default: goto yy125; } } #line 507 } SingleQuote: { int qidx = 0; int qcapa = 100; char *qstr = S_ALLOC_N( char, qcapa ); SingleQuote2: YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy134; yy135: ++YYCURSOR; yy134: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy142; case '\n': goto yy136; case '\r': goto yy138; case '\'': goto yy140; default: goto yy143; } yy136: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy147; yy137: #line 521 { int indt_len; int nl_count = 0; SyckLevel *lvl; GOBBLE_UP_INDENT( indt_len, YYTOKTMP ); lvl = CURRENT_LEVEL(); if ( lvl->status != syck_lvl_str ) { ADD_LEVEL( indt_len, syck_lvl_str ); } else if ( indt_len < lvl->spaces ) { // Error! } while ( YYTOKTMP < YYCURSOR ) { if ( is_newline( YYTOKTMP++ ) ) nl_count++; } if ( nl_count <= 1 ) { QUOTECAT(qstr, qcapa, qidx, ' '); } else { int i; for ( i = 0; i < nl_count - 1; i++ ) { QUOTECAT(qstr, qcapa, qidx, '\n'); } } goto SingleQuote2; } yy138: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy146; default: goto yy139; } yy139: #line 575 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto SingleQuote2; } yy140: yych = *++YYCURSOR; switch(yych){ case '\'': goto yy144; default: goto yy141; } yy141: #line 561 { SyckLevel *lvl; SyckNode *n = syck_alloc_str(); lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_str ) { POP_LEVEL(); } n->data.str->ptr = qstr; n->data.str->len = qidx; yylval->nodeData = n; return PLAIN; } yy142: yych = *++YYCURSOR; goto yy141; yy143: yych = *++YYCURSOR; goto yy139; yy144: yych = *++YYCURSOR; yy145: #line 557 { QUOTECAT(qstr, qcapa, qidx, '\''); goto SingleQuote2; } yy146: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy147: switch(yych){ case '\n': case ' ': goto yy146; case '\r': goto yy148; default: goto yy137; } yy148: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy146; default: goto yy149; } yy149: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy137; } } #line 579 } DoubleQuote: { int keep_nl = 1; int qidx = 0; int qcapa = 100; char *qstr = S_ALLOC_N( char, qcapa ); DoubleQuote2: YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy150; yy151: ++YYCURSOR; yy150: if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; switch(yych){ case '\000': goto yy157; case '\n': goto yy152; case '\r': goto yy154; case '"': goto yy159; case '\\': goto yy156; default: goto yy160; } yy152: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy174; yy153: #line 597 { int indt_len; int nl_count = 0; SyckLevel *lvl; GOBBLE_UP_INDENT( indt_len, YYTOKTMP ); lvl = CURRENT_LEVEL(); if ( lvl->status != syck_lvl_str ) { ADD_LEVEL( indt_len, syck_lvl_str ); } else if ( indt_len < lvl->spaces ) { // Error! } if ( keep_nl == 1 ) { while ( YYTOKTMP < YYCURSOR ) { if ( is_newline( YYTOKTMP++ ) ) nl_count++; } if ( nl_count <= 1 ) { QUOTECAT(qstr, qcapa, qidx, ' '); } else { int i; for ( i = 0; i < nl_count - 1; i++ ) { QUOTECAT(qstr, qcapa, qidx, '\n'); } } } keep_nl = 1; goto DoubleQuote2; } yy154: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy173; default: goto yy155; } yy155: #line 681 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto DoubleQuote2; } yy156: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy164; case '\r': goto yy166; case ' ': goto yy161; case '"': case '\\': case 'a': case 'b': case 'e': case 'f': case 'n': case 'r': case 't': case 'v': goto yy168; case 'x': goto yy167; default: goto yy155; } yy157: yych = *++YYCURSOR; yy158: #line 667 { SyckLevel *lvl; SyckNode *n = syck_alloc_str(); lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_str ) { POP_LEVEL(); } n->data.str->ptr = qstr; n->data.str->len = qidx; yylval->nodeData = n; return PLAIN; } yy159: yych = *++YYCURSOR; goto yy158; yy160: yych = *++YYCURSOR; goto yy155; yy161: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy162: switch(yych){ case '\n': goto yy164; case '\r': goto yy166; case ' ': goto yy161; default: goto yy163; } yy163: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy153; case 1: goto yy155; } yy164: yych = *++YYCURSOR; yy165: #line 662 { keep_nl = 0; YYCURSOR--; goto DoubleQuote2; } yy166: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy164; default: goto yy163; } yy167: yych = *++YYCURSOR; switch(yych){ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': goto yy170; default: goto yy163; } yy168: yych = *++YYCURSOR; yy169: #line 637 { char ch = *( YYCURSOR - 1 ); switch ( ch ) { case 'a': ch = 7; break; case 'b': ch = '\010'; break; case 'e': ch = '\033'; break; case 'f': ch = '\014'; break; case 'n': ch = '\n'; break; case 'r': ch = '\015'; break; case 't': ch = '\t'; break; case 'v': ch = '\013'; break; } QUOTECAT(qstr, qcapa, qidx, ch); goto DoubleQuote2; } yy170: yych = *++YYCURSOR; switch(yych){ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': goto yy171; default: goto yy163; } yy171: yych = *++YYCURSOR; yy172: #line 653 { long ch; char *chr_text = syck_strndup( YYTOKTMP, 4 ); chr_text[0] = '0'; ch = strtol( chr_text, NULL, 16 ); free( chr_text ); QUOTECAT(qstr, qcapa, qidx, ch); goto DoubleQuote2; } yy173: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy174: switch(yych){ case '\n': case ' ': goto yy173; case '\r': goto yy175; default: goto yy153; } yy175: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy173; default: goto yy163; } } #line 685 } TransferMethod: { YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy176; yy177: ++YYCURSOR; yy176: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy178; case '\n': goto yy179; case '\r': goto yy182; case ' ': goto yy181; default: goto yy184; } yy178:yy179: yych = *++YYCURSOR; yy180: #line 694 { SyckLevel *lvl; YYCURSOR = YYTOKTMP; if ( YYCURSOR == YYTOKEN + 1 ) { return ITRANSFER; } lvl = CURRENT_LEVEL(); // // URL Prefixing // if ( *(YYTOKEN + 1) == '^' ) { yylval->name = S_ALLOC_N( char, ( YYCURSOR - YYTOKEN ) + strlen( lvl->domain ) ); yylval->name[0] = '\0'; strcat( yylval->name, lvl->domain ); strncat( yylval->name, YYTOKEN + 2, ( YYCURSOR - YYTOKEN ) - 2 ); } else { char *carat = YYTOKEN; while ( (++carat) < YYCURSOR ) { if ( *carat == '^' ) break; } if ( carat < YYCURSOR ) { free( lvl->domain ); lvl->domain = syck_strndup( YYTOKEN + 1, ( carat - YYTOKEN ) - 1 ); yylval->name = S_ALLOC_N( char, ( YYCURSOR - carat ) + strlen( lvl->domain ) ); yylval->name[0] = '\0'; strcat( yylval->name, lvl->domain ); strncat( yylval->name, carat + 1, ( YYCURSOR - carat ) - 1 ); } else { yylval->name = syck_strndup( YYTOKEN + 1, ( YYCURSOR - YYTOKEN ) - 1 ); } } return TRANSFER; } yy181: yych = *++YYCURSOR; goto yy187; yy182: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy185; default: goto yy183; } yy183: #line 740 { goto TransferMethod; } yy184: yych = *++YYCURSOR; goto yy183; yy185: yych = *++YYCURSOR; goto yy180; yy186: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy187: switch(yych){ case ' ': goto yy186; default: goto yy180; } } #line 742 } ScalarBlock: { int keep_nl = 1; int qidx = 0; int qcapa = 100; char *qstr = S_ALLOC_N( char, qcapa ); int blockType = 0; int nlDoWhat = 0; int lastIndent = 0; int forceIndent = -1; char *yyt = YYTOKEN; SyckLevel *lvl = CURRENT_LEVEL(); int parentIndent; GET_TRUE_INDENT(parentIndent); switch ( *yyt ) { case '|': blockType = BLOCK_LIT; break; case '>': blockType = BLOCK_FOLD; break; } while ( ++yyt <= YYCURSOR ) { if ( *yyt == '-' ) { nlDoWhat = NL_CHOMP; } else if ( *yyt == '+' ) { nlDoWhat = NL_KEEP; } else if ( isdigit( *yyt ) ) { forceIndent = strtol( yyt, NULL, 10 ) + parentIndent; } } qstr[0] = '\0'; YYTOKEN = YYCURSOR; ScalarBlock2: YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy188; yy189: ++YYCURSOR; yy188: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy196; case '\n': goto yy190; case '\r': goto yy192; case '#': goto yy194; default: goto yy198; } yy190: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy200; yy191: #line 790 { char *pacer; char *tok = YYTOKTMP; int indt_len = 0, nl_count = 0, fold_nl = 0, nl_begin = 0; GOBBLE_UP_INDENT( indt_len, tok ); lvl = CURRENT_LEVEL(); if ( indt_len > parentIndent && lvl->status != syck_lvl_block ) { int new_spaces = forceIndent > 0 ? forceIndent : indt_len; ADD_LEVEL( new_spaces, syck_lvl_block ); lastIndent = indt_len - new_spaces; nl_begin = 1; lvl = CURRENT_LEVEL(); } else if ( lvl->status != syck_lvl_block ) { YYCURSOR = YYTOKTMP; RETURN_BLOCK(); } // // Fold only in the event of two lines being on the leftmost // indentation. // if ( blockType == BLOCK_FOLD && lastIndent == 0 && ( indt_len - lvl->spaces ) == 0 ) { fold_nl = 1; } pacer = YYTOKTMP; while ( pacer < YYCURSOR ) { if ( is_newline( pacer++ ) ) nl_count++; } if ( fold_nl == 1 || nl_begin == 1 ) { nl_count--; } if ( nl_count < 1 && nl_begin == 0 ) { QUOTECAT(qstr, qcapa, qidx, ' '); } else { int i; for ( i = 0; i < nl_count; i++ ) { QUOTECAT(qstr, qcapa, qidx, '\n'); } } lastIndent = indt_len - lvl->spaces; YYCURSOR -= lastIndent; if ( indt_len < lvl->spaces ) { POP_LEVEL(); YYCURSOR = YYTOKTMP; RETURN_BLOCK(); } goto ScalarBlock2; } yy192: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy199; default: goto yy193; } yy193: #line 876 { QUOTECAT(qstr, qcapa, qidx, *YYTOKTMP); goto ScalarBlock2; } yy194: yych = *++YYCURSOR; yy195: #line 857 { lvl = CURRENT_LEVEL(); if ( lvl->status != syck_lvl_block ) { eat_comments( parser ); YYTOKTMP = YYCURSOR; } else { QUOTECAT(qstr, qcapa, qidx, *YYTOKTMP); } goto ScalarBlock2; } yy196: yych = *++YYCURSOR; yy197: #line 871 { YYCURSOR--; POP_LEVEL(); RETURN_BLOCK(); } yy198: yych = *++YYCURSOR; goto yy193; yy199: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy200: switch(yych){ case '\n': case ' ': goto yy199; case '\r': goto yy201; default: goto yy191; } yy201: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy199; default: goto yy202; } yy202: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy191; } } #line 881 } } void eat_comments( SyckParser *parser ) { char *tok; Comment: { tok = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy203; yy204: ++YYCURSOR; yy203: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy205; case '\n': goto yy207; case '\r': goto yy208; default: goto yy210; } yy205: yych = *++YYCURSOR; yy206: #line 897 { SyckLevel *lvl = CURRENT_LEVEL(); YYCURSOR = tok; return; } yy207: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy212; yy208: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy211; default: goto yy209; } yy209: #line 902 { goto Comment; } yy210: yych = *++YYCURSOR; goto yy209; yy211: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy212: switch(yych){ case '\n': goto yy211; case '\r': goto yy213; default: goto yy206; } yy213: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy211; default: goto yy214; } yy214: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy206; } } #line 905 } } int is_newline( char *ptr ) { if ( *ptr == '\n' ) return 1; if ( *ptr == '\r' && *( ptr + 1 ) == '\n' ) return 1; return 0; } int yywrap() { return 1; } void yyerror( char *msg ) { if ( syck_parser_ptr->error_handler == NULL ) syck_parser_ptr->error_handler = syck_default_error_handler; syck_parser_ptr->root = syck_parser_ptr->root_on_error; (syck_parser_ptr->error_handler)(syck_parser_ptr, msg); }