/* Generated by re2c 0.5 on Mon Oct 13 18:40:21 2003 */
#line 1 "token.re"
/*
 * token.re
 *
 * $Author: whythluckystiff $
 * $Date: 2003/10/14 05:01:25 $
 *
 * Copyright (C) 2003 why the lucky stiff
 */
#include "syck.h"
#include "gram.h"

/*
 * Allocate quoted strings in chunks
 */
#define QUOTELEN    1024

/*
 * They do my bidding...
 */
#define YYCTYPE     char
#define YYCURSOR    parser->cursor
#define YYMARKER    parser->marker
#define YYLIMIT     parser->limit
#define YYTOKEN     parser->token
#define YYTOKTMP    parser->toktmp
#define YYLINEPTR   parser->lineptr
#define YYLINECTPTR parser->linectptr
#define YYLINE      parser->linect
#define YYFILL(n)   syck_parser_read(parser)

/*
 * Repositions the cursor at `n' offset from the token start.
 * Only works in `Header' and `Document' sections.
 */
#define YYPOS(n)    YYCURSOR = YYTOKEN + n

/*
 * Track line numbers
 */
#define NEWLINE(ptr)    YYLINEPTR = ptr + 1; if ( YYLINEPTR > YYLINECTPTR ) { YYLINE++; YYLINECTPTR = YYLINEPTR; }

/*
 * I like seeing the level operations as macros...
 */
#define ADD_LEVEL(len, status)  syck_parser_add_level( parser, len, status )
#define POP_LEVEL()     syck_parser_pop_level( parser )
#define CURRENT_LEVEL() syck_parser_current_level( parser )

/*
 * Force a token next time around 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);
}

