/* Generated by re2c 0.5 on Wed Sep 3 12:48:43 2003 */ #line 1 "token.re" /* * token.re * * $Author$ * $Date$ * * Copyright (C) 2003 why the lucky stiff */ #include "syck.h" #include "ruby.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 sycklex() */ #define FORCE_NEXT_TOKEN(tok) parser->force_token = tok; /* * Nice little macro to ensure we're YAML_IOPENed to the current level. * * Only use this macro in the "Document" section * */ #define ENSURE_YAML_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 YAML_IOPEN; \ } \ } /* * Nice little macro to ensure closure of levels. * * Only use this macro in the "Document" section * */ #define ENSURE_YAML_IEND(last_lvl, to_len) \ if ( last_lvl->spaces > to_len ) \ { \ syck_parser_pop_level( parser ); \ YYPOS(0); \ return YAML_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() \ { \ SyckNode *n = syck_alloc_str(); \ YYCURSOR = YYTOKTMP; \ n->data.str->ptr = qstr; \ n->data.str->len = qidx; \ sycklval->nodeData = n; \ if ( parser->implicit_typing == 1 ) \ { \ try_tag_implicit( sycklval->nodeData, parser->taguri_expansion ); \ } \ return YAML_PLAIN; \ } /* * Keep or chomp block? * * Use only in "ScalarBlock" section * */ #define RETURN_YAML_BLOCK() \ { \ SyckNode *n = syck_alloc_str(); \ n->type_id = syck_strndup( "str", 3 ); \ 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; \ } \ } \ sycklval->nodeData = n; \ return YAML_BLOCK; \ } /* * Handles newlines, calculates indent */ #define GOBBLE_UP_YAML_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_YAML_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 syckerror() only! */ SyckParser *syck_parser_ptr = NULL; /* * Accessory funcs later in this file. */ void eat_comments( SyckParser * ); int is_newline( char *ptr ); int yywrap(); /* * My own re-entrant sycklex() using re2c. * You really get used to the limited regexp. * It's really nice to not rely on backtracking and such. */ int sycklex( YYSTYPE *sycklval, SyckParser *parser ) { int doc_level = 0; 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 248 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 yy12; case '#': goto yy5; case '-': goto yy2; case '.': goto yy4; default: goto yy14; } yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '-': goto yy28; default: goto yy3; } yy3: #line 307 { YYPOS(0); goto Document; } yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '.': goto yy21; default: goto yy3; } yy5: yych = *++YYCURSOR; yy6: #line 289 { eat_comments( parser ); goto Header; } yy7: yych = *++YYCURSOR; yy8: #line 293 { SyckLevel *lvl = CURRENT_LEVEL(); ENSURE_YAML_IEND(lvl, -1); YYPOS(0); return 0; } yy9: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); goto yy18; yy10: #line 299 { GOBBLE_UP_YAML_INDENT( doc_level, YYTOKEN ); goto Header; } yy11: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy17; default: goto yy3; } yy12: yych = *++YYCURSOR; goto yy16; yy13: #line 303 { doc_level = YYCURSOR - YYLINEPTR; goto Header; } yy14: yych = *++YYCURSOR; goto yy3; yy15: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy16: switch(yych){ case ' ': goto yy15; default: goto yy13; } yy17: yyaccept = 1; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy18: switch(yych){ case '\n': case ' ': goto yy17; case '\r': goto yy19; default: goto yy10; } yy19: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy17; default: goto yy20; } yy20: YYCURSOR = YYMARKER; switch(yyaccept){ case 1: goto yy10; case 0: goto yy3; } yy21: yych = *++YYCURSOR; switch(yych){ case '.': goto yy22; default: goto yy20; } yy22: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy23; case '\r': goto yy27; case ' ': goto yy25; default: goto yy20; } yy23: yych = *++YYCURSOR; yy24: #line 275 { SyckLevel *lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_header ) { goto Header; } else { ENSURE_YAML_IEND(lvl, -1); YYPOS(0); return 0; } return 0; } yy25: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy26: switch(yych){ case ' ': goto yy25; default: goto yy24; } yy27: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy23; default: goto yy20; } yy28: yych = *++YYCURSOR; switch(yych){ case '-': goto yy29; default: goto yy20; } yy29: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy30; case '\r': goto yy34; case ' ': goto yy32; default: goto yy20; } yy30: yych = *++YYCURSOR; yy31: #line 261 { SyckLevel *lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_header ) { YYPOS(3); goto Directive; } else { ENSURE_YAML_IEND(lvl, -1); YYPOS(0); return 0; } } yy32: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy33: switch(yych){ case ' ': goto yy32; default: goto yy31; } yy34: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy30; default: goto yy20; } } #line 311 Document: { SyckLevel *lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_header ) { lvl->status = syck_lvl_doc; } YYTOKEN = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy35; yy36: ++YYCURSOR; yy35: if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; switch(yych){ case '\000': goto yy60; case '\n': goto yy37; case '\r': goto yy39; case ' ': goto yy58; case '!': goto yy49; case '"': goto yy53; case '#': goto yy56; case '&': goto yy47; case '\'': goto yy51; case '*': goto yy48; case ',': case ':': goto yy45; case '-': case '?': goto yy46; case '>': case '|': goto yy55; case '[': case '{': goto yy41; case ']': case '}': goto yy43; default: goto yy62; } yy37: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy90; yy38: #line 325 { /* Isolate spaces */ int indt_len; GOBBLE_UP_YAML_INDENT( indt_len, YYTOKEN ); lvl = CURRENT_LEVEL(); doc_level = 0; /* Check for open indent */ ENSURE_YAML_IEND(lvl, indt_len); ENSURE_YAML_IOPEN(lvl, indt_len, 0); if ( indt_len == -1 ) { return 0; } return YAML_INDENT; } yy39: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy89; default: goto yy40; } yy40: #line 413 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); goto Plain; } yy41: yych = *++YYCURSOR; yy42: #line 341 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); lvl = CURRENT_LEVEL(); ADD_LEVEL(lvl->spaces + 1, syck_lvl_inline); return YYTOKEN[0]; } yy43: yych = *++YYCURSOR; yy44: #line 347 { POP_LEVEL(); return YYTOKEN[0]; } yy45: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy84; case '\r': goto yy88; case ' ': goto yy86; default: goto yy40; } yy46: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy79; case '\r': goto yy83; case ' ': goto yy81; default: goto yy40; } yy47: 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 yy76; default: goto yy40; } yy48: 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 yy73; default: goto yy40; } yy49: yych = *++YYCURSOR; yy50: #line 386 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); goto TransferMethod; } yy51: yych = *++YYCURSOR; yy52: #line 389 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); goto SingleQuote; } yy53: yych = *++YYCURSOR; yy54: #line 392 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); goto DoubleQuote; } yy55: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy68; case '\r': goto yy72; case ' ': goto yy70; case '+': case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy65; default: goto yy40; } yy56: yych = *++YYCURSOR; yy57: #line 402 { eat_comments( parser ); goto Document; } yy58: yych = *++YYCURSOR; goto yy64; yy59: #line 406 { goto Document; } yy60: yych = *++YYCURSOR; yy61: #line 408 { ENSURE_YAML_IEND(lvl, -1); YYPOS(0); return 0; } yy62: yych = *++YYCURSOR; goto yy40; yy63: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy64: switch(yych){ case ' ': goto yy63; default: goto yy59; } yy65: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy66: switch(yych){ case '\n': goto yy68; case '\r': goto yy72; case ' ': goto yy70; case '+': case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy65; default: goto yy67; } yy67: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy38; case 1: goto yy40; } yy68: yych = *++YYCURSOR; yy69: #line 395 { if ( is_newline( YYCURSOR - 1 ) ) { YYCURSOR--; } goto ScalarBlock; } yy70: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy71: switch(yych){ case ' ': goto yy70; default: goto yy69; } yy72: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy68; default: goto yy67; } yy73: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy74: 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 yy73; default: goto yy75; } yy75: #line 381 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); sycklval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 ); return YAML_ALIAS; } yy76: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy77: 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 yy76; default: goto yy78; } yy78: #line 369 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); sycklval->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, sycklval->name); return YAML_ANCHOR; } yy79: yych = *++YYCURSOR; yy80: #line 355 { ENSURE_YAML_IOPEN(lvl, YYTOKEN - YYLINEPTR, 1); FORCE_NEXT_TOKEN(YAML_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]; } yy81: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy82: switch(yych){ case ' ': goto yy81; default: goto yy80; } yy83: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy79; default: goto yy67; } yy84: yych = *++YYCURSOR; yy85: #line 351 { YYPOS(1); return YYTOKEN[0]; } yy86: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy87: switch(yych){ case ' ': goto yy86; default: goto yy85; } yy88: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy84; default: goto yy67; } yy89: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy90: switch(yych){ case '\n': case ' ': goto yy89; case '\r': goto yy91; default: goto yy38; } yy91: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy89; default: goto yy67; } } #line 417 } Directive: { YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy92; yy93: ++YYCURSOR; yy92: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy94; case ' ': goto yy97; case '%': goto yy95; default: goto yy99; } yy94: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy96; } yy95: 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 yy102; default: goto yy96; } yy96: #line 430 { YYCURSOR = YYTOKTMP; return YAML_DOCSEP; } yy97: yych = *++YYCURSOR; goto yy101; yy98: #line 428 { goto Directive; } yy99: yych = *++YYCURSOR; goto yy96; yy100: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy101: switch(yych){ case ' ': goto yy100; default: goto yy98; } yy102: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy103: 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 yy102; case ':': goto yy104; default: goto yy94; } yy104: 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 yy105; default: goto yy94; } yy105: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy106: 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 yy105; default: goto yy107; } yy107: #line 426 { goto Directive; } } #line 433 } 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_YAML_INDENT(parentIndent); Plain2: YYTOKTMP = YYCURSOR; Plain3: { YYCTYPE yych; unsigned int yyaccept; goto yy108; yy109: ++YYCURSOR; yy108: if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; switch(yych){ case '\000': goto yy120; case '\n': goto yy110; case '\r': goto yy112; case ' ': goto yy118; case ',': goto yy117; case ':': goto yy114; case ']': case '}': goto yy115; default: goto yy122; } yy110: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy136; yy111: #line 456 { int indt_len, nl_count = 0; SyckLevel *lvl; char *tok = YYTOKTMP; GOBBLE_UP_YAML_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; } yy112: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy135; default: goto yy113; } yy113: #line 510 { QUOTECATS(qstr, qcapa, qidx, YYTOKTMP, YYCURSOR - YYTOKTMP); goto Plain2; } yy114: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy130; case '\r': goto yy134; case ' ': goto yy132; default: goto yy113; } yy115: yych = *++YYCURSOR; yy116: #line 490 { 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(); } yy117: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy125; case '\r': goto yy128; case ' ': goto yy126; default: goto yy113; } yy118: yych = *++YYCURSOR; switch(yych){ case '#': goto yy123; default: goto yy119; } yy119: #line 508 { goto Plain3; } yy120: yych = *++YYCURSOR; yy121: #line 506 { RETURN_IMPLICIT(); } yy122: yych = *++YYCURSOR; goto yy113; yy123: yych = *++YYCURSOR; yy124: #line 502 { eat_comments( parser ); RETURN_IMPLICIT(); } yy125: yych = *++YYCURSOR; goto yy116; yy126: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy127: switch(yych){ case ' ': goto yy126; default: goto yy116; } yy128: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy125; default: goto yy129; } yy129: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy111; case 1: goto yy113; } yy130: yych = *++YYCURSOR; yy131: #line 488 { RETURN_IMPLICIT(); } yy132: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy133: switch(yych){ case ' ': goto yy132; default: goto yy131; } yy134: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy130; default: goto yy129; } yy135: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy136: switch(yych){ case '\n': case ' ': goto yy135; case '\r': goto yy137; default: goto yy111; } yy137: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy135; default: goto yy129; } } #line 514 } SingleQuote: { int qidx = 0; int qcapa = 100; char *qstr = S_ALLOC_N( char, qcapa ); SingleQuote2: YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy138; yy139: ++YYCURSOR; yy138: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy146; case '\n': goto yy140; case '\r': goto yy142; case '\'': goto yy144; default: goto yy147; } yy140: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy151; yy141: #line 528 { int indt_len; int nl_count = 0; SyckLevel *lvl; GOBBLE_UP_YAML_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; } yy142: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy150; default: goto yy143; } yy143: #line 583 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto SingleQuote2; } yy144: yych = *++YYCURSOR; switch(yych){ case '\'': goto yy148; default: goto yy145; } yy145: #line 568 { SyckLevel *lvl; SyckNode *n = syck_alloc_str(); lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_str ) { POP_LEVEL(); } n->type_id = syck_strndup( "str", 3 ); n->data.str->ptr = qstr; n->data.str->len = qidx; sycklval->nodeData = n; return YAML_PLAIN; } yy146: yych = *++YYCURSOR; goto yy145; yy147: yych = *++YYCURSOR; goto yy143; yy148: yych = *++YYCURSOR; yy149: #line 564 { QUOTECAT(qstr, qcapa, qidx, '\''); goto SingleQuote2; } yy150: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy151: switch(yych){ case '\n': case ' ': goto yy150; case '\r': goto yy152; default: goto yy141; } yy152: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy150; default: goto yy153; } yy153: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy141; } } #line 587 } 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 yy154; yy155: ++YYCURSOR; yy154: if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; switch(yych){ case '\000': goto yy161; case '\n': goto yy156; case '\r': goto yy158; case '"': goto yy163; case '\\': goto yy160; default: goto yy164; } yy156: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy178; yy157: #line 605 { int indt_len; int nl_count = 0; SyckLevel *lvl; GOBBLE_UP_YAML_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 ) { /* FIXME */ } 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; } yy158: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy177; default: goto yy159; } yy159: #line 690 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto DoubleQuote2; } yy160: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case '\n': goto yy168; case '\r': goto yy170; case ' ': goto yy165; case '"': case '\\': case 'a': case 'b': case 'e': case 'f': case 'n': case 'r': case 't': case 'v': goto yy172; case 'x': goto yy171; default: goto yy159; } yy161: yych = *++YYCURSOR; yy162: #line 675 { SyckLevel *lvl; SyckNode *n = syck_alloc_str(); lvl = CURRENT_LEVEL(); if ( lvl->status == syck_lvl_str ) { POP_LEVEL(); } n->type_id = syck_strndup( "str", 3 ); n->data.str->ptr = qstr; n->data.str->len = qidx; sycklval->nodeData = n; return YAML_PLAIN; } yy163: yych = *++YYCURSOR; goto yy162; yy164: yych = *++YYCURSOR; goto yy159; yy165: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy166: switch(yych){ case '\n': goto yy168; case '\r': goto yy170; case ' ': goto yy165; default: goto yy167; } yy167: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy157; case 1: goto yy159; } yy168: yych = *++YYCURSOR; yy169: #line 670 { keep_nl = 0; YYCURSOR--; goto DoubleQuote2; } yy170: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy168; default: goto yy167; } yy171: 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 yy174; default: goto yy167; } yy172: yych = *++YYCURSOR; yy173: #line 645 { 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; } yy174: 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 yy175; default: goto yy167; } yy175: yych = *++YYCURSOR; yy176: #line 661 { 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; } yy177: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy178: switch(yych){ case '\n': case ' ': goto yy177; case '\r': goto yy179; default: goto yy157; } yy179: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy177; default: goto yy167; } } #line 694 } TransferMethod: { int qidx = 0; int qcapa = 100; char *qstr = S_ALLOC_N( char, qcapa ); TransferMethod2: YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy180; yy181: ++YYCURSOR; yy180: if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; switch(yych){ case '\000': goto yy182; case '\n': goto yy183; case '\r': goto yy186; case ' ': goto yy185; case '\\': goto yy188; default: goto yy189; } yy182: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy187; } yy183: yych = *++YYCURSOR; yy184: #line 708 { SyckLevel *lvl; YYCURSOR = YYTOKTMP; if ( YYCURSOR == YYTOKEN + 1 ) { free( qstr ); return YAML_ITRANSFER; } lvl = CURRENT_LEVEL(); /* * URL Prefixing */ if ( *qstr == '^' ) { sycklval->name = S_ALLOC_N( char, qidx + strlen( lvl->domain ) ); sycklval->name[0] = '\0'; strcat( sycklval->name, lvl->domain ); strncat( sycklval->name, qstr + 1, qidx - 1 ); free( qstr ); } else { char *carat = qstr; char *qend = qstr + qidx; while ( (++carat) < qend ) { if ( *carat == '^' ) break; } if ( carat < qend ) { free( lvl->domain ); lvl->domain = syck_strndup( qstr, carat - qstr ); sycklval->name = S_ALLOC_N( char, ( qend - carat ) + strlen( lvl->domain ) ); sycklval->name[0] = '\0'; strcat( sycklval->name, lvl->domain ); strncat( sycklval->name, carat + 1, ( qend - carat ) - 1 ); free( qstr ); } else { sycklval->name = qstr; } } return YAML_TRANSFER; } yy185: yych = *++YYCURSOR; goto yy196; yy186: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy194; default: goto yy187; } yy187: #line 770 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto TransferMethod2; } yy188: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); switch(yych){ case 'x': goto yy190; default: goto yy187; } yy189: yych = *++YYCURSOR; goto yy187; yy190: 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 yy191; default: goto yy182; } yy191: 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 yy192; default: goto yy182; } yy192: yych = *++YYCURSOR; yy193: #line 761 { 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 TransferMethod2; } yy194: yych = *++YYCURSOR; goto yy184; yy195: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy196: switch(yych){ case ' ': goto yy195; default: goto yy184; } } #line 775 } ScalarBlock: { 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_YAML_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 yy197; yy198: ++YYCURSOR; yy197: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy205; case '\n': goto yy199; case '\r': goto yy201; case '#': goto yy203; default: goto yy207; } yy199: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy209; yy200: #line 822 { char *pacer; char *tok = YYTOKTMP; int indt_len = 0, nl_count = 0, fold_nl = 0, nl_begin = 0; GOBBLE_UP_YAML_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_YAML_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_YAML_BLOCK(); } goto ScalarBlock2; } yy201: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy208; default: goto yy202; } yy202: #line 908 { QUOTECAT(qstr, qcapa, qidx, *YYTOKTMP); goto ScalarBlock2; } yy203: yych = *++YYCURSOR; yy204: #line 889 { lvl = CURRENT_LEVEL(); if ( lvl->status != syck_lvl_block ) { eat_comments( parser ); YYTOKTMP = YYCURSOR; } else { QUOTECAT(qstr, qcapa, qidx, *YYTOKTMP); } goto ScalarBlock2; } yy205: yych = *++YYCURSOR; yy206: #line 903 { YYCURSOR--; POP_LEVEL(); RETURN_YAML_BLOCK(); } yy207: yych = *++YYCURSOR; goto yy202; yy208: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy209: switch(yych){ case '\n': case ' ': goto yy208; case '\r': goto yy210; default: goto yy200; } yy210: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy208; default: goto yy211; } yy211: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy200; } } #line 913 } return 0; } void eat_comments( SyckParser *parser ) { char *tok; Comment: { tok = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy212; yy213: ++YYCURSOR; yy212: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych){ case '\000': goto yy214; case '\n': goto yy216; case '\r': goto yy217; default: goto yy219; } yy214: yych = *++YYCURSOR; yy215: #line 931 { YYCURSOR = tok; return; } yy216: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy221; yy217: yych = *++YYCURSOR; switch(yych){ case '\n': goto yy220; default: goto yy218; } yy218: #line 935 { goto Comment; } yy219: yych = *++YYCURSOR; goto yy218; yy220: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy221: switch(yych){ case '\n': goto yy220; case '\r': goto yy222; default: goto yy215; } yy222: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych){ case '\n': goto yy220; default: goto yy223; } yy223: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy215; } } #line 938 } } int is_newline( char *ptr ) { if ( *ptr == '\n' ) return 1; if ( *ptr == '\r' && *( ptr + 1 ) == '\n' ) return 1; return 0; } int syckwrap() { return 1; } void syckerror( 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); }