root/ext/syck/token.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. sycklex
  2. sycklex_yaml_utf8
  3. eat_comments
  4. escape_seq
  5. is_newline
  6. newline_len
  7. syckwrap
  8. syckerror

/* Generated by re2c 0.9.10 on Tue Sep 20 17:46:17 2005 */
#line 1 "token.re"
/*
 * token.re
 *
 * $Author: nobu $
 *
 * Copyright (C) 2003 why the lucky stiff
 */
#include "ruby/ruby.h"
#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 + newline_len(ptr); 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_iseq || last_lvl->status == syck_lvl_imap ) \
            { \
                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 = YYTOKEN; \
        n->data.str->ptr = qstr; \
        n->data.str->len = qidx; \
        n->data.str->style = scalar_plain; \
        sycklval->nodeData = n; \
        if ( parser->implicit_typing == 1 ) \
        { \
            try_tag_implicit( sycklval->nodeData, parser->taguri_expansion ); \
        } \
        return YAML_PLAIN; \
    }

/* concat the inline characters to the plain scalar */
#define PLAIN_NOT_INL() \
    if ( *(YYCURSOR - 1) == ' ' || is_newline( YYCURSOR - 1 ) ) \
    { \
        YYCURSOR--; \
    } \
    QUOTECATS(qstr, qcapa, qidx, YYTOKEN, YYCURSOR - YYTOKEN); \
    goto Plain2;

/* trim spaces off the end in case of indent */
#define PLAIN_IS_INL() \
    char *walker = qstr + qidx - 1; \
    while ( walker > qstr && ( *walker == '\n' || *walker == ' ' || *walker == '\t' ) ) \
    { \
        qidx--; \
        walker[0] = '\0'; \
        walker--; \
    }

/*
 * Keep or chomp block?
 * * Use only in "ScalarBlock" section *
 */
#define RETURN_YAML_BLOCK() \
    { \
        SyckNode *n = syck_alloc_str(); \
        if ( ((SyckParser *)parser)->taguri_expansion == 1 ) \
        { \
            n->type_id = syck_taguri( YAML_DOMAIN, "str", 3 ); \
        } \
        else \
        { \
            n->type_id = syck_strndup( "str", 3 ); \
        } \
        n->data.str->ptr = qstr; \
        n->data.str->len = qidx; \
        if ( blockType == BLOCK_LIT ) { \
            n->data.str->style = scalar_literal; \
        } else { \
            n->data.str->style = scalar_fold; \
        } \
        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 < n->data.str->ptr + n->data.str->len - 1 ) \
                    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 ( lvl_deep->status == syck_lvl_seq || ( indt_len == YYCURSOR - YYLINEPTR && lvl_deep->status != syck_lvl_map )  ) \
        { \
            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 * );
char escape_seq( char );
int is_newline( char *ptr );
int newline_len( 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 );
    }
    return YAML_DOCSEP;
}

