/* Generated by re2c 0.5 on Thu May 29 17:58:58 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 ( *fc == '\n' ) 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 ( *(++indent) == '\n' ) \ { \ 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 242 if ( YYLINEPTR != YYCURSOR ) { goto Document; } Header: YYTOKEN = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy0; yy1: ++YYCURSOR; yy0: if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; switch(yych){ case '\000': goto yy6; case '\n': goto yy8; case '#': goto yy4; case '-': goto yy2; default: goto yy10; } yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '-': goto yy15; default: goto yy3; } yy3: #line 283 { YYPOS(0); goto Document; } yy4: yych = *++YYCURSOR; yy5: #line 269 { eat_comments( parser ); goto Header; } yy6: yych = *++YYCURSOR; yy7: #line 273 { SyckLevel *lvl = CURRENT_LEVEL(); ENSURE_IEND(lvl, -1); return 0; } yy8: yych = *++YYCURSOR; goto yy12; yy9: #line 278 { int indt_len; GOBBLE_UP_INDENT( indt_len, YYTOKEN ); goto Header; } yy10: yych = *++YYCURSOR; goto yy3; yy11: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy12: switch(yych){ case '\n': goto yy11; case ' ': goto yy13; default: goto yy9; } yy13: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy14: switch(yych){ case '\n': case ' ': goto yy13; default: goto yy9; } yy15: yych = *++YYCURSOR; switch(yych){ case '-': goto yy17; default: goto yy16; } yy16: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy3; } yy17: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy21; case ' ': goto yy18; default: goto yy16; } yy18: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy19: switch(yych){ case ' ': goto yy18; default: goto yy20; } yy20: #line 255 { SyckLevel *lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_header ) { YYPOS(3); goto Directive; } else { ENSURE_IEND(lvl, -1); YYPOS(0); return 0; } } yy21: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy22: switch(yych){ case '\n': goto yy21; default: goto yy20; } } #line 287 Document: { SyckLevel *lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_header ) { lvl->status = syck_lvl_doc; } YYTOKEN = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy23; yy24: ++YYCURSOR; yy23: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy47; case '\n': goto yy25; case ' ': goto yy45; case '!': goto yy36; case '"': goto yy40; case '#': goto yy43; case '&': goto yy34; case '\'': goto yy38; case '*': goto yy35; case ',': case ':': goto yy31; case '-': case '?': goto yy33; case '>': case '|': goto yy42; case '[': case '{': goto yy27; case ']': case '}': goto yy29; default: goto yy49; } yy25: yych = *++YYCURSOR; goto yy77; yy26: #line 301 { // 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; } yy27: yych = *++YYCURSOR; yy28: #line 316 { ENSURE_IOPEN(lvl, 0, 1); lvl = CURRENT_LEVEL(); ADD_LEVEL(lvl->spaces + 1, syck_lvl_inline); return YYTOKEN[0]; } yy29: yych = *++YYCURSOR; yy30: #line 322 { POP_LEVEL(); return YYTOKEN[0]; } yy31: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy74; case ' ': goto yy71; default: goto yy32; } yy32: #line 380 { ENSURE_IOPEN(lvl, 0, 1); goto Plain; } yy33: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy69; case ' ': goto yy66; default: goto yy32; } yy34: 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 yy63; default: goto yy32; } yy35: 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 yy60; default: goto yy32; } yy36: yych = *++YYCURSOR; yy37: #line 354 { ENSURE_IOPEN(lvl, 0, 1); goto TransferMethod; } yy38: yych = *++YYCURSOR; yy39: #line 357 { ENSURE_IOPEN(lvl, 0, 1); goto SingleQuote; } yy40: yych = *++YYCURSOR; yy41: #line 360 { ENSURE_IOPEN(lvl, 0, 1); goto DoubleQuote; } yy42: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy58; case ' ': goto yy55; case '+': case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy52; default: goto yy32; } yy43: yych = *++YYCURSOR; yy44: #line 370 { eat_comments( parser ); goto Document; } yy45: yych = *++YYCURSOR; goto yy51; yy46: #line 374 { goto Document; } yy47: yych = *++YYCURSOR; yy48: #line 376 { ENSURE_IEND(lvl, -1); return 0; } yy49: yych = *++YYCURSOR; goto yy32; yy50: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy51: switch(yych){ case ' ': goto yy50; default: goto yy46; } yy52: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy53: switch(yych){ case '\n': goto yy58; case ' ': goto yy55; case '+': case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy52; default: goto yy54; } yy54: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy32; } yy55: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy56: switch(yych){ case ' ': goto yy55; default: goto yy57; } yy57: #line 363 { if ( *( YYCURSOR - 1 ) == '\n' ) { YYCURSOR--; } goto ScalarBlock; } yy58: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy59: switch(yych){ case '\n': goto yy58; default: goto yy57; } yy60: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy61: 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 yy60; default: goto yy62; } yy62: #line 349 { ENSURE_IOPEN(lvl, 0, 1); yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 ); return ALIAS; } yy63: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy64: 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 yy63; default: goto yy65; } yy65: #line 344 { ENSURE_IOPEN(lvl, 0, 1); yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 ); return ANCHOR; } yy66: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy67: switch(yych){ case ' ': goto yy66; default: goto yy68; } yy68: #line 330 { ENSURE_IOPEN(lvl, YYTOKEN - YYLINEPTR, 1); FORCE_NEXT_TOKEN(IOPEN); if ( *YYCURSOR == '\n' || *( YYCURSOR - 1 ) == '\n' ) { YYCURSOR--; ADD_LEVEL((YYTOKEN + 1) - YYLINEPTR, syck_lvl_doc); } else { ADD_LEVEL(YYCURSOR - YYLINEPTR, syck_lvl_doc); } return YYTOKEN[0]; } yy69: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy70: switch(yych){ case '\n': goto yy69; default: goto yy68; } yy71: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy72: switch(yych){ case ' ': goto yy71; default: goto yy73; } yy73: #line 326 { YYPOS(1); return YYTOKEN[0]; } yy74: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy75: switch(yych){ case '\n': goto yy74; default: goto yy73; } yy76: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy77: switch(yych){ case '\n': goto yy76; case ' ': goto yy78; default: goto yy26; } yy78: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy79: switch(yych){ case '\n': case ' ': goto yy78; default: goto yy26; } } #line 384 } Directive: { YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy80; yy81: ++YYCURSOR; yy80: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy82; case ' ': goto yy85; case '%': goto yy83; default: goto yy87; } yy82: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy84; } yy83: yyaccept = 0; yych = *(YYMARKER = ++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 yy90; default: goto yy84; } yy84: #line 397 { YYCURSOR = YYTOKTMP; return DOCSEP; } yy85: yych = *++YYCURSOR; goto yy89; yy86: #line 395 { goto Directive; } yy87: yych = *++YYCURSOR; goto yy84; yy88: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy89: switch(yych){ case ' ': goto yy88; default: goto yy86; } yy90: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy91: 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 yy90; case ':': goto yy92; default: goto yy82; } yy92: 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 yy93; default: goto yy82; } yy93: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy94: 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 yy93; default: goto yy95; } yy95: #line 393 { goto Directive; } } #line 400 } 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 yy96; yy97: ++YYCURSOR; yy96: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy107; case '\n': goto yy98; case ' ': goto yy105; case ',': goto yy104; case ':': goto yy100; case ']': case '}': goto yy102; default: goto yy109; } yy98: yych = *++YYCURSOR; goto yy122; yy99: #line 423 { 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 ( *YYTOKTMP++ == '\n' ) 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; } yy100: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy119; case ' ': goto yy116; default: goto yy101; } yy101: #line 474 { QUOTECATS(qstr, qcapa, qidx, YYTOKTMP, YYCURSOR - YYTOKTMP); goto Plain2; } yy102: yych = *++YYCURSOR; yy103: #line 457 { if ( plvl->status != syck_lvl_inline ) { YYCURSOR--; QUOTECATS(qstr, qcapa, qidx, YYTOKTMP, YYCURSOR - YYTOKTMP); goto Plain2; } RETURN_IMPLICIT(); } yy104: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy114; case ' ': goto yy112; default: goto yy101; } yy105: yych = *++YYCURSOR; switch(yych){ case '#': goto yy110; default: goto yy106; } yy106: #line 472 { goto Plain3; } yy107: yych = *++YYCURSOR; yy108: #line 470 { RETURN_IMPLICIT(); } yy109: yych = *++YYCURSOR; goto yy101; yy110: yych = *++YYCURSOR; yy111: #line 466 { eat_comments( parser ); RETURN_IMPLICIT(); } yy112: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy113: switch(yych){ case ' ': goto yy112; default: goto yy103; } yy114: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy115: switch(yych){ case '\n': goto yy114; default: goto yy103; } yy116: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy117: switch(yych){ case ' ': goto yy116; default: goto yy118; } yy118: #line 455 { RETURN_IMPLICIT(); } yy119: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy120: switch(yych){ case '\n': goto yy119; default: goto yy118; } yy121: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy122: switch(yych){ case '\n': goto yy121; case ' ': goto yy123; default: goto yy99; } yy123: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy124: switch(yych){ case '\n': case ' ': goto yy123; default: goto yy99; } } #line 478 } SingleQuote: { int qidx = 0; int qcapa = 100; char *qstr = S_ALLOC_N( char, qcapa ); SingleQuote2: YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy125; yy126: ++YYCURSOR; yy125: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy131; case '\n': goto yy127; case '\'': goto yy129; default: goto yy132; } yy127: yych = *++YYCURSOR; goto yy137; yy128: #line 492 { 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 ( *YYTOKTMP++ == '\n' ) 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; } yy129: yych = *++YYCURSOR; switch(yych){ case '\'': goto yy134; default: goto yy130; } yy130: #line 532 { 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; } yy131: yych = *++YYCURSOR; goto yy130; yy132: yych = *++YYCURSOR; yy133: #line 546 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto SingleQuote2; } yy134: yych = *++YYCURSOR; yy135: #line 528 { QUOTECAT(qstr, qcapa, qidx, '\''); goto SingleQuote2; } yy136: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy137: switch(yych){ case '\n': goto yy136; case ' ': goto yy138; default: goto yy128; } yy138: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy139: switch(yych){ case '\n': case ' ': goto yy138; default: goto yy128; } } #line 550 } 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 yy140; yy141: ++YYCURSOR; yy140: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy146; case '\n': goto yy142; case '"': goto yy148; case '\\': goto yy144; default: goto yy149; } yy142: yych = *++YYCURSOR; goto yy158; yy143: #line 568 { 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 ( *YYTOKTMP++ == '\n' ) 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; } yy144: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy153; case ' ': goto yy150; case '"': case '\\': case 'a': case 'b': case 'e': case 'f': case 'n': case 'r': case 't': case 'v': goto yy155; default: goto yy145; } yy145: #line 643 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto DoubleQuote2; } yy146: yych = *++YYCURSOR; yy147: #line 629 { 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; } yy148: yych = *++YYCURSOR; goto yy147; yy149: yych = *++YYCURSOR; goto yy145; yy150: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy151: switch(yych){ case '\n': goto yy153; case ' ': goto yy150; default: goto yy152; } yy152: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy145; } yy153: yych = *++YYCURSOR; yy154: #line 624 { keep_nl = 0; YYCURSOR--; goto DoubleQuote2; } yy155: yych = *++YYCURSOR; yy156: #line 608 { 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; } yy157: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy158: switch(yych){ case '\n': goto yy157; case ' ': goto yy159; default: goto yy143; } yy159: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy160: switch(yych){ case '\n': case ' ': goto yy159; default: goto yy143; } } #line 647 } TransferMethod: { YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy161; yy162: ++YYCURSOR; yy161: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy163; case '\n': goto yy166; case ' ': goto yy164; default: goto yy167; } yy163:yy164: yych = *++YYCURSOR; goto yy172; yy165: #line 656 { 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; } yy166: yych = *++YYCURSOR; goto yy170; yy167: yych = *++YYCURSOR; yy168: #line 702 { goto TransferMethod; } yy169: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy170: switch(yych){ case '\n': goto yy169; default: goto yy165; } yy171: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy172: switch(yych){ case ' ': goto yy171; default: goto yy165; } } #line 704 } 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 yy173; yy174: ++YYCURSOR; yy173: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy177; case '\n': goto yy175; default: goto yy179; } yy175: yych = *++YYCURSOR; goto yy182; yy176: #line 752 { char *pacer; char *tok = YYTOKTMP; int indt_len = 0, nl_count = 0, fold_nl = 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; YYCURSOR -= lastIndent; goto ScalarBlock2; } lvl = CURRENT_LEVEL(); 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 ( *pacer++ == '\n' ) nl_count++; } if ( fold_nl == 1 ) { nl_count--; } if ( nl_count < 1 ) { 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; } yy177: yych = *++YYCURSOR; yy178: #line 821 { YYCURSOR--; POP_LEVEL(); RETURN_BLOCK(); } yy179: yych = *++YYCURSOR; yy180: #line 826 { QUOTECAT(qstr, qcapa, qidx, *YYTOKTMP); goto ScalarBlock2; } yy181: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy182: switch(yych){ case '\n': goto yy181; case ' ': goto yy183; default: goto yy176; } yy183: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy184: switch(yych){ case '\n': case ' ': goto yy183; default: goto yy176; } } #line 831 } } void eat_comments( SyckParser *parser ) { char *tok; Comment: { tok = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy185; yy186: ++YYCURSOR; yy185: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy187; case '\n': goto yy189; default: goto yy190; } yy187: yych = *++YYCURSOR; yy188: #line 847 { SyckLevel *lvl = CURRENT_LEVEL(); YYCURSOR = tok; return; } yy189: yych = *++YYCURSOR; goto yy193; yy190: yych = *++YYCURSOR; yy191: #line 852 { goto Comment; } yy192: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy193: switch(yych){ case '\n': goto yy192; default: goto yy188; } } #line 855 } } 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); }