/* Generated by re2c 0.5 on Mon Oct 13 18:40:21 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 sycklex_yaml_utf8( YYSTYPE *, SyckParser * ); int sycklex_bytecode_utf8( YYSTYPE *, SyckParser * ); int syckwrap(); /* * 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 ) { switch ( parser->input_type ) { case syck_yaml_utf8: return sycklex_yaml_utf8( sycklval, parser ); case syck_yaml_utf16: syckerror( "UTF-16 is not currently supported in Syck.\nPlease contribute code to help this happen!" ); break; case syck_yaml_utf32: syckerror( "UTF-32 is not currently supported in Syck.\nPlease contribute code to help this happen!" ); break; case syck_bytecode_utf8: return sycklex_bytecode_utf8( sycklval, parser ); } } /* * Parser for standard YAML [UTF-8] */ int sycklex_yaml_utf8( 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 274 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; if(yych <= '\037'){ if(yych <= '\n'){ if(yych <= '\000') goto yy7; if(yych <= '\t') goto yy14; goto yy9; } else { if(yych == '\r') goto yy11; goto yy14; } } else { if(yych <= '#'){ if(yych <= ' ') goto yy12; if(yych <= '"') goto yy14; goto yy5; } else { if(yych <= ',') goto yy14; if(yych <= '-') goto yy2; if(yych <= '.') goto yy4; goto yy14; } } yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych == '-') goto yy28; yy3: #line 333 { YYPOS(0); goto Document; } yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych == '.') goto yy21; goto yy3; yy5: yych = *++YYCURSOR; yy6: #line 315 { eat_comments( parser ); goto Header; } yy7: yych = *++YYCURSOR; yy8: #line 319 { SyckLevel *lvl = CURRENT_LEVEL(); ENSURE_YAML_IEND(lvl, -1); YYPOS(0); return 0; } yy9: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); goto yy18; yy10: #line 325 { GOBBLE_UP_YAML_INDENT( doc_level, YYTOKEN ); goto Header; } yy11: yych = *++YYCURSOR; if(yych == '\n') goto yy17; goto yy3; yy12: yych = *++YYCURSOR; goto yy16; yy13: #line 329 { doc_level = YYCURSOR - YYLINEPTR; goto Header; } yy14: yych = *++YYCURSOR; goto yy3; yy15: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy16: if(yych == ' ') goto yy15; goto yy13; yy17: yyaccept = 1; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy18: if(yych <= '\f'){ if(yych == '\n') goto yy17; goto yy10; } else { if(yych <= '\r') goto yy19; if(yych == ' ') goto yy17; goto yy10; } yy19: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych == '\n') goto yy17; yy20: YYCURSOR = YYMARKER; switch(yyaccept){ case 1: goto yy10; case 0: goto yy3; } yy21: yych = *++YYCURSOR; if(yych != '.') goto yy20; yy22: yych = *++YYCURSOR; if(yych <= '\f'){ if(yych != '\n') goto yy20; } else { if(yych <= '\r') goto yy27; if(yych == ' ') goto yy25; goto yy20; } yy23: yych = *++YYCURSOR; yy24: #line 301 { 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: if(yych == ' ') goto yy25; goto yy24; yy27: yych = *++YYCURSOR; if(yych == '\n') goto yy23; goto yy20; yy28: yych = *++YYCURSOR; if(yych != '-') goto yy20; yy29: yych = *++YYCURSOR; if(yych <= '\f'){ if(yych != '\n') goto yy20; } else { if(yych <= '\r') goto yy34; if(yych == ' ') goto yy32; goto yy20; } yy30: yych = *++YYCURSOR; yy31: #line 287 { 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: if(yych == ' ') goto yy32; goto yy31; yy34: yych = *++YYCURSOR; if(yych == '\n') goto yy30; goto yy20; } #line 337 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; if(yych <= '+'){ if(yych <= '!'){ if(yych <= '\f'){ if(yych <= '\000') goto yy60; if(yych != '\n') goto yy62; } else { if(yych <= '\r') goto yy39; if(yych <= '\037') goto yy62; if(yych <= ' ') goto yy58; goto yy49; } } else { if(yych <= '&'){ if(yych <= '"') goto yy53; if(yych <= '#') goto yy56; if(yych <= '%') goto yy62; goto yy47; } else { if(yych <= '\'') goto yy51; if(yych == '*') goto yy48; goto yy62; } } } else { if(yych <= 'Z'){ if(yych <= ':'){ if(yych <= ',') goto yy45; if(yych <= '-') goto yy46; if(yych <= '9') goto yy62; goto yy45; } else { if(yych <= '=') goto yy62; if(yych <= '>') goto yy55; if(yych <= '?') goto yy46; goto yy62; } } else { if(yych <= 'z'){ if(yych <= '[') goto yy41; if(yych == ']') goto yy43; goto yy62; } else { if(yych <= '{') goto yy41; if(yych <= '|') goto yy55; if(yych <= '}') goto yy43; goto yy62; } } } yy37: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy90; yy38: #line 351 { /* Isolate spaces */ int indt_len; GOBBLE_UP_YAML_INDENT( indt_len, YYTOKEN ); lvl = CURRENT_LEVEL(); doc_level = 0; /* XXX: Comment lookahead */ if ( *YYCURSOR == '#' ) { goto Document; } /* 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; if(yych == '\n') goto yy89; yy40: #line 445 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); goto Plain; } yy41: yych = *++YYCURSOR; yy42: #line 373 { 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 379 { POP_LEVEL(); return YYTOKEN[0]; } yy45: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if(yych <= '\f'){ if(yych == '\n') goto yy84; goto yy40; } else { if(yych <= '\r') goto yy88; if(yych == ' ') goto yy86; goto yy40; } yy46: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if(yych <= '\f'){ if(yych == '\n') goto yy79; goto yy40; } else { if(yych <= '\r') goto yy83; if(yych == ' ') goto yy81; goto yy40; } yy47: yych = *++YYCURSOR; if(yych <= '@'){ if(yych <= '-'){ if(yych <= ',') goto yy40; goto yy76; } else { if(yych <= '/') goto yy40; if(yych <= '9') goto yy76; goto yy40; } } else { if(yych <= '_'){ if(yych <= 'Z') goto yy76; if(yych <= '^') goto yy40; goto yy76; } else { if(yych <= '`') goto yy40; if(yych <= 'z') goto yy76; goto yy40; } } yy48: yych = *++YYCURSOR; if(yych <= '@'){ if(yych <= '-'){ if(yych <= ',') goto yy40; goto yy73; } else { if(yych <= '/') goto yy40; if(yych <= '9') goto yy73; goto yy40; } } else { if(yych <= '_'){ if(yych <= 'Z') goto yy73; if(yych <= '^') goto yy40; goto yy73; } else { if(yych <= '`') goto yy40; if(yych <= 'z') goto yy73; goto yy40; } } yy49: yych = *++YYCURSOR; yy50: #line 418 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); goto TransferMethod; } yy51: yych = *++YYCURSOR; yy52: #line 421 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); goto SingleQuote; } yy53: yych = *++YYCURSOR; yy54: #line 424 { ENSURE_YAML_IOPEN(lvl, doc_level, 1); goto DoubleQuote; } yy55: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if(yych <= ' '){ if(yych <= '\f'){ if(yych == '\n') goto yy68; goto yy40; } else { if(yych <= '\r') goto yy72; if(yych <= '\037') goto yy40; goto yy70; } } else { if(yych <= ','){ if(yych == '+') goto yy65; goto yy40; } else { if(yych <= '-') goto yy65; if(yych <= '/') goto yy40; if(yych <= '9') goto yy65; goto yy40; } } yy56: yych = *++YYCURSOR; yy57: #line 434 { eat_comments( parser ); goto Document; } yy58: yych = *++YYCURSOR; goto yy64; yy59: #line 438 { goto Document; } yy60: yych = *++YYCURSOR; yy61: #line 440 { ENSURE_YAML_IEND(lvl, -1); YYPOS(0); return 0; } yy62: yych = *++YYCURSOR; goto yy40; yy63: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy64: if(yych == ' ') goto yy63; goto yy59; yy65: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy66: if(yych <= ' '){ if(yych <= '\f'){ if(yych == '\n') goto yy68; } else { if(yych <= '\r') goto yy72; if(yych >= ' ') goto yy70; } } else { if(yych <= ','){ if(yych == '+') goto yy65; } else { if(yych <= '-') goto yy65; if(yych <= '/') goto yy67; if(yych <= '9') goto yy65; } } yy67: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy38; case 1: goto yy40; } yy68: yych = *++YYCURSOR; yy69: #line 427 { if ( is_newline( YYCURSOR - 1 ) ) { YYCURSOR--; } goto ScalarBlock; } yy70: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy71: if(yych == ' ') goto yy70; goto yy69; yy72: yych = *++YYCURSOR; if(yych == '\n') goto yy68; goto yy67; yy73: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy74: if(yych <= '@'){ if(yych <= '-'){ if(yych >= '-') goto yy73; } else { if(yych <= '/') goto yy75; if(yych <= '9') goto yy73; } } else { if(yych <= '_'){ if(yych <= 'Z') goto yy73; if(yych >= '_') goto yy73; } else { if(yych <= '`') goto yy75; if(yych <= 'z') goto yy73; } } yy75: #line 413 { 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: if(yych <= '@'){ if(yych <= '-'){ if(yych >= '-') goto yy76; } else { if(yych <= '/') goto yy78; if(yych <= '9') goto yy76; } } else { if(yych <= '_'){ if(yych <= 'Z') goto yy76; if(yych >= '_') goto yy76; } else { if(yych <= '`') goto yy78; if(yych <= 'z') goto yy76; } } yy78: #line 401 { 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 387 { 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: if(yych == ' ') goto yy81; goto yy80; yy83: yych = *++YYCURSOR; if(yych == '\n') goto yy79; goto yy67; yy84: yych = *++YYCURSOR; yy85: #line 383 { YYPOS(1); return YYTOKEN[0]; } yy86: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy87: if(yych == ' ') goto yy86; goto yy85; yy88: yych = *++YYCURSOR; if(yych == '\n') goto yy84; goto yy67; yy89: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy90: if(yych <= '\f'){ if(yych == '\n') goto yy89; goto yy38; } else { if(yych <= '\r') goto yy91; if(yych == ' ') goto yy89; goto yy38; } yy91: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych == '\n') goto yy89; goto yy67; } #line 449 } Directive: { YYTOKTMP = YYCURSOR; { YYCTYPE yych; unsigned int yyaccept; goto yy92; yy93: ++YYCURSOR; yy92: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= ' '){ if(yych <= '\000') goto yy94; if(yych <= '\037') goto yy99; goto yy97; } else { if(yych == '%') goto yy95; goto yy99; } yy94: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy96; } yy95: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych <= '-') goto yy96; if(yych == '`') goto yy96; if(yych <= 'z') goto yy102; yy96: #line 462 { YYCURSOR = YYTOKTMP; return YAML_DOCSEP; } yy97: yych = *++YYCURSOR; goto yy101; yy98: #line 460 { goto Directive; } yy99: yych = *++YYCURSOR; goto yy96; yy100: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy101: if(yych == ' ') goto yy100; goto yy98; yy102: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy103: if(yych <= ':'){ if(yych <= '-') goto yy94; if(yych <= '9') goto yy102; } else { if(yych == '`') goto yy94; if(yych <= 'z') goto yy102; goto yy94; } yy104: yych = *++YYCURSOR; if(yych <= '-') goto yy94; if(yych == '`') goto yy94; if(yych >= '{') goto yy94; yy105: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy106: if(yych <= '-') goto yy107; if(yych == '`') goto yy107; if(yych <= 'z') goto yy105; yy107: #line 458 { goto Directive; } } #line 465 } 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; if(yych <= '+'){ if(yych <= '\f'){ if(yych <= '\000') goto yy120; if(yych != '\n') goto yy122; } else { if(yych <= '\r') goto yy112; if(yych == ' ') goto yy118; goto yy122; } } else { if(yych <= '\\'){ if(yych <= ',') goto yy117; if(yych == ':') goto yy114; goto yy122; } else { if(yych <= ']') goto yy115; if(yych == '}') goto yy115; goto yy122; } } yy110: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy136; yy111: #line 488 { 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; if(yych == '\n') goto yy135; yy113: #line 542 { QUOTECATS(qstr, qcapa, qidx, YYTOKTMP, YYCURSOR - YYTOKTMP); goto Plain2; } yy114: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if(yych <= '\f'){ if(yych == '\n') goto yy130; goto yy113; } else { if(yych <= '\r') goto yy134; if(yych == ' ') goto yy132; goto yy113; } yy115: yych = *++YYCURSOR; yy116: #line 522 { 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); if(yych <= '\f'){ if(yych == '\n') goto yy125; goto yy113; } else { if(yych <= '\r') goto yy128; if(yych == ' ') goto yy126; goto yy113; } yy118: yych = *++YYCURSOR; if(yych == '#') goto yy123; yy119: #line 540 { goto Plain3; } yy120: yych = *++YYCURSOR; yy121: #line 538 { RETURN_IMPLICIT(); } yy122: yych = *++YYCURSOR; goto yy113; yy123: yych = *++YYCURSOR; yy124: #line 534 { eat_comments( parser ); RETURN_IMPLICIT(); } yy125: yych = *++YYCURSOR; goto yy116; yy126: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy127: if(yych == ' ') goto yy126; goto yy116; yy128: yych = *++YYCURSOR; if(yych == '\n') goto yy125; yy129: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy111; case 1: goto yy113; } yy130: yych = *++YYCURSOR; yy131: #line 520 { RETURN_IMPLICIT(); } yy132: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy133: if(yych == ' ') goto yy132; goto yy131; yy134: yych = *++YYCURSOR; if(yych == '\n') goto yy130; goto yy129; yy135: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy136: if(yych <= '\f'){ if(yych == '\n') goto yy135; goto yy111; } else { if(yych <= '\r') goto yy137; if(yych == ' ') goto yy135; goto yy111; } yy137: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych == '\n') goto yy135; goto yy129; } #line 546 } 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; if(yych <= '\f'){ if(yych <= '\000') goto yy146; if(yych != '\n') goto yy147; } else { if(yych <= '\r') goto yy142; if(yych == '\'') goto yy144; goto yy147; } yy140: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy151; yy141: #line 560 { 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; if(yych == '\n') goto yy150; yy143: #line 615 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto SingleQuote2; } yy144: yych = *++YYCURSOR; if(yych == '\'') goto yy148; yy145: #line 600 { 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 596 { QUOTECAT(qstr, qcapa, qidx, '\''); goto SingleQuote2; } yy150: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy151: if(yych <= '\f'){ if(yych == '\n') goto yy150; goto yy141; } else { if(yych <= '\r') goto yy152; if(yych == ' ') goto yy150; goto yy141; } yy152: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych == '\n') goto yy150; yy153: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy141; } } #line 619 } 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; if(yych <= '\r'){ if(yych <= '\t'){ if(yych <= '\000') goto yy161; goto yy164; } else { if(yych <= '\n') goto yy156; if(yych <= '\f') goto yy164; goto yy158; } } else { if(yych <= '"'){ if(yych <= '!') goto yy164; goto yy163; } else { if(yych == '\\') goto yy160; goto yy164; } } yy156: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy178; yy157: #line 637 { 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; if(yych == '\n') goto yy177; yy159: #line 722 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto DoubleQuote2; } yy160: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if(yych <= 'b'){ if(yych <= ' '){ if(yych <= '\f'){ if(yych == '\n') goto yy168; goto yy159; } else { if(yych <= '\r') goto yy170; if(yych <= '\037') goto yy159; goto yy165; } } else { if(yych <= '['){ if(yych == '"') goto yy172; goto yy159; } else { if(yych <= '\\') goto yy172; if(yych <= '`') goto yy159; goto yy172; } } } else { if(yych <= 'r'){ if(yych <= 'm'){ if(yych <= 'd') goto yy159; if(yych <= 'f') goto yy172; goto yy159; } else { if(yych <= 'n') goto yy172; if(yych <= 'q') goto yy159; goto yy172; } } else { if(yych <= 'u'){ if(yych == 't') goto yy172; goto yy159; } else { if(yych <= 'v') goto yy172; if(yych == 'x') goto yy171; goto yy159; } } } yy161: yych = *++YYCURSOR; yy162: #line 707 { 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: if(yych <= '\f'){ if(yych == '\n') goto yy168; } else { if(yych <= '\r') goto yy170; if(yych == ' ') goto yy165; } yy167: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy157; case 1: goto yy159; } yy168: yych = *++YYCURSOR; yy169: #line 702 { keep_nl = 0; YYCURSOR--; goto DoubleQuote2; } yy170: yych = *++YYCURSOR; if(yych == '\n') goto yy168; goto yy167; yy171: yych = *++YYCURSOR; if(yych <= '@'){ if(yych <= '/') goto yy167; if(yych <= '9') goto yy174; goto yy167; } else { if(yych <= 'F') goto yy174; if(yych <= '`') goto yy167; if(yych <= 'f') goto yy174; goto yy167; } yy172: yych = *++YYCURSOR; yy173: #line 677 { 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; if(yych <= '@'){ if(yych <= '/') goto yy167; if(yych >= ':') goto yy167; } else { if(yych <= 'F') goto yy175; if(yych <= '`') goto yy167; if(yych >= 'g') goto yy167; } yy175: yych = *++YYCURSOR; yy176: #line 693 { 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: if(yych <= '\f'){ if(yych == '\n') goto yy177; goto yy157; } else { if(yych <= '\r') goto yy179; if(yych == ' ') goto yy177; goto yy157; } yy179: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych == '\n') goto yy177; goto yy167; } #line 726 } 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; if(yych <= '\r'){ if(yych <= '\t'){ if(yych >= '\001') goto yy189; } else { if(yych <= '\n') goto yy183; if(yych <= '\f') goto yy189; goto yy186; } } else { if(yych <= ' '){ if(yych <= '\037') goto yy189; goto yy185; } else { if(yych == '\\') goto yy188; goto yy189; } } yy182: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy187; } yy183: yych = *++YYCURSOR; yy184: #line 740 { 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; if(yych == '\n') goto yy194; yy187: #line 802 { QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); goto TransferMethod2; } yy188: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych == 'x') goto yy190; goto yy187; yy189: yych = *++YYCURSOR; goto yy187; yy190: yych = *++YYCURSOR; if(yych <= '@'){ if(yych <= '/') goto yy182; if(yych >= ':') goto yy182; } else { if(yych <= 'F') goto yy191; if(yych <= '`') goto yy182; if(yych >= 'g') goto yy182; } yy191: yych = *++YYCURSOR; if(yych <= '@'){ if(yych <= '/') goto yy182; if(yych >= ':') goto yy182; } else { if(yych <= 'F') goto yy192; if(yych <= '`') goto yy182; if(yych >= 'g') goto yy182; } yy192: yych = *++YYCURSOR; yy193: #line 793 { 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: if(yych == ' ') goto yy195; goto yy184; } #line 807 } 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; if(yych <= '\f'){ if(yych <= '\000') goto yy205; if(yych != '\n') goto yy207; } else { if(yych <= '\r') goto yy201; if(yych == '#') goto yy203; goto yy207; } yy199: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy209; yy200: #line 854 { 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; if(yych == '\n') goto yy208; yy202: #line 940 { QUOTECAT(qstr, qcapa, qidx, *YYTOKTMP); goto ScalarBlock2; } yy203: yych = *++YYCURSOR; yy204: #line 921 { 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 935 { YYCURSOR--; POP_LEVEL(); RETURN_YAML_BLOCK(); } yy207: yych = *++YYCURSOR; goto yy202; yy208: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy209: if(yych <= '\f'){ if(yych == '\n') goto yy208; goto yy200; } else { if(yych <= '\r') goto yy210; if(yych == ' ') goto yy208; goto yy200; } yy210: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych == '\n') goto yy208; yy211: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy200; } } #line 945 } 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; if(yych <= '\n'){ if(yych <= '\000') goto yy214; if(yych <= '\t') goto yy219; goto yy216; } else { if(yych == '\r') goto yy217; goto yy219; } yy214: yych = *++YYCURSOR; yy215: #line 963 { YYCURSOR = tok; return; } yy216: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); goto yy221; yy217: yych = *++YYCURSOR; if(yych == '\n') goto yy220; yy218: #line 967 { goto Comment; } yy219: yych = *++YYCURSOR; goto yy218; yy220: yyaccept = 0; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy221: if(yych == '\n') goto yy220; if(yych != '\r') goto yy215; yy222: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych == '\n') goto yy220; yy223: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy215; } } #line 970 } } 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); }