/*
 * 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 315 "token.re"


    if ( YYLINEPTR != YYCURSOR )
    {
        goto Document;
    }

Header:

    YYTOKEN = YYCURSOR;


#line 307 "<stdout>"
{
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy0;
        ++YYCURSOR;
yy0:
        if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
        yych = *YYCURSOR;
        switch(yych){
        case 0x00:      goto yy7;
        case 0x09:      case ' ':       goto yy12;
        case 0x0A:      goto yy9;
        case 0x0D:      goto yy11;
        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 374 "token.re"
{   YYPOS(0);
                        goto Document; 
                    }
#line 337 "<stdout>"
yy4:    yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        switch(yych){
        case '.':       goto yy21;
        default:        goto yy3;
        }
yy5:    ++YYCURSOR;
        goto yy6;
yy6:
#line 356 "token.re"
{   eat_comments( parser ); 
                        goto Header;
                    }
#line 351 "<stdout>"
yy7:    ++YYCURSOR;
        goto yy8;
yy8:
#line 360 "token.re"
{   SyckLevel *lvl = CURRENT_LEVEL();
                        ENSURE_YAML_IEND(lvl, -1);
                        YYPOS(0);
                        return 0; 
                    }
#line 361 "<stdout>"
yy9:    yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        goto yy18;
yy10:
#line 366 "token.re"
{   GOBBLE_UP_YAML_INDENT( doc_level, YYTOKEN );
                        goto Header; 
                    }
#line 370 "<stdout>"
yy11:   yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy17;
        default:        goto yy3;
        }
yy12:   ++YYCURSOR;
        yych = *YYCURSOR;
        goto yy16;
yy13:
#line 370 "token.re"
{   doc_level = YYCURSOR - YYLINEPTR;
                        goto Header;
                    }
#line 384 "<stdout>"
yy14:   yych = *++YYCURSOR;
        goto yy3;
yy15:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy16;
yy16:   switch(yych){
        case 0x09:      case ' ':       goto yy15;
        default:        goto yy13;
        }
yy17:   yyaccept = 1;
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy18;
yy18:   switch(yych){
        case 0x0A:      case ' ':       goto yy17;
        case 0x0D:      goto yy19;
        default:        goto yy10;
        }
yy19:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        switch(yych){
        case 0x0A:      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 0x0A:      goto yy23;
        case 0x0D:      goto yy27;
        case ' ':       goto yy25;
        default:        goto yy20;
        }
yy23:   ++YYCURSOR;
        goto yy24;
yy24:
#line 342 "token.re"
{   SyckLevel *lvl = CURRENT_LEVEL();
                        if ( lvl->status == syck_lvl_header )
                        {
                            goto Header; 
                        }
                        else
                        {
                            ENSURE_YAML_IEND(lvl, -1);
                            YYPOS(0);
                            return 0; 
                        }
                        return 0; 
                    }
#line 446 "<stdout>"
yy25:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy26;
yy26:   switch(yych){
        case ' ':       goto yy25;
        default:        goto yy24;
        }
yy27:   yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy23;
        default:        goto yy20;
        }
yy28:   yych = *++YYCURSOR;
        switch(yych){
        case '-':       goto yy29;
        default:        goto yy20;
        }
yy29:   yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy30;
        case 0x0D:      goto yy34;
        case ' ':       goto yy32;
        default:        goto yy20;
        }
yy30:   ++YYCURSOR;
        goto yy31;
yy31:
#line 328 "token.re"
{   SyckLevel *lvl = CURRENT_LEVEL();
                        if ( lvl->status == syck_lvl_header )
                        {
                            YYPOS(3);
                            goto Directive; 
                        }
                        else
                        {
                            ENSURE_YAML_IEND(lvl, -1);
                            YYPOS(0);
                            return 0; 
                        }
                    }
#line 489 "<stdout>"
yy32:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy33;
yy33:   switch(yych){
        case ' ':       goto yy32;
        default:        goto yy31;
        }
yy34:   ++YYCURSOR;
        switch((yych = *YYCURSOR)) {
        case 0x0A:      goto yy30;
        default:        goto yy20;
        }
}
#line 378 "token.re"


Document:
    {
        SyckLevel *lvl = CURRENT_LEVEL();
        if ( lvl->status == syck_lvl_header )
        {
            lvl->status = syck_lvl_doc;
        }

        YYTOKEN = YYCURSOR;


#line 518 "<stdout>"
{
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy35;
        ++YYCURSOR;
yy35:
        if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        switch(yych){
        case 0x00:      goto yy62;
        case 0x09:      case ' ':       goto yy60;
        case 0x0A:      goto yy37;
        case 0x0D:      goto yy39;
        case '!':       goto yy51;
        case '"':       goto yy55;
        case '#':       goto yy58;
        case '&':       goto yy49;
        case '\'':      goto yy53;
        case '*':       goto yy50;
        case ',':       case ':':       goto yy47;
        case '-':       case '?':       goto yy48;
        case '>':       case '|':       goto yy57;
        case '[':       goto yy41;
        case ']':       case '}':       goto yy45;
        case '{':       goto yy43;
        default:        goto yy64;
        }
yy37:   yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        goto yy92;
yy38:
#line 392 "token.re"
{   /* 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;
                        }

                        /* Ignore indentation inside inlines */
                        if ( lvl->status == syck_lvl_iseq || lvl->status == syck_lvl_imap )
                        {
                            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;
                    }
#line 578 "<stdout>"
yy39:   ++YYCURSOR;
        switch((yych = *YYCURSOR)) {
        case 0x0A:      goto yy91;
        default:        goto yy40;
        }
yy40:
#line 497 "token.re"
{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);
                        goto Plain; 
                    }
#line 589 "<stdout>"
yy41:   ++YYCURSOR;
        goto yy42;
yy42:
#line 420 "token.re"
{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);
                        lvl = CURRENT_LEVEL();
                        ADD_LEVEL(lvl->spaces + 1, syck_lvl_iseq);
                        return YYTOKEN[0]; 
                    }
#line 599 "<stdout>"
yy43:   ++YYCURSOR;
        goto yy44;
yy44:
#line 426 "token.re"
{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);
                        lvl = CURRENT_LEVEL();
                        ADD_LEVEL(lvl->spaces + 1, syck_lvl_imap);
                        return YYTOKEN[0]; 
                    }
#line 609 "<stdout>"
yy45:   ++YYCURSOR;
        goto yy46;
yy46:
#line 432 "token.re"
{   POP_LEVEL();
                        return YYTOKEN[0]; 
                    }
#line 617 "<stdout>"
yy47:   yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        switch(yych){
        case 0x0A:      goto yy86;
        case 0x0D:      goto yy90;
        case ' ':       goto yy88;
        default:        goto yy40;
        }
