/* Generated by re2c 0.5 on Mon Jun 9 18:21:18 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 yy6; case '\n': goto yy8; case '\r': goto yy10; case '#': goto yy4; case '-': goto yy2; default: goto yy11; } yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '-': goto yy16; default: goto yy3; } yy3: #line 287 { YYPOS(0); goto Document; } yy4: yych = *++YYCURSOR; yy5: #line 272 { eat_comments( parser ); goto Header; } yy6: yych = *++YYCURSOR; yy7: #line 276 { SyckLevel *lvl = CURRENT_LEVEL(); ENSURE_IEND(lvl, -1); YYPOS(0); return 0; } yy8: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); goto yy13; yy9: #line 282 { int indt_len; GOBBLE_UP_INDENT( indt_len, YYTOKEN ); goto Header; } yy10: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy12; default: goto yy3; } yy11: yych = *++YYCURSOR; goto yy3; yy12: yyaccept = 1; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy13: switch(yych){ case '\n': case ' ': goto yy12; case '\r': goto yy14; default: goto yy9; } yy14: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy12; default: goto yy15; } yy15: YYCURSOR = YYMARKER; switch(yyaccept){ case 1: goto yy9; case 0: goto yy3; } yy16: yych = *++YYCURSOR; switch(yych){ case '-': goto yy17; default: goto yy15; } yy17: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy18; case '\r': goto yy22; case ' ': goto yy20; default: goto yy15; } yy18: yych = *++YYCURSOR; yy19: #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; } } yy20: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy21: switch(yych){ case ' ': goto yy20; default: goto yy19; } yy22: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy18; default: goto yy15; } } #line 291 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) < 3) YYFILL(3); yych = *YYCURSOR; switch(yych){ case '\000': goto yy48; case '\n': goto yy25; case '\r': goto yy27; case ' ': goto yy46; case '!': goto yy37; case '"': goto yy41; case '#': goto yy44; case '&': goto yy35; case '\'': goto yy39; case '*': goto yy36; case ',': case ':': goto yy33; case '-': case '?': goto yy34; case '>': case '|': goto yy43; case '[': case '{': goto yy29; case ']': case '}': goto yy31; default: goto yy50; } yy25: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy78; yy26: #line 305 { // 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; switch(yych){ case '\n': goto yy77; default: goto yy28; } yy28: #line 385 { ENSURE_IOPEN(lvl, 0, 1); goto Plain; } yy29: yych = *++YYCURSOR; yy30: #line 320 { ENSURE_IOPEN(lvl, 0, 1); lvl = CURRENT_LEVEL(); ADD_LEVEL(lvl->spaces + 1, syck_lvl_inline); return YYTOKEN[0]; } yy31: yych = *++YYCURSOR; yy32: #line 326 { POP_LEVEL(); return YYTOKEN[0]; } yy33: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy72; case '\r': goto yy76; case ' ': goto yy74; default: goto yy28; } yy34: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy67; case '\r': goto yy71; case ' ': goto yy69; default: goto yy28; } 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 yy64; default: goto yy28; } yy36: 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 yy61; default: goto yy28; } yy37: yych = *++YYCURSOR; yy38: #line 358 { ENSURE_IOPEN(lvl, 0, 1); goto TransferMethod; } yy39: yych = *++YYCURSOR; yy40: #line 361 { ENSURE_IOPEN(lvl, 0, 1); goto SingleQuote; } yy41: yych = *++YYCURSOR; yy42: #line 364 { ENSURE_IOPEN(lvl, 0, 1); goto DoubleQuote; } yy43: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy56; case '\r': goto yy60; case ' ': goto yy58; case '+': case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy53; default: goto yy28; } yy44: yych = *++YYCURSOR; yy45: #line 374 { eat_comments( parser ); goto Document; } yy46: yych = *++YYCURSOR; goto yy52; yy47: #line 378 { goto Document; } yy48: yych = *++YYCURSOR; yy49: #line 380 { ENSURE_IEND(lvl, -1); YYPOS(0); return 0; } yy50: yych = *++YYCURSOR; goto yy28; yy51: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy52: switch(yych){ case ' ': goto yy51; default: goto yy47; } yy53: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy54: switch(yych){ case '\n': goto yy56; case '\r': goto yy60; case ' ': goto yy58; case '+': case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy53; default: goto yy55; } yy55: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy26; case 1: goto yy28; } yy56: yych = *++YYCURSOR; yy57: #line 367 { if ( is_newline( YYCURSOR - 1 ) ) { YYCURSOR--; } goto ScalarBlock; } yy58: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy59: switch(yych){ case ' ': goto yy58; default: goto yy57; } yy60: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy56; default: goto yy55; } yy61: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy62: 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 yy61; default: goto yy63; } yy63: #line 353 { ENSURE_IOPEN(lvl, 0, 1); yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 ); return ALIAS; } yy64: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy65: 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 yy64; default: goto yy66; } yy66: #line 348 { ENSURE_IOPEN(lvl, 0, 1); yylval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 ); return ANCHOR; } yy67: yych = *++YYCURSOR; yy68: #line 334 { 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]; } yy69: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy70: switch(yych){ case ' ': goto yy69; default: goto yy68; } yy71: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy67; default: goto yy55; } yy72: yych = *++YYCURSOR; yy73: #line 330 { YYPOS(1); return YYTOKEN[0]; } yy74: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy75: switch(yych){ case ' ': goto yy74; default: goto yy73; } yy76: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy72; default: goto yy55; } yy77: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy78: switch(yych){ case '\n': case ' ': goto yy77; case '\r': goto yy79; default: goto yy26; } yy79: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy77; default: goto yy55; } } #line 389 } 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 '/': 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 yy90; default: goto yy84; } yy84: #line 402 { YYCURSOR = YYTOKTMP; return DOCSEP; } yy85: yych = *++YYCURSOR; goto yy89; yy86: #line 400 { 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 '/': 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 yy90; case ':': goto yy92; default: goto yy82; } yy92: 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 yy93; default: goto yy82; } yy93: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy94: 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 yy93; default: goto yy95; } yy95: #line 398 { goto Directive; } } #line 405 } 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) < 3) YYFILL(3); yych = *YYCURSOR; switch(yych){ case '\000': goto yy108; case '\n': goto yy98; case '\r': goto yy100; case ' ': goto yy106; case ',': goto yy105; case ':': goto yy102; case ']': case '}': goto yy103; default: goto yy110; } yy98: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy124; yy99: #line 428 { 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; } yy100: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy123; default: goto yy101; } yy101: #line 482 { QUOTECATS(qstr, qcapa, qidx, YYTOKTMP, YYCURSOR - YYTOKTMP); goto Plain2; } yy102: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy118; case '\r': goto yy122; case ' ': goto yy120; default: goto yy101; } yy103: yych = *++YYCURSOR; yy104: #line 462 { 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(); } yy105: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy113; case '\r': goto yy116; case ' ': goto yy114; default: goto yy101; } yy106: yych = *++YYCURSOR; switch(yych){ case '#': goto yy111; default: goto yy107; } yy107: #line 480 { goto Plain3; } yy108: yych = *++YYCURSOR; yy109: #line 478 { RETURN_IMPLICIT(); } yy110: yych = *++YYCURSOR; goto yy101; yy111: yych = *++YYCURSOR; yy112: #line 474 { eat_comments( parser ); RETURN_IMPLICIT(); } yy113: yych = *++YYCURSOR; goto yy104; yy114: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy115: switch(yych){ case ' ': goto yy114; default: goto yy104; } yy116: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy113; default: goto yy117; } yy117: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy99; case 1: goto yy101; } yy118: yych = *++YYCURSOR; yy119: #line 460 { RETURN_IMPLICIT(); } yy120: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy121: switch(yych){ case ' ': goto yy120; default: goto yy119; } yy122: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy118; default: goto yy117; } yy123: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy124: switch(yych){ case '\n': case ' ': goto yy123; case '\r': goto yy125; default: goto yy99; } yy125: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy123; default: goto yy117; } } #line 486 } SingleQuote: { int qidx = 0; int qcapa = 100; char *qstr = S_ALLOC_N( char, qcapa ); SingleQuote2: YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy126; yy127: ++YYCURSOR; yy126: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy134; case '\n': goto yy128; case '\r': goto yy130; case '\'': goto yy132; default: goto yy135; } yy128: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy139; yy129: #line 500 { 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; } yy130: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy138; default: goto yy131; } yy131: #line 554 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto SingleQuote2; } yy132: yych = *++YYCURSOR; switch(yych){ case '\'': goto yy136; default: goto yy133; } yy133: #line 540 { 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; } yy134: yych = *++YYCURSOR; goto yy133; yy135: yych = *++YYCURSOR; goto yy131; yy136: yych = *++YYCURSOR; yy137: #line 536 { QUOTECAT(qstr, qcapa, qidx, '\''); goto SingleQuote2; } yy138: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy139: switch(yych){ case '\n': case ' ': goto yy138; case '\r': goto yy140; default: goto yy129; } yy140: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy138; default: goto yy141; } yy141: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy129; } } #line 558 } 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 yy142; yy143: ++YYCURSOR; yy142: if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; switch(yych){ case '\000': goto yy149; case '\n': goto yy144; case '\r': goto yy146; case '"': goto yy151; case '\\': goto yy148; default: goto yy152; } yy144: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy166; yy145: #line 576 { 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; } yy146: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy165; default: goto yy147; } yy147: #line 660 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto DoubleQuote2; } yy148: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy156; case '\r': goto yy158; case ' ': goto yy153; case '"': case '\\': case 'a': case 'b': case 'e': case 'f': case 'n': case 'r': case 't': case 'v': goto yy160; case 'x': goto yy159; default: goto yy147; } yy149: yych = *++YYCURSOR; yy150: #line 646 { 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; } yy151: yych = *++YYCURSOR; goto yy150; yy152: yych = *++YYCURSOR; goto yy147; yy153: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy154: switch(yych){ case '\n': goto yy156; case '\r': goto yy158; case ' ': goto yy153; default: goto yy155; } yy155: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy145; case 1: goto yy147; } yy156: yych = *++YYCURSOR; yy157: #line 641 { keep_nl = 0; YYCURSOR--; goto DoubleQuote2; } yy158: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy156; default: goto yy155; } yy159: 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 yy162; default: goto yy155; } yy160: yych = *++YYCURSOR; yy161: #line 616 { 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; } yy162: 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 yy163; default: goto yy155; } yy163: yych = *++YYCURSOR; yy164: #line 632 { 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; } yy165: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy166: switch(yych){ case '\n': case ' ': goto yy165; case '\r': goto yy167; default: goto yy145; } yy167: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy165; default: goto yy155; } } #line 664 } TransferMethod: { YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy168; yy169: ++YYCURSOR; yy168: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy170; case '\n': goto yy171; case '\r': goto yy174; case ' ': goto yy173; default: goto yy176; } yy170:yy171: yych = *++YYCURSOR; yy172: #line 673 { 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; } yy173: yych = *++YYCURSOR; goto yy179; yy174: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy177; default: goto yy175; } yy175: #line 719 { goto TransferMethod; } yy176: yych = *++YYCURSOR; goto yy175; yy177: yych = *++YYCURSOR; goto yy172; yy178: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy179: switch(yych){ case ' ': goto yy178; default: goto yy172; } } #line 721 } 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 yy180; yy181: ++YYCURSOR; yy180: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy188; case '\n': goto yy182; case '\r': goto yy184; case '#': goto yy186; default: goto yy190; } yy182: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy192; yy183: #line 769 { 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; } yy184: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy191; default: goto yy185; } yy185: #line 855 { QUOTECAT(qstr, qcapa, qidx, *YYTOKTMP); goto ScalarBlock2; } yy186: yych = *++YYCURSOR; yy187: #line 836 { lvl = CURRENT_LEVEL(); if ( lvl->status != syck_lvl_block ) { eat_comments( parser ); YYTOKTMP = YYCURSOR; } else { QUOTECAT(qstr, qcapa, qidx, *YYTOKTMP); } goto ScalarBlock2; } yy188: yych = *++YYCURSOR; yy189: #line 850 { YYCURSOR--; POP_LEVEL(); RETURN_BLOCK(); } yy190: yych = *++YYCURSOR; goto yy185; yy191: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy192: switch(yych){ case '\n': case ' ': goto yy191; case '\r': goto yy193; default: goto yy183; } yy193: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy191; default: goto yy194; } yy194: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy183; } } #line 860 } } void eat_comments( SyckParser *parser ) { char *tok; Comment: { tok = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy195; yy196: ++YYCURSOR; yy195: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy197; case '\n': goto yy199; case '\r': goto yy200; default: goto yy202; } yy197: yych = *++YYCURSOR; yy198: #line 876 { SyckLevel *lvl = CURRENT_LEVEL(); YYCURSOR = tok; return; } yy199: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy204; yy200: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy203; default: goto yy201; } yy201: #line 881 { goto Comment; } yy202: yych = *++YYCURSOR; goto yy201; yy203: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy204: switch(yych){ case '\n': goto yy203; case '\r': goto yy205; default: goto yy198; } yy205: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy203; default: goto yy206; } yy206: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy198; } } #line 884 } } 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); }