yy48:   yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        switch(yych){
        case 0x0A:      goto yy81;
        case 0x0D:      goto yy85;
        case ' ':       goto yy83;
        default:        goto yy40;
        }
yy49:   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 yy78;
        default:        goto yy40;
        }
yy50:   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 yy75;
        default:        goto yy40;
        }
yy51:   ++YYCURSOR;
        goto yy52;
yy52:
#line 471 "token.re"
{   goto TransferMethod; }
#line 767 "<stdout>"
yy53:   ++YYCURSOR;
        goto yy54;
yy54:
#line 473 "token.re"
{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);
                        goto SingleQuote; }
#line 774 "<stdout>"
yy55:   ++YYCURSOR;
        goto yy56;
yy56:
#line 476 "token.re"
{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);
                        goto DoubleQuote; }
#line 781 "<stdout>"
yy57:   yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        switch(yych){
        case 0x0A:      goto yy70;
        case 0x0D:      goto yy74;
        case ' ':       goto yy72;
        case '+':       case '-':       case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':       goto yy67;
        default:        goto yy40;
        }
yy58:   ++YYCURSOR;
        goto yy59;
yy59:
#line 486 "token.re"
{   eat_comments( parser ); 
                        goto Document;
                    }
#line 807 "<stdout>"
yy60:   ++YYCURSOR;
        yych = *YYCURSOR;
        goto yy66;
yy61:
#line 490 "token.re"
{   goto Document; }
#line 814 "<stdout>"
yy62:   ++YYCURSOR;
        goto yy63;
yy63:
#line 492 "token.re"
{   ENSURE_YAML_IEND(lvl, -1);
                        YYPOS(0);
                        return 0; 
                    }
#line 823 "<stdout>"
yy64:   yych = *++YYCURSOR;
        goto yy40;
yy65:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy66;
yy66:   switch(yych){
        case 0x09:      case ' ':       goto yy65;
        default:        goto yy61;
        }
yy67:   ++YYCURSOR;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        goto yy68;
yy68:   switch(yych){
        case 0x0A:      goto yy70;
        case 0x0D:      goto yy74;
        case ' ':       goto yy72;
        case '+':       case '-':       case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':       goto yy67;
        default:        goto yy69;
        }
yy69:   YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy38;
        case 1: goto yy40;
        }
yy70:   ++YYCURSOR;
        goto yy71;
yy71:
#line 479 "token.re"
{   if ( is_newline( YYCURSOR - 1 ) ) 
                        {
                            YYCURSOR--;
                        }
                        goto ScalarBlock; 
                    }
#line 869 "<stdout>"
yy72:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy73;
yy73:   switch(yych){
        case ' ':       goto yy72;
        default:        goto yy71;
        }
yy74:   yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy70;
        default:        goto yy69;
        }
yy75:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy76;
yy76:   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 yy75;
        default:        goto yy77;
        }
yy77:
#line 466 "token.re"
{   ENSURE_YAML_IOPEN(lvl, doc_level, 1);
                        sycklval->name = syck_strndup( YYTOKEN + 1, YYCURSOR - YYTOKEN - 1 );
                        return YAML_ALIAS;
                    }
#line 956 "<stdout>"
yy78:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy79;
yy79:   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 yy78;
        default:        goto yy80;
        }
yy80:
#line 455 "token.re"
{   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;
                    }
#line 1036 "<stdout>"
yy81:   ++YYCURSOR;
        goto yy82;
yy82:
#line 441 "token.re"
{   ENSURE_YAML_IOPEN(lvl, YYTOKEN - YYLINEPTR, 1);
                        FORCE_NEXT_TOKEN(YAML_IOPEN);
                        if ( *YYCURSOR == '#' || is_newline( YYCURSOR ) || is_newline( YYCURSOR - 1 ) )
                        {
                            YYCURSOR--; 
                            ADD_LEVEL((YYTOKEN + 1) - YYLINEPTR, syck_lvl_seq);
                        }
                        else /* spaces followed by content uses the space as indentation */
                        {
                            ADD_LEVEL(YYCURSOR - YYLINEPTR, syck_lvl_seq);
                        }
                        return YYTOKEN[0]; 
                    }
#line 1054 "<stdout>"
yy83:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy84;
yy84:   switch(yych){
        case ' ':       goto yy83;
        default:        goto yy82;
        }
yy85:   yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy81;
        default:        goto yy69;
        }
yy86:   ++YYCURSOR;
        goto yy87;
yy87:
#line 436 "token.re"
{   if ( *YYTOKEN == ':' && lvl->status != syck_lvl_imap ) lvl->status = syck_lvl_map;
                        YYPOS(1); 
                        return YYTOKEN[0]; 
                    }
#line 1076 "<stdout>"
yy88:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy89;
yy89:   switch(yych){
        case ' ':       goto yy88;
        default:        goto yy87;
        }
yy90:   yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy86;
        default:        goto yy69;
        }
yy91:   yyaccept = 0;
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy92;
yy92:   switch(yych){
        case 0x0A:      case ' ':       goto yy91;
        case 0x0D:      goto yy93;
        default:        goto yy38;
        }
yy93:   ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy91;
        default:        goto yy69;
        }
}
#line 501 "token.re"

    }

Directive:
    {
        YYTOKTMP = YYCURSOR;


#line 1117 "<stdout>"
{
        YYCTYPE yych;
        unsigned int yyaccept = 0;
        goto yy94;
        ++YYCURSOR;
yy94:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch(yych){
        case 0x00:      goto yy96;
        case 0x09:      case ' ':       goto yy99;
        case '%':       goto yy97;
        default:        goto yy101;
        }
yy96:   YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy98;
        }
yy97:   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 yy104;
        default:        goto yy98;
        }
yy98:
#line 514 "token.re"
{   YYCURSOR = YYTOKTMP;
                        return YAML_DOCSEP;
                    }
#line 1221 "<stdout>"
yy99:   ++YYCURSOR;
        yych = *YYCURSOR;
        goto yy103;
yy100:
#line 512 "token.re"
{   goto Directive; }
#line 1228 "<stdout>"
yy101:  yych = *++YYCURSOR;
        goto yy98;
yy102:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy103;
yy103:  switch(yych){
        case 0x09:      case ' ':       goto yy102;
        default:        goto yy100;
        }
yy104:  ++YYCURSOR;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        goto yy105;
yy105:  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 yy104;
        case ':':       goto yy106;
        default:        goto yy96;
        }
yy106:  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 yy107;
        default:        goto yy96;
        }
yy107:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy108;
yy108:  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 yy107;
        default:        goto yy109;
        }
yy109:
#line 510 "token.re"
{   goto Directive; }
#line 1484 "<stdout>"
}
#line 517 "token.re"


    }

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: 
        YYTOKEN = YYCURSOR;

Plain3:


#line 1509 "<stdout>"
{
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy110;
        ++YYCURSOR;
yy110:
        if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
        yych = *YYCURSOR;
        switch(yych){
        case 0x00:      goto yy124;
        case 0x09:      goto yy126;
        case 0x0A:      goto yy112;
        case 0x0D:      goto yy114;
        case ' ':       goto yy122;
        case ',':       goto yy117;
        case ':':       goto yy116;
        case ']':       goto yy120;
        case '}':       goto yy118;
        default:        goto yy127;
        }
yy112:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        goto yy142;
yy113:
#line 540 "token.re"
{   int indt_len, nl_count = 0;
                        SyckLevel *lvl;
                        char *tok = YYTOKEN;
                        GOBBLE_UP_YAML_INDENT( indt_len, tok );
                        lvl = CURRENT_LEVEL();

                        if ( indt_len <= parentIndent )
                        {
                            RETURN_IMPLICIT();
                        }

                        while ( YYTOKEN < YYCURSOR )
                        {
                            int nl_len = newline_len( YYTOKEN++ );
                            if ( nl_len )
                            {
                                nl_count++;
                                YYTOKEN += nl_len - 1;
                            }
                        }
                        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; 
                    }
#line 1570 "<stdout>"
yy114:  ++YYCURSOR;
        switch((yych = *YYCURSOR)) {
        case 0x0A:      goto yy141;
        default:        goto yy115;
        }
yy115:
#line 627 "token.re"
{   QUOTECATS(qstr, qcapa, qidx, YYTOKEN, YYCURSOR - YYTOKEN);
                        goto Plain2;
                    }
#line 1581 "<stdout>"
yy116:  yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        switch(yych){
        case 0x0A:      goto yy136;
        case 0x0D:      goto yy140;
        case ' ':       goto yy138;
        default:        goto yy115;
        }
yy117:  yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        switch(yych){
        case 0x0A:      goto yy130;
        case 0x0D:      goto yy134;
        case ' ':       goto yy132;
        default:        goto yy115;
        }
yy118:  ++YYCURSOR;
        goto yy119;
yy119:
#line 589 "token.re"
{   if ( plvl->status != syck_lvl_imap )
                        {
                            PLAIN_NOT_INL();
                        }
                        else
                        {
                            PLAIN_IS_INL();
                        }
                        RETURN_IMPLICIT();
                    }
#line 1612 "<stdout>"
yy120:  ++YYCURSOR;
        goto yy121;
yy121:
#line 600 "token.re"
{   if ( plvl->status != syck_lvl_iseq )
                        {
                            PLAIN_NOT_INL();
                        }
                        else
                        {
                            PLAIN_IS_INL();
                        }
                        RETURN_IMPLICIT();
                    }
#line 1627 "<stdout>"
yy122:  ++YYCURSOR;
        switch((yych = *YYCURSOR)) {
        case '#':       goto yy128;
        default:        goto yy123;
        }
yy123:
#line 617 "token.re"
{   if ( qidx == 0 ) 
                        {
                            goto Plain2;
                        }
                        else
                        {
                            goto Plain3; 
                        }
                    }
#line 1644 "<stdout>"
yy124:  ++YYCURSOR;
        goto yy125;
yy125:
#line 615 "token.re"
{   RETURN_IMPLICIT(); }
#line 1650 "<stdout>"
yy126:  yych = *++YYCURSOR;
        goto yy123;
yy127:  yych = *++YYCURSOR;
        goto yy115;
yy128:  ++YYCURSOR;
        goto yy129;
yy129:
#line 611 "token.re"
{   eat_comments( parser ); 
                        RETURN_IMPLICIT();
                    }
#line 1662 "<stdout>"
yy130:  ++YYCURSOR;
        goto yy131;
yy131:
#line 578 "token.re"
{   if ( plvl->status != syck_lvl_iseq && plvl->status != syck_lvl_imap )
                        {
                            PLAIN_NOT_INL();
                        }
                        else
                        {
                            PLAIN_IS_INL();
                        }
                        RETURN_IMPLICIT();
                    }
#line 1677 "<stdout>"
yy132:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy133;
yy133:  switch(yych){
        case ' ':       goto yy132;
        default:        goto yy131;
        }
yy134:  yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy130;
        default:        goto yy135;
        }
yy135:  YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy113;
        case 1: goto yy115;
        }
yy136:  ++YYCURSOR;
        goto yy137;
yy137:
#line 576 "token.re"
{   RETURN_IMPLICIT(); }
#line 1701 "<stdout>"
yy138:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy139;
yy139:  switch(yych){
        case ' ':       goto yy138;
        default:        goto yy137;
        }
yy140:  yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy136;
        default:        goto yy135;
        }
yy141:  yyaccept = 0;
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy142;
yy142:  switch(yych){
        case 0x0A:      case ' ':       goto yy141;
        case 0x0D:      goto yy143;
        default:        goto yy113;
        }
yy143:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy141;
        default:        goto yy135;
        }
}
#line 631 "token.re"

    }

SingleQuote:
    {
        int qidx = 0;
        int qcapa = 100;
        char *qstr = S_ALLOC_N( char, qcapa );

SingleQuote2:
        YYTOKEN = YYCURSOR;


#line 1747 "<stdout>"
{
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy144;
        ++YYCURSOR;
yy144:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch(yych){
        case 0x00:      goto yy152;
        case 0x0A:      goto yy146;
        case 0x0D:      goto yy148;
        case '\'':      goto yy150;
        default:        goto yy153;
        }
yy146:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        goto yy157;
yy147:
#line 645 "token.re"
{   int indt_len;
                        int nl_count = 0;
                        SyckLevel *lvl;
                        GOBBLE_UP_YAML_INDENT( indt_len, YYTOKEN );
                        lvl = CURRENT_LEVEL();

                        if ( lvl->status != syck_lvl_str )
                        {
                            ADD_LEVEL( indt_len, syck_lvl_str );
                        }
                        else if ( indt_len < lvl->spaces )
                        {
                            /* Error! */
                        }

                        while ( YYTOKEN < YYCURSOR )
                        {
                            int nl_len = newline_len( YYTOKEN++ );
                            if ( nl_len )
                            {
                                nl_count++;
                                YYTOKEN += nl_len - 1;
                            }
                        }
                        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; 
                    }
#line 1807 "<stdout>"
yy148:  ++YYCURSOR;
        switch((yych = *YYCURSOR)) {
        case 0x0A:      goto yy156;
        default:        goto yy149;
        }
yy149:
#line 712 "token.re"
{   QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); 
                        goto SingleQuote2; 
                    }
#line 1818 "<stdout>"
yy150:  ++YYCURSOR;
        switch((yych = *YYCURSOR)) {
        case '\'':      goto yy154;
        default:        goto yy151;
        }
yy151:
#line 689 "token.re"
{   SyckLevel *lvl;
                        SyckNode *n = syck_alloc_str();
                        lvl = CURRENT_LEVEL();

                        if ( lvl->status == syck_lvl_str )
                        {
                            POP_LEVEL();
                        }
                        if ( ((SyckParser *)parser)->taguri_expansion == 1 )
                        {
                            n->type_id = syck_taguri( YAML_DOMAIN, "str", 3 );
                        }
                        else
                        {
                            n->type_id = syck_strndup( "str", 3 );
                        }
                        n->data.str->ptr = qstr;
                        n->data.str->len = qidx;
                        n->data.str->style = scalar_1quote;
                        sycklval->nodeData = n;
                        return YAML_PLAIN; 
                    }
#line 1848 "<stdout>"
yy152:  yych = *++YYCURSOR;
        goto yy151;
yy153:  yych = *++YYCURSOR;
        goto yy149;
yy154:  ++YYCURSOR;
        goto yy155;
yy155:
#line 685 "token.re"
{   QUOTECAT(qstr, qcapa, qidx, '\'');
                        goto SingleQuote2; 
                    }
#line 1860 "<stdout>"
yy156:  yyaccept = 0;
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy157;
yy157:  switch(yych){
        case 0x0A:      case ' ':       goto yy156;
        case 0x0D:      goto yy158;
        default:        goto yy147;
        }
yy158:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy156;
        default:        goto yy159;
        }
yy159:  YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy147;
        }
}
#line 716 "token.re"


    }


DoubleQuote:
    {
        int keep_nl = 1;
        int qidx = 0;
        int qcapa = 100;
        char *qstr = S_ALLOC_N( char, qcapa );

DoubleQuote2:
        YYTOKEN = YYCURSOR;



#line 1901 "<stdout>"
{
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy160;
        ++YYCURSOR;
yy160:
        if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
        yych = *YYCURSOR;
        switch(yych){
        case 0x00:      goto yy167;
        case 0x0A:      goto yy162;
        case 0x0D:      goto yy164;
        case '"':       goto yy169;
        case '\\':      goto yy166;
        default:        goto yy170;
        }
yy162:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        goto yy184;
yy163:
#line 734 "token.re"
{   int indt_len;
                        int nl_count = 0;
                        SyckLevel *lvl;
                        GOBBLE_UP_YAML_INDENT( indt_len, YYTOKEN );
                        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 ( YYTOKEN < YYCURSOR )
                            {
                                int nl_len = newline_len( YYTOKEN++ );
                                if ( nl_len )
                                {
                                    nl_count++;
                                    YYTOKEN += nl_len - 1;
                                }
                            }
                            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; 
                    }
#line 1966 "<stdout>"
yy164:  ++YYCURSOR;
        switch((yych = *YYCURSOR)) {
        case 0x0A:      goto yy183;
        default:        goto yy165;
        }
yy165:
#line 820 "token.re"
{   QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); 
                        goto DoubleQuote2; 
                    }
#line 1977 "<stdout>"
yy166:  yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        switch(yych){
        case 0x0A:      goto yy174;
        case 0x0D:      goto yy176;
        case ' ':       goto yy171;
        case '"':       case '0':       case '\\':      case 'a':
        case 'b':       case 'e':
        case 'f':       case 'n':       case 'r':       case 't':       case 'v':       goto yy178;
        case 'x':       goto yy177;
        default:        goto yy165;
        }
yy167:  ++YYCURSOR;
        goto yy168;
yy168:
#line 797 "token.re"
{   SyckLevel *lvl;
                        SyckNode *n = syck_alloc_str();
                        lvl = CURRENT_LEVEL();

                        if ( lvl->status == syck_lvl_str )
                        {
                            POP_LEVEL();
                        }
                        if ( ((SyckParser *)parser)->taguri_expansion == 1 )
                        {
                            n->type_id = syck_taguri( YAML_DOMAIN, "str", 3 );
                        }
                        else
                        {
                            n->type_id = syck_strndup( "str", 3 );
                        }
                        n->data.str->ptr = qstr;
                        n->data.str->len = qidx;
                        n->data.str->style = scalar_2quote;
                        sycklval->nodeData = n;
                        return YAML_PLAIN; 
                    }
#line 2016 "<stdout>"
yy169:  yych = *++YYCURSOR;
        goto yy168;
yy170:  yych = *++YYCURSOR;
        goto yy165;
yy171:  ++YYCURSOR;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        goto yy172;
yy172:  switch(yych){
        case 0x0A:      goto yy174;
        case 0x0D:      goto yy176;
        case ' ':       goto yy171;
        default:        goto yy173;
        }
yy173:  YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy163;
        case 1: goto yy165;
        }
yy174:  ++YYCURSOR;
        goto yy175;
yy175:
#line 792 "token.re"
{   keep_nl = 0;
                        YYCURSOR--;
                        goto DoubleQuote2; 
                    }
#line 2044 "<stdout>"
yy176:  yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy174;
        default:        goto yy173;
        }
yy177:  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 yy180;
        default:        goto yy173;
        }
yy178:  ++YYCURSOR;
        goto yy179;
yy179:
#line 778 "token.re"
{   char ch = *( YYCURSOR - 1 );
                        QUOTECAT(qstr, qcapa, qidx, escape_seq( ch ));
                        goto DoubleQuote2; 
                    }
#line 2082 "<stdout>"
yy180:  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 yy181;
        default:        goto yy173;
        }
yy181:  ++YYCURSOR;
        goto yy182;
yy182:
#line 783 "token.re"
{   long ch;
                        char *chr_text = syck_strndup( YYTOKEN, 4 );
                        chr_text[0] = '0';
                        ch = strtol( chr_text, NULL, 16 );
                        free( chr_text );
                        QUOTECAT(qstr, qcapa, qidx, ch);
                        goto DoubleQuote2; 
                    }
#line 2119 "<stdout>"
yy183:  yyaccept = 0;
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy184;
yy184:  switch(yych){
        case 0x0A:      case ' ':       goto yy183;
        case 0x0D:      goto yy185;
        default:        goto yy163;
        }
yy185:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy183;
        default:        goto yy173;
        }
}
#line 824 "token.re"

    }

TransferMethod:
    {
        int qidx = 0;
        int qcapa = 100;
        char *qstr = S_ALLOC_N( char, qcapa );

TransferMethod2:
        YYTOKTMP = YYCURSOR;


#line 2152 "<stdout>"
{
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy186;
        ++YYCURSOR;
yy186:
        if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
        yych = *YYCURSOR;
        switch(yych){
        case 0x00:      goto yy188;
        case 0x0A:      goto yy190;
        case 0x0D:      goto yy192;
        case ' ':       goto yy191;
        case '\\':      goto yy194;
        default:        goto yy195;
        }
yy188:  ++YYCURSOR;
        goto yy189;
yy189:
#line 838 "token.re"
{   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; 
                    }
#line 2222 "<stdout>"
yy190:  yych = *++YYCURSOR;
        goto yy189;
yy191:  yych = *++YYCURSOR;
        goto yy204;
yy192:  ++YYCURSOR;
        switch((yych = *YYCURSOR)) {
        case 0x0A:      goto yy188;
        default:        goto yy193;
        }
yy193:
#line 905 "token.re"
{   QUOTECAT(qstr, qcapa, qidx, *(YYCURSOR - 1)); 
                        goto TransferMethod2;
                    }
#line 2237 "<stdout>"
yy194:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        switch(yych){
        case '"':       case '0':       case '\\':      case 'a':
        case 'b':       case 'e':
        case 'f':       case 'n':       case 'r':       case 't':       case 'v':       goto yy198;
        case 'x':       goto yy196;
        default:        goto yy193;
        }
yy195:  yych = *++YYCURSOR;
        goto yy193;
yy196:  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 yy200;
        default:        goto yy197;
        }
yy197:  YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy193;
        }
yy198:  ++YYCURSOR;
        goto yy199;
yy199:
#line 891 "token.re"
{  char ch = *( YYCURSOR - 1 );
                        QUOTECAT(qstr, qcapa, qidx, escape_seq( ch ));
                        goto TransferMethod2;
                    }
#line 2285 "<stdout>"
yy200:  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 yy201;
        default:        goto yy197;
        }
yy201:  ++YYCURSOR;
        goto yy202;
yy202:
#line 896 "token.re"
{   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;
                    }
#line 2322 "<stdout>"
yy203:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy204;
yy204:  switch(yych){
        case ' ':       goto yy203;
        default:        goto yy189;
        }
}
#line 910 "token.re"

    }

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 = -1;

        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 );
            }
        }

        qstr[0] = '\0';
        YYTOKEN = YYCURSOR;

ScalarBlock2:
        YYTOKEN = YYCURSOR;


#line 2378 "<stdout>"
{
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy205;
        ++YYCURSOR;
yy205:
        if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
        yych = *YYCURSOR;
        switch(yych){
        case 0x00:      goto yy213;
        case 0x0A:      goto yy207;
        case 0x0D:      goto yy209;
        case '#':       goto yy211;
        case '-':       goto yy215;
        default:        goto yy216;
        }
yy207:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        goto yy226;
yy208:
#line 956 "token.re"
{   char *pacer;
                        char *tok = YYTOKEN;
                        int indt_len = 0, nl_count = 0, fold_nl = 0, nl_begin = 0;
                        GOBBLE_UP_YAML_INDENT( indt_len, tok );
                        lvl = CURRENT_LEVEL();

                        if ( lvl->status != syck_lvl_block )
                        {
                            GET_TRUE_YAML_INDENT(parentIndent);
                            if ( forceIndent > 0 ) forceIndent += parentIndent;
                            if ( indt_len > parentIndent )
                            {
                                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
                            {
                                YYCURSOR = YYTOKEN;
                                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 = YYTOKEN;
                        while ( pacer < YYCURSOR )
                        {
                            int nl_len = newline_len( pacer++ );
                            if ( nl_len )
                            {
                                nl_count++;
                                pacer += nl_len - 1;
                            }
                        }

                        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 = YYTOKEN;
                            RETURN_YAML_BLOCK();
                        }
                        goto ScalarBlock2;
                    }
#line 2474 "<stdout>"
yy209:  ++YYCURSOR;
        switch((yych = *YYCURSOR)) {
        case 0x0A:      goto yy225;
        default:        goto yy210;
        }
yy210:
#line 1070 "token.re"
{   QUOTECAT(qstr, qcapa, qidx, *YYTOKEN);
                        goto ScalarBlock2;
                    }
#line 2485 "<stdout>"
yy211:  ++YYCURSOR;
        goto yy212;
yy212:
#line 1032 "token.re"
{   lvl = CURRENT_LEVEL();
                        if ( lvl->status != syck_lvl_block )
                        {
                            eat_comments( parser );
                            YYTOKEN = YYCURSOR;
                        }
                        else
                        {
                            QUOTECAT(qstr, qcapa, qidx, *YYTOKEN);
                        }
                        goto ScalarBlock2;
                    }
#line 2502 "<stdout>"
yy213:  ++YYCURSOR;
        goto yy214;
yy214:
#line 1046 "token.re"
{   YYCURSOR--;
                        POP_LEVEL();
                        RETURN_YAML_BLOCK(); 
                    }
#line 2511 "<stdout>"
yy215:  yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
        switch(yych){
        case '-':       goto yy217;
        default:        goto yy210;
        }
yy216:  yych = *++YYCURSOR;
        goto yy210;
yy217:  yych = *++YYCURSOR;
        switch(yych){
        case '-':       goto yy219;
        default:        goto yy218;
        }
yy218:  YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy208;
        case 1: goto yy210;
        }
yy219:  yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy220;
        case 0x0D:      goto yy224;
        case ' ':       goto yy222;
        default:        goto yy218;
        }
yy220:  ++YYCURSOR;
        goto yy221;
yy221:
#line 1051 "token.re"
{   if ( YYTOKEN == YYLINEPTR )
                        {
                            if ( blockType == BLOCK_FOLD && qidx > 0 )
                            {
                                qidx -= 1;
                            }
                            QUOTECAT(qstr, qcapa, qidx, '\n');
                            POP_LEVEL();
                            YYCURSOR = YYTOKEN;
                            RETURN_YAML_BLOCK();
                        }
                        else
                        {
                            QUOTECAT(qstr, qcapa, qidx, *YYTOKEN);
                            YYCURSOR = YYTOKEN + 1;
                            goto ScalarBlock2;
                        }
                    }
#line 2559 "<stdout>"
yy222:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy223;
yy223:  switch(yych){
        case ' ':       goto yy222;
        default:        goto yy221;
        }
yy224:  yych = *++YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy220;
        default:        goto yy218;
        }
yy225:  yyaccept = 0;
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy226;
yy226:  switch(yych){
        case 0x0A:      case ' ':       goto yy225;
        case 0x0D:      goto yy227;
        default:        goto yy208;
        }
yy227:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy225;
        default:        goto yy218;
        }
}
#line 1075 "token.re"

    }

    return 0;

}

void
eat_comments( SyckParser *parser )
{
Comment:
    {
        YYTOKEN = YYCURSOR;


#line 2607 "<stdout>"
{
        YYCTYPE yych;
        unsigned int yyaccept;
        goto yy228;
        ++YYCURSOR;
yy228:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        switch(yych){
        case 0x00:      goto yy230;
        case 0x0A:      goto yy232;
        case 0x0D:      goto yy233;
        default:        goto yy235;
        }
yy230:  ++YYCURSOR;
        goto yy231;
yy231:
#line 1091 "token.re"
{   YYCURSOR = YYTOKEN;
                        return;
                    }
#line 2629 "<stdout>"
yy232:  yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        goto yy237;
yy233:  ++YYCURSOR;
        switch((yych = *YYCURSOR)) {
        case 0x0A:      goto yy236;
        default:        goto yy234;
        }
yy234:
#line 1095 "token.re"
{   goto Comment; 
                    }
#line 2642 "<stdout>"
yy235:  yych = *++YYCURSOR;
        goto yy234;
yy236:  yyaccept = 0;
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        goto yy237;
yy237:  switch(yych){
        case 0x0A:      goto yy236;
        case 0x0D:      goto yy238;
        default:        goto yy231;
        }
yy238:  ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        switch(yych){
        case 0x0A:      goto yy236;
        default:        goto yy239;
        }
yy239:  YYCURSOR = YYMARKER;
        switch(yyaccept){
        case 0: goto yy231;
        }
}
#line 1098 "token.re"


    }

}

char
escape_seq( char ch )
{
    switch ( ch )
    {
        case '0': return '\0';
        case 'a': return 7;
        case 'b': return '\010';
        case 'e': return '\033';
        case 'f': return '\014';
        case 'n': return '\n';
        case 'r': return '\015';
        case 't': return '\t';
        case 'v': return '\013';
        default: return ch;
    }
}

int
is_newline( char *ptr )
{
    return newline_len( ptr );
}

int
newline_len( char *ptr )
{
    if ( *ptr == '\n' )
        return 1;
    
    if ( *ptr == '\r' && *( ptr + 1 ) == '\n' )
        return 2;

    return 0;
}

int 
syckwrap()
{
    return 1;
}

void 
syckerror( const 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);
}


/* [previous][next][first][last][top][bottom][index][help] */