From 5571c7315e118b339c6b6590e666dfda68a7327d Mon Sep 17 00:00:00 2001 From: tenderlove Date: Wed, 22 Aug 2012 17:43:16 +0000 Subject: [PATCH] * ext/syck: removed. Fixes [ruby-core:43360] * test/syck: removed. * lib/yaml.rb: only require psych, show a warning if people try to set the engine to syck. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36786 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 + NEWS | 4 + ext/Setup | 1 - ext/Setup.atheos | 1 - ext/Setup.emx | 1 - ext/Setup.nacl | 1 - ext/Setup.nt | 1 - ext/syck/bytecode.c | 1165 ----------- ext/syck/depend | 12 - ext/syck/emitter.c | 1247 ------------ ext/syck/extconf.rb | 5 - ext/syck/gram.c | 1894 ------------------ ext/syck/gram.h | 79 - ext/syck/handler.c | 173 -- ext/syck/implicit.c | 2990 ----------------------------- ext/syck/lib/syck.rb | 447 ----- ext/syck/lib/syck/baseemitter.rb | 242 --- ext/syck/lib/syck/basenode.rb | 222 --- ext/syck/lib/syck/constants.rb | 45 - ext/syck/lib/syck/encoding.rb | 35 - ext/syck/lib/syck/error.rb | 34 - ext/syck/lib/syck/loader.rb | 14 - ext/syck/lib/syck/rubytypes.rb | 467 ----- ext/syck/lib/syck/stream.rb | 41 - ext/syck/lib/syck/stringio.rb | 85 - ext/syck/lib/syck/syck.rb | 16 - ext/syck/lib/syck/tag.rb | 95 - ext/syck/lib/syck/types.rb | 192 -- ext/syck/lib/syck/yamlnode.rb | 54 - ext/syck/lib/syck/ypath.rb | 54 - ext/syck/lib/yaml/syck.rb | 14 - ext/syck/node.c | 407 ---- ext/syck/rubyext.c | 2328 ---------------------- ext/syck/syck.c | 524 ----- ext/syck/syck.h | 453 ----- ext/syck/token.c | 2724 -------------------------- ext/syck/yaml2byte.c | 259 --- ext/syck/yamlbyte.h | 171 -- lib/yaml.rb | 74 +- test/psych/test_engine_manager.rb | 10 - test/syck/test_array.rb | 24 - test/syck/test_boolean.rb | 37 - test/syck/test_class.rb | 27 - test/syck/test_engine_manager.rb | 3 - test/syck/test_exception.rb | 46 - test/syck/test_hash.rb | 29 - test/syck/test_null.rb | 20 - test/syck/test_omap.rb | 56 - test/syck/test_set.rb | 31 - test/syck/test_string.rb | 45 - test/syck/test_struct.rb | 42 - test/syck/test_symbol.rb | 22 - test/syck/test_time.rb | 24 - test/syck/test_yaml.rb | 1414 -------------- test/syck/test_yaml_properties.rb | 64 - test/syck/test_yamldbm.rb | 194 -- test/syck/test_yamlstore.rb | 87 - 57 files changed, 33 insertions(+), 18722 deletions(-) delete mode 100644 ext/syck/bytecode.c delete mode 100644 ext/syck/depend delete mode 100644 ext/syck/emitter.c delete mode 100644 ext/syck/extconf.rb delete mode 100644 ext/syck/gram.c delete mode 100644 ext/syck/gram.h delete mode 100644 ext/syck/handler.c delete mode 100644 ext/syck/implicit.c delete mode 100644 ext/syck/lib/syck.rb delete mode 100644 ext/syck/lib/syck/baseemitter.rb delete mode 100644 ext/syck/lib/syck/basenode.rb delete mode 100644 ext/syck/lib/syck/constants.rb delete mode 100644 ext/syck/lib/syck/encoding.rb delete mode 100644 ext/syck/lib/syck/error.rb delete mode 100644 ext/syck/lib/syck/loader.rb delete mode 100644 ext/syck/lib/syck/rubytypes.rb delete mode 100644 ext/syck/lib/syck/stream.rb delete mode 100644 ext/syck/lib/syck/stringio.rb delete mode 100644 ext/syck/lib/syck/syck.rb delete mode 100644 ext/syck/lib/syck/tag.rb delete mode 100644 ext/syck/lib/syck/types.rb delete mode 100644 ext/syck/lib/syck/yamlnode.rb delete mode 100644 ext/syck/lib/syck/ypath.rb delete mode 100644 ext/syck/lib/yaml/syck.rb delete mode 100644 ext/syck/node.c delete mode 100644 ext/syck/rubyext.c delete mode 100644 ext/syck/syck.c delete mode 100644 ext/syck/syck.h delete mode 100644 ext/syck/token.c delete mode 100644 ext/syck/yaml2byte.c delete mode 100644 ext/syck/yamlbyte.h delete mode 100644 test/syck/test_array.rb delete mode 100644 test/syck/test_boolean.rb delete mode 100644 test/syck/test_class.rb delete mode 100644 test/syck/test_engine_manager.rb delete mode 100644 test/syck/test_exception.rb delete mode 100644 test/syck/test_hash.rb delete mode 100644 test/syck/test_null.rb delete mode 100644 test/syck/test_omap.rb delete mode 100644 test/syck/test_set.rb delete mode 100644 test/syck/test_string.rb delete mode 100644 test/syck/test_struct.rb delete mode 100644 test/syck/test_symbol.rb delete mode 100644 test/syck/test_time.rb delete mode 100644 test/syck/test_yaml.rb delete mode 100644 test/syck/test_yaml_properties.rb delete mode 100644 test/syck/test_yamldbm.rb delete mode 100644 test/syck/test_yamlstore.rb diff --git a/ChangeLog b/ChangeLog index 73b938db93..c9f504c224 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Thu Aug 23 02:37:35 2012 Aaron Patterson + + * ext/syck: removed. Fixes [ruby-core:43360] + + * test/syck: removed. + + * lib/yaml.rb: only require psych, show a warning if people try to set + the engine to syck. + Thu Aug 23 01:46:53 2012 Aaron Patterson * insns.def: search up the cf stack for an object that is an instance diff --git a/NEWS b/NEWS index 5715b552b4..7b05b9ef89 100644 --- a/NEWS +++ b/NEWS @@ -172,6 +172,10 @@ with all sufficient information, see the ChangeLog file. private key to PEM with a password - it has to be at least four characters long. +* yaml + * Syck has been removed. YAML now completely depends on libyaml being + installed. + === Language changes * Added %i and %I for symbol list creation (similar to %w and %W). diff --git a/ext/Setup b/ext/Setup index 65b41ce43e..6870035e45 100644 --- a/ext/Setup +++ b/ext/Setup @@ -24,7 +24,6 @@ #socket #stringio #strscan -#syck #syslog #tk #win32ole diff --git a/ext/Setup.atheos b/ext/Setup.atheos index 450b609060..c4028ef1f2 100644 --- a/ext/Setup.atheos +++ b/ext/Setup.atheos @@ -25,7 +25,6 @@ sdbm socket stringio strscan -syck syslog #tk #win32ole diff --git a/ext/Setup.emx b/ext/Setup.emx index 225c6a04c5..bf9e2e32f9 100644 --- a/ext/Setup.emx +++ b/ext/Setup.emx @@ -25,7 +25,6 @@ racc/cparse socket stringio strscan -#syck #syslog #tk #win32ole diff --git a/ext/Setup.nacl b/ext/Setup.nacl index 3e252fd765..3e7f469f92 100644 --- a/ext/Setup.nacl +++ b/ext/Setup.nacl @@ -43,7 +43,6 @@ # #socket # stringio # strscan -# syck # #syslog # #tk # #tk/tkutil diff --git a/ext/Setup.nt b/ext/Setup.nt index 5c7ba2b3f8..8aec238152 100644 --- a/ext/Setup.nt +++ b/ext/Setup.nt @@ -25,7 +25,6 @@ sdbm socket stringio strscan -syck #syslog #tk win32ole diff --git a/ext/syck/bytecode.c b/ext/syck/bytecode.c deleted file mode 100644 index 3310713e5c..0000000000 --- a/ext/syck/bytecode.c +++ /dev/null @@ -1,1165 +0,0 @@ -/* Generated by re2c 0.9.10 on Mon Sep 19 23:21:26 2005 */ -#line 1 "bytecode.re" -/* - * bytecode.re - * - * $Author$ - * - * Copyright (C) 2003 why the lucky stiff - */ -#include "ruby/ruby.h" -#include "syck.h" -#include "gram.h" - -#define QUOTELEN 128 - -/* - * 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) - -extern SyckParser *syck_parser_ptr; - -char *get_inline( SyckParser *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 CHK_NL(ptr) if ( *( ptr - 1 ) == '\n' && ptr > YYLINECTPTR ) { YYLINEPTR = ptr; 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; - -/* - * Adding levels in bytecode requires us to make sure - * we've got all our tokens worked out. - */ -#define ADD_BYTE_LEVEL(lvl, len, s ) \ - switch ( lvl->status ) \ - { \ - case syck_lvl_seq: \ - lvl->ncount++; \ - ADD_LEVEL(len, syck_lvl_open); \ - YYPOS(0); \ - return '-'; \ - \ - case syck_lvl_map: \ - lvl->ncount++; \ - ADD_LEVEL(len, s); \ - break; \ - \ - case syck_lvl_open: \ - lvl->status = s; \ - break; \ - \ - default: \ - ADD_LEVEL(len, s); \ - break; \ - } - -/* - * 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, lvl_type, 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, lvl_type ); \ - 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 string items and manages allocation - * to the string - */ -#define CAT(s, c, i, l) \ - { \ - if ( i + 1 >= c ) \ - { \ - c += QUOTELEN; \ - S_REALLOC_N( s, char, c ); \ - } \ - s[i++] = l; \ - s[i] = '\0'; \ - } - -/* - * Parser for standard YAML Bytecode [UTF-8] - */ -int -sycklex_bytecode_utf8( YYSTYPE *sycklval, SyckParser *parser ) -{ - SyckLevel *lvl; - 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 172 "bytecode.re" - - - lvl = CURRENT_LEVEL(); - if ( lvl->status == syck_lvl_doc ) - { - goto Document; - } - -/* Header: */ - - YYTOKEN = YYCURSOR; - - -#line 165 "" -{ - YYCTYPE yych; - unsigned int yyaccept = 0; - goto yy0; - ++YYCURSOR; -yy0: - if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); - yych = *YYCURSOR; - switch(yych){ - case 0x00: goto yy2; - case 'D': goto yy3; - default: goto yy5; - } -yy2: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy4; - } -yy3: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 0x0A: goto yy6; - case 0x0D: goto yy8; - default: goto yy4; - } -yy4: -#line 199 "bytecode.re" -{ YYPOS(0); - goto Document; - } -#line 195 "" -yy5: yych = *++YYCURSOR; - goto yy4; -yy6: ++YYCURSOR; - goto yy7; -yy7: -#line 186 "bytecode.re" -{ if ( lvl->status == syck_lvl_header ) - { - CHK_NL(YYCURSOR); - goto Directive; - } - else - { - ENSURE_YAML_IEND(lvl, -1); - YYPOS(0); - return 0; - } - } -#line 214 "" -yy8: ++YYCURSOR; - switch((yych = *YYCURSOR)) { - case 0x0A: goto yy6; - default: goto yy2; - } -} -#line 203 "bytecode.re" - - -Document: - { - lvl = CURRENT_LEVEL(); - if ( lvl->status == syck_lvl_header ) - { - lvl->status = syck_lvl_doc; - } - - YYTOKEN = YYCURSOR; - - -#line 235 "" -{ - YYCTYPE yych; - goto yy9; - ++YYCURSOR; -yy9: - if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); - yych = *YYCURSOR; - switch(yych){ - case 0x00: goto yy30; - case 0x0A: goto yy27; - case 0x0D: goto yy29; - case 'A': goto yy19; - case 'D': goto yy12; - case 'E': goto yy16; - case 'M': goto yy14; - case 'P': goto yy13; - case 'Q': goto yy15; - case 'R': goto yy21; - case 'S': goto yy17; - case 'T': goto yy23; - case 'c': goto yy25; - default: goto yy11; - } -yy11:yy12: yych = *++YYCURSOR; - switch(yych){ - case 0x0A: goto yy41; - case 0x0D: goto yy44; - default: goto yy11; - } -yy13: yych = *++YYCURSOR; - switch(yych){ - case 0x0A: goto yy41; - case 0x0D: goto yy43; - default: goto yy11; - } -yy14: yych = *++YYCURSOR; - switch(yych){ - case 0x0A: goto yy38; - case 0x0D: goto yy40; - default: goto yy11; - } -yy15: yych = *++YYCURSOR; - switch(yych){ - case 0x0A: goto yy35; - case 0x0D: goto yy37; - default: goto yy11; - } -yy16: yych = *++YYCURSOR; - switch(yych){ - case 0x0A: goto yy32; - case 0x0D: goto yy34; - default: goto yy11; - } -yy17: ++YYCURSOR; - goto yy18; -yy18: -#line 288 "bytecode.re" -{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_str); - goto Scalar; - } -#line 296 "" -yy19: ++YYCURSOR; - goto yy20; -yy20: -#line 292 "bytecode.re" -{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_open); - sycklval->name = get_inline( parser ); - syck_hdlr_remove_anchor( parser, sycklval->name ); - CHK_NL(YYCURSOR); - return YAML_ANCHOR; - } -#line 307 "" -yy21: ++YYCURSOR; - goto yy22; -yy22: -#line 299 "bytecode.re" -{ ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_str); - sycklval->name = get_inline( parser ); - POP_LEVEL(); - if ( *( YYCURSOR - 1 ) == '\n' ) YYCURSOR--; - return YAML_ALIAS; - } -#line 318 "" -yy23: ++YYCURSOR; - goto yy24; -yy24: -#line 306 "bytecode.re" -{ char *qstr; - ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_open); - qstr = get_inline( parser ); - CHK_NL(YYCURSOR); - if ( qstr[0] == '!' ) - { - size_t qidx = strlen( qstr ); - if ( qstr[1] == '\0' ) - { - free( qstr ); - return YAML_ITRANSFER; - } - - lvl = CURRENT_LEVEL(); - - /* - * URL Prefixing - */ - if ( qstr[1] == '^' ) - { - sycklval->name = S_ALLOC_N( char, qidx + strlen( lvl->domain ) ); - sycklval->name[0] = '\0'; - strcat( sycklval->name, lvl->domain ); - strncat( sycklval->name, qstr + 2, qidx - 2 ); - free( qstr ); - } - else - { - char *carat = qstr + 1; - char *qend = qstr + qidx; - while ( (++carat) < qend ) - { - if ( *carat == '^' ) - break; - } - - if ( carat < qend ) - { - free( lvl->domain ); - lvl->domain = syck_strndup( qstr + 1, carat - ( qstr + 1 ) ); - 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 = S_ALLOC_N( char, strlen( qstr ) ); - sycklval->name[0] = '\0'; - S_MEMCPY( sycklval->name, qstr + 1, char, strlen( qstr ) ); - free( qstr ); - } - } - return YAML_TRANSFER; - } - sycklval->name = qstr; - return YAML_TAGURI; - } -#line 382 "" -yy25: ++YYCURSOR; - goto yy26; -yy26: -#line 366 "bytecode.re" -{ goto Comment; } -#line 388 "" -yy27: ++YYCURSOR; - goto yy28; -yy28: -#line 368 "bytecode.re" -{ CHK_NL(YYCURSOR); - if ( lvl->status == syck_lvl_seq ) - { - return YAML_INDENT; - } - else if ( lvl->status == syck_lvl_map ) - { - if ( lvl->ncount % 2 == 1 ) return ':'; - else return YAML_INDENT; - } - goto Document; - } -#line 405 "" -yy29: yych = *++YYCURSOR; - switch(yych){ - case 0x0A: goto yy27; - default: goto yy11; - } -yy30: ++YYCURSOR; - goto yy31; -yy31: -#line 381 "bytecode.re" -{ ENSURE_YAML_IEND(lvl, -1); - YYPOS(0); - return 0; - } -#line 419 "" -yy32: ++YYCURSOR; - goto yy33; -yy33: -#line 252 "bytecode.re" -{ if ( lvl->status == syck_lvl_seq && lvl->ncount == 0 ) - { - lvl->ncount++; - YYPOS(0); - FORCE_NEXT_TOKEN( ']' ); - return '['; - } - else if ( lvl->status == syck_lvl_map && lvl->ncount == 0 ) - { - lvl->ncount++; - YYPOS(0); - FORCE_NEXT_TOKEN( '}' ); - return '{'; - } - - POP_LEVEL(); - lvl = CURRENT_LEVEL(); - if ( lvl->status == syck_lvl_seq ) - { - FORCE_NEXT_TOKEN(YAML_INDENT); - } - else if ( lvl->status == syck_lvl_map ) - { - if ( lvl->ncount % 2 == 1 ) - { - FORCE_NEXT_TOKEN(':'); - } - else - { - FORCE_NEXT_TOKEN(YAML_INDENT); - } - } - CHK_NL(YYCURSOR); - return YAML_IEND; - } -#line 459 "" -yy34: yych = *++YYCURSOR; - switch(yych){ - case 0x0A: goto yy32; - default: goto yy11; - } -yy35: ++YYCURSOR; - goto yy36; -yy36: -#line 237 "bytecode.re" -{ int complex = 0; - if ( lvl->ncount % 2 == 0 && ( lvl->status == syck_lvl_map || lvl->status == syck_lvl_seq ) ) - { - complex = 1; - } - ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_seq); - CHK_NL(YYCURSOR); - if ( complex ) - { - FORCE_NEXT_TOKEN( YAML_IOPEN ); - return '?'; - } - return YAML_IOPEN; - } -#line 483 "" -yy37: yych = *++YYCURSOR; - switch(yych){ - case 0x0A: goto yy35; - default: goto yy11; - } -yy38: ++YYCURSOR; - goto yy39; -yy39: -#line 222 "bytecode.re" -{ int complex = 0; - if ( lvl->ncount % 2 == 0 && ( lvl->status == syck_lvl_map || lvl->status == syck_lvl_seq ) ) - { - complex = 1; - } - ADD_BYTE_LEVEL(lvl, lvl->spaces + 1, syck_lvl_map); - CHK_NL(YYCURSOR); - if ( complex ) - { - FORCE_NEXT_TOKEN( YAML_IOPEN ); - return '?'; - } - return YAML_IOPEN; - } -#line 507 "" -yy40: yych = *++YYCURSOR; - switch(yych){ - case 0x0A: goto yy38; - default: goto yy11; - } -yy41: ++YYCURSOR; - goto yy42; -yy42: -#line 217 "bytecode.re" -{ ENSURE_YAML_IEND(lvl, -1); - YYPOS(0); - return 0; - } -#line 521 "" -yy43: yych = *++YYCURSOR; - switch(yych){ - case 0x0A: goto yy41; - default: goto yy11; - } -yy44: ++YYCURSOR; - switch((yych = *YYCURSOR)) { - case 0x0A: goto yy41; - default: goto yy11; - } -} -#line 386 "bytecode.re" - - - } - -Directive: - { - YYTOKEN = YYCURSOR; - - -#line 543 "" -{ - YYCTYPE yych; - unsigned int yyaccept = 0; - goto yy45; - ++YYCURSOR; -yy45: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - switch(yych){ - case 0x00: goto yy47; - case 'V': goto yy48; - default: goto yy50; - } -yy47: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy49; - } -yy48: 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 yy51; - default: goto yy49; - } -yy49: -#line 399 "bytecode.re" -{ YYCURSOR = YYTOKEN; - return YAML_DOCSEP; - } -#line 646 "" -yy50: yych = *++YYCURSOR; - goto yy49; -yy51: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - goto yy52; -yy52: 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 yy51; - case ':': goto yy53; - default: goto yy47; - } -yy53: 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 yy54; - default: goto yy47; - } -yy54: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - goto yy55; -yy55: switch(yych){ - case 0x0A: goto yy56; - case 0x0D: goto yy58; - 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 yy54; - default: goto yy47; - } -yy56: ++YYCURSOR; - goto yy57; -yy57: -#line 396 "bytecode.re" -{ CHK_NL(YYCURSOR); - goto Directive; } -#line 899 "" -yy58: ++YYCURSOR; - switch((yych = *YYCURSOR)) { - case 0x0A: goto yy56; - default: goto yy47; - } -} -#line 402 "bytecode.re" - - - } - -Comment: - { - YYTOKEN = YYCURSOR; - - -#line 916 "" -{ - YYCTYPE yych; - goto yy59; - ++YYCURSOR; -yy59: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - switch(yych){ - case 0x00: goto yy61; - case 0x0A: goto yy62; - case 0x0D: goto yy64; - default: goto yy66; - } -yy61:yy62: ++YYCURSOR; - goto yy63; -yy63: -#line 412 "bytecode.re" -{ CHK_NL(YYCURSOR); - goto Document; } -#line 936 "" -yy64: ++YYCURSOR; - switch((yych = *YYCURSOR)) { - case 0x0A: goto yy67; - default: goto yy65; - } -yy65: -#line 415 "bytecode.re" -{ goto Comment; } -#line 945 "" -yy66: yych = *++YYCURSOR; - goto yy65; -yy67: ++YYCURSOR; - yych = *YYCURSOR; - goto yy63; -} -#line 417 "bytecode.re" - - - } - -Scalar: - { - int idx = 0; - int cap = 100; - char *str = S_ALLOC_N( char, cap ); - char *tok; - - str[0] = '\0'; - -Scalar2: - tok = YYCURSOR; - - -#line 970 "" -{ - YYCTYPE yych; - goto yy68; - ++YYCURSOR; -yy68: - if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); - yych = *YYCURSOR; - switch(yych){ - case 0x00: goto yy74; - case 0x0A: goto yy70; - case 0x0D: goto yy72; - default: goto yy76; - } -yy70: ++YYCURSOR; - switch((yych = *YYCURSOR)) { - case 'C': goto yy78; - case 'N': goto yy80; - case 'Z': goto yy83; - default: goto yy71; - } -yy71: -#line 461 "bytecode.re" -{ YYCURSOR = tok; - goto ScalarEnd; - } -#line 996 "" -yy72: ++YYCURSOR; - switch((yych = *YYCURSOR)) { - case 0x0A: goto yy77; - default: goto yy73; - } -yy73: -#line 469 "bytecode.re" -{ CAT(str, cap, idx, tok[0]); - goto Scalar2; - } -#line 1007 "" -yy74: ++YYCURSOR; - goto yy75; -yy75: -#line 465 "bytecode.re" -{ YYCURSOR = tok; - goto ScalarEnd; - } -#line 1015 "" -yy76: yych = *++YYCURSOR; - goto yy73; -yy77: yych = *++YYCURSOR; - switch(yych){ - case 'C': goto yy78; - case 'N': goto yy80; - case 'Z': goto yy83; - default: goto yy71; - } -yy78: ++YYCURSOR; - goto yy79; -yy79: -#line 435 "bytecode.re" -{ CHK_NL(tok+1); - goto Scalar2; } -#line 1031 "" -yy80: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy81; -yy81: switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy80; - default: goto yy82; - } -yy82: -#line 438 "bytecode.re" -{ CHK_NL(tok+1); - if ( tok + 2 < YYCURSOR ) - { - char *count = tok + 2; - int total = strtod( count, NULL ); - int i; - for ( i = 0; i < total; i++ ) - { - CAT(str, cap, idx, '\n'); - } - } - else - { - CAT(str, cap, idx, '\n'); - } - goto Scalar2; - } -#line 1068 "" -yy83: ++YYCURSOR; - goto yy84; -yy84: -#line 456 "bytecode.re" -{ CHK_NL(tok+1); - CAT(str, cap, idx, '\0'); - goto Scalar2; - } -#line 1077 "" -} -#line 473 "bytecode.re" - - -ScalarEnd: - { - SyckNode *n = syck_alloc_str(); - n->data.str->ptr = str; - n->data.str->len = idx; - sycklval->nodeData = n; - POP_LEVEL(); - if ( parser->implicit_typing == 1 ) - { - try_tag_implicit( sycklval->nodeData, parser->taguri_expansion ); - } - return YAML_PLAIN; - } - } - -} - -char * -get_inline( SyckParser *parser ) -{ - int idx = 0; - int cap = 100; - char *str = S_ALLOC_N( char, cap ); - char *tok; - - str[0] = '\0'; - -Inline: - { - tok = YYCURSOR; - - -#line 1114 "" -{ - YYCTYPE yych; - goto yy85; - ++YYCURSOR; -yy85: - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - switch(yych){ - case 0x00: goto yy91; - case 0x0A: goto yy87; - case 0x0D: goto yy89; - default: goto yy93; - } -yy87: ++YYCURSOR; - goto yy88; -yy88: -#line 508 "bytecode.re" -{ CHK_NL(YYCURSOR); - return str; } -#line 1134 "" -yy89: ++YYCURSOR; - switch((yych = *YYCURSOR)) { - case 0x0A: goto yy94; - default: goto yy90; - } -yy90: -#line 515 "bytecode.re" -{ CAT(str, cap, idx, tok[0]); - goto Inline; - } -#line 1145 "" -yy91: ++YYCURSOR; - goto yy92; -yy92: -#line 511 "bytecode.re" -{ YYCURSOR = tok; - return str; - } -#line 1153 "" -yy93: yych = *++YYCURSOR; - goto yy90; -yy94: ++YYCURSOR; - yych = *YYCURSOR; - goto yy88; -} -#line 519 "bytecode.re" - - - } - -} - diff --git a/ext/syck/depend b/ext/syck/depend deleted file mode 100644 index 3eec4de72a..0000000000 --- a/ext/syck/depend +++ /dev/null @@ -1,12 +0,0 @@ -ruby_headers = $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h \ - $(hdrdir)/missing.h $(hdrdir)/intern.h $(hdrdir)/st.h -bytecode.o: bytecode.c syck.h gram.h $(ruby_headers) -emitter.o: emitter.c syck.h $(ruby_headers) -gram.o: gram.c syck.h $(hdrdir)/st.h -handler.o: handler.c syck.h $(ruby_headers) -implicit.o: implicit.c syck.h $(ruby_headers) -node.o: node.c syck.h $(ruby_headers) -rubyext.o: rubyext.c syck.h $(ruby_headers) -syck.o: syck.c syck.h $(ruby_headers) -token.o: token.c syck.h gram.h $(ruby_headers) -yaml2byte.o: yaml2byte.c syck.h yamlbyte.h $(ruby_headers) diff --git a/ext/syck/emitter.c b/ext/syck/emitter.c deleted file mode 100644 index af0d7891f8..0000000000 --- a/ext/syck/emitter.c +++ /dev/null @@ -1,1247 +0,0 @@ -/* - * emitter.c - * - * $Author$ - * - * Copyright (C) 2003 why the lucky stiff - * - * All Base64 code from Ruby's pack.c. - * Ruby is Copyright (C) 1993-2007 Yukihiro Matsumoto - */ -#include "ruby/ruby.h" - -#include -#include - -#include "syck.h" - -#define DEFAULT_ANCHOR_FORMAT "id%03d" - -const char hex_table[] = -"0123456789ABCDEF"; -static char b64_table[] = -"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -/* - * Built-in base64 (from Ruby's pack.c) - */ -char * -syck_base64enc( char *s, long len ) -{ - long i = 0; - int padding = '='; - char *buff = S_ALLOC_N(char, len * 4 / 3 + 6); - - while (len >= 3) { - buff[i++] = b64_table[077 & (*s >> 2)]; - buff[i++] = b64_table[077 & (((*s << 4) & 060) | ((s[1] >> 4) & 017))]; - buff[i++] = b64_table[077 & (((s[1] << 2) & 074) | ((s[2] >> 6) & 03))]; - buff[i++] = b64_table[077 & s[2]]; - s += 3; - len -= 3; - } - if (len == 2) { - buff[i++] = b64_table[077 & (*s >> 2)]; - buff[i++] = b64_table[077 & (((*s << 4) & 060) | ((s[1] >> 4) & 017))]; - buff[i++] = b64_table[077 & (((s[1] << 2) & 074) | (('\0' >> 6) & 03))]; - buff[i++] = padding; - } - else if (len == 1) { - buff[i++] = b64_table[077 & (*s >> 2)]; - buff[i++] = b64_table[077 & (((*s << 4) & 060) | (('\0' >> 4) & 017))]; - buff[i++] = padding; - buff[i++] = padding; - } - buff[i++] = '\n'; - return buff; -} - -char * -syck_base64dec( char *s, long len ) -{ - int a = -1,b = -1,c = 0,d; - static int first = 1; - static int b64_xtable[256]; - char *ptr = syck_strndup( s, len ); - char *end = ptr; - char *send = s + len; - - if (first) { - int i; - first = 0; - - for (i = 0; i < 256; i++) { - b64_xtable[i] = -1; - } - for (i = 0; i < 64; i++) { - b64_xtable[(int)b64_table[i]] = i; - } - } - while (s < send) { - while (s[0] == '\r' || s[0] == '\n') { s++; } - if ((a = b64_xtable[(int)s[0]]) == -1) break; - if ((b = b64_xtable[(int)s[1]]) == -1) break; - if ((c = b64_xtable[(int)s[2]]) == -1) break; - if ((d = b64_xtable[(int)s[3]]) == -1) break; - *end++ = a << 2 | b >> 4; - *end++ = b << 4 | c >> 2; - *end++ = c << 6 | d; - s += 4; - } - if (a != -1 && b != -1) { - if (s + 2 < send && s[2] == '=') - *end++ = a << 2 | b >> 4; - if (c != -1 && s + 3 < send && s[3] == '=') { - *end++ = a << 2 | b >> 4; - *end++ = b << 4 | c >> 2; - } - } - *end = '\0'; - /*RSTRING_LEN(buf) = ptr - RSTRING_PTR(buf);*/ - return ptr; -} - -/* - * Allocate an emitter - */ -SyckEmitter * -syck_new_emitter(void) -{ - SyckEmitter *e; - e = S_ALLOC( SyckEmitter ); - e->headless = 0; - e->use_header = 0; - e->use_version = 0; - e->sort_keys = 0; - e->anchor_format = NULL; - e->explicit_typing = 0; - e->best_width = 80; - e->style = scalar_none; - e->stage = doc_open; - e->indent = 2; - e->level = -1; - e->anchors = NULL; - e->markers = NULL; - e->anchored = NULL; - e->bufsize = SYCK_BUFFERSIZE; - e->buffer = NULL; - e->marker = NULL; - e->bufpos = 0; - e->emitter_handler = NULL; - e->output_handler = NULL; - e->lvl_idx = 0; - e->lvl_capa = ALLOC_CT; - e->levels = S_ALLOC_N( SyckLevel, e->lvl_capa ); - syck_emitter_reset_levels( e ); - e->bonus = NULL; - return e; -} - -int -syck_st_free_anchors( char *key, char *name, char *arg ) -{ - S_FREE( name ); - return ST_CONTINUE; -} - -void -syck_emitter_st_free( SyckEmitter *e ) -{ - /* - * Free the anchor tables - */ - if ( e->anchors != NULL ) - { - st_foreach( e->anchors, syck_st_free_anchors, 0 ); - st_free_table( e->anchors ); - e->anchors = NULL; - } - - if ( e->anchored != NULL ) - { - st_free_table( e->anchored ); - e->anchored = NULL; - } - - /* - * Free the markers tables - */ - if ( e->markers != NULL ) - { - st_free_table( e->markers ); - e->markers = NULL; - } -} - -SyckLevel * -syck_emitter_current_level( SyckEmitter *e ) -{ - return &e->levels[e->lvl_idx-1]; -} - -SyckLevel * -syck_emitter_parent_level( SyckEmitter *e ) -{ - return &e->levels[e->lvl_idx-2]; -} - -void -syck_emitter_pop_level( SyckEmitter *e ) -{ - ASSERT( e != NULL ); - - /* The root level should never be popped */ - if ( e->lvl_idx <= 1 ) return; - - e->lvl_idx -= 1; - free( e->levels[e->lvl_idx].domain ); -} - -void -syck_emitter_add_level( SyckEmitter *e, int len, enum syck_level_status status ) -{ - ASSERT( e != NULL ); - if ( e->lvl_idx + 1 > e->lvl_capa ) - { - e->lvl_capa += ALLOC_CT; - S_REALLOC_N( e->levels, SyckLevel, e->lvl_capa ); - } - - ASSERT( len > e->levels[e->lvl_idx-1].spaces ); - e->levels[e->lvl_idx].spaces = len; - e->levels[e->lvl_idx].ncount = 0; - e->levels[e->lvl_idx].domain = syck_strndup( e->levels[e->lvl_idx-1].domain, strlen( e->levels[e->lvl_idx-1].domain ) ); - e->levels[e->lvl_idx].status = status; - e->levels[e->lvl_idx].anctag = 0; - e->lvl_idx += 1; -} - -void -syck_emitter_reset_levels( SyckEmitter *e ) -{ - while ( e->lvl_idx > 1 ) - { - syck_emitter_pop_level( e ); - } - - if ( e->lvl_idx < 1 ) - { - e->lvl_idx = 1; - e->levels[0].spaces = -1; - e->levels[0].ncount = 0; - e->levels[0].domain = syck_strndup( "", 0 ); - e->levels[0].anctag = 0; - } - e->levels[0].status = syck_lvl_header; -} - -void -syck_emitter_handler( SyckEmitter *e, SyckEmitterHandler hdlr ) -{ - e->emitter_handler = hdlr; -} - -void -syck_output_handler( SyckEmitter *e, SyckOutputHandler hdlr ) -{ - e->output_handler = hdlr; -} - -void -syck_free_emitter( SyckEmitter *e ) -{ - /* - * Free tables - */ - syck_emitter_st_free( e ); - syck_emitter_reset_levels( e ); - S_FREE( e->levels[0].domain ); - S_FREE( e->levels ); - if ( e->buffer != NULL ) - { - S_FREE( e->buffer ); - } - S_FREE( e ); -} - -void -syck_emitter_clear( SyckEmitter *e ) -{ - if ( e->buffer == NULL ) - { - e->buffer = S_ALLOC_N( char, e->bufsize ); - S_MEMZERO( e->buffer, char, e->bufsize ); - } - e->buffer[0] = '\0'; - e->marker = e->buffer; - e->bufpos = 0; -} - -/* - * Raw write to the emitter buffer. - */ -void -syck_emitter_write( SyckEmitter *e, const char *str, long len ) -{ - long at; - ASSERT( str != NULL ); - if ( e->buffer == NULL ) - { - syck_emitter_clear( e ); - } - - /* - * Flush if at end of buffer - */ - at = e->marker - e->buffer; - if ( len + at >= (long)e->bufsize ) - { - syck_emitter_flush( e, 0 ); - for (;;) { - long rest = e->bufsize - (e->marker - e->buffer); - if (len <= rest) break; - S_MEMCPY( e->marker, str, char, rest ); - e->marker += rest; - str += rest; - len -= rest; - syck_emitter_flush( e, 0 ); - } - } - - /* - * Write to buffer - */ - S_MEMCPY( e->marker, str, char, len ); - e->marker += len; -} - -/* - * Write a chunk of data out. - */ -void -syck_emitter_flush( SyckEmitter *e, long check_room ) -{ - /* - * Check for enough space in the buffer for check_room length. - */ - if ( check_room > 0 ) - { - if ( (long)e->bufsize > ( e->marker - e->buffer ) + check_room ) - { - return; - } - } - else - { - check_room = e->bufsize; - } - - /* - * Commit buffer. - */ - if ( check_room > e->marker - e->buffer ) - { - check_room = e->marker - e->buffer; - } - (e->output_handler)( e, e->buffer, check_room ); - e->bufpos += check_room; - e->marker -= check_room; -} - -/* - * Start emitting from the given node, check for anchoring and then - * issue the callback to the emitter handler. - */ -void -syck_emit( SyckEmitter *e, st_data_t n ) -{ - SYMID oid; - char *anchor_name = NULL; - int indent = 0; - long x = 0; - SyckLevel *lvl = syck_emitter_current_level( e ); - - /* - * Determine headers. - */ - if ( e->stage == doc_open && ( e->headless == 0 || e->use_header == 1 ) ) - { - if ( e->use_version == 1 ) - { - char *header = S_ALLOC_N( char, 64 ); - S_MEMZERO( header, char, 64 ); - sprintf( header, "--- %%YAML:%d.%d ", SYCK_YAML_MAJOR, SYCK_YAML_MINOR ); - syck_emitter_write( e, header, strlen( header ) ); - S_FREE( header ); - } - else - { - syck_emitter_write( e, "--- ", 4 ); - } - e->stage = doc_processing; - } - - /* Add new level */ - if ( lvl->spaces >= 0 ) { - indent = lvl->spaces + e->indent; - } - syck_emitter_add_level( e, indent, syck_lvl_open ); - lvl = syck_emitter_current_level( e ); - - /* Look for anchor */ - if ( e->anchors != NULL && - st_lookup( e->markers, n, (st_data_t *)&oid ) && - st_lookup( e->anchors, (st_data_t)oid, (void *)&anchor_name ) ) - { - if ( e->anchored == NULL ) - { - e->anchored = st_init_numtable(); - } - - if ( ! st_lookup( e->anchored, (st_data_t)anchor_name, (st_data_t *)&x ) ) - { - char *an = S_ALLOC_N( char, strlen( anchor_name ) + 3 ); - sprintf( an, "&%s ", anchor_name ); - syck_emitter_write( e, an, strlen( anchor_name ) + 2 ); - free( an ); - - x = 1; - st_insert( e->anchored, (st_data_t)anchor_name, (st_data_t)x ); - lvl->anctag = 1; - } - else - { - char *an = S_ALLOC_N( char, strlen( anchor_name ) + 2 ); - sprintf( an, "*%s", anchor_name ); - syck_emitter_write( e, an, strlen( anchor_name ) + 1 ); - free( an ); - - goto end_emit; - } - } - - (e->emitter_handler)( e, n ); - - /* Pop the level */ -end_emit: - syck_emitter_pop_level( e ); - if ( e->lvl_idx == 1 ) { - syck_emitter_write( e, "\n", 1 ); - e->headless = 0; - e->stage = doc_open; - } -} - -/* - * Determine what tag needs to be written, based on the taguri of the node - * and the implicit tag which would be assigned to this node. If a tag is - * required, write the tag. - */ -void syck_emit_tag( SyckEmitter *e, const char *tag, const char *ignore ) -{ - SyckLevel *lvl; - if ( tag == NULL ) return; - if ( ignore != NULL && syck_tagcmp( tag, ignore ) == 0 && e->explicit_typing == 0 ) return; - lvl = syck_emitter_current_level( e ); - - /* implicit */ - if ( strlen( tag ) == 0 ) { - syck_emitter_write( e, "! ", 2 ); - - /* global types */ - } else if ( strncmp( tag, "tag:", 4 ) == 0 ) { - int taglen = (int)strlen( tag ); - syck_emitter_write( e, "!", 1 ); - if ( strncmp( tag + 4, YAML_DOMAIN, strlen( YAML_DOMAIN ) ) == 0 ) { - int skip = 4 + strlen( YAML_DOMAIN ) + 1; - syck_emitter_write( e, tag + skip, taglen - skip ); - } else { - const char *subd = tag + 4; - while ( *subd != ':' && *subd != '\0' ) subd++; - if ( *subd == ':' ) { - if ( subd - tag > ( (long)( strlen( YAML_DOMAIN ) + 5 )) && - strncmp( subd - strlen( YAML_DOMAIN ), YAML_DOMAIN, strlen( YAML_DOMAIN ) ) == 0 ) { - syck_emitter_write( e, tag + 4, subd - strlen( YAML_DOMAIN ) - ( tag + 4 ) - 1 ); - syck_emitter_write( e, "/", 1 ); - syck_emitter_write( e, subd + 1, ( tag + taglen ) - ( subd + 1 ) ); - } else { - syck_emitter_write( e, tag + 4, subd - ( tag + 4 ) ); - syck_emitter_write( e, "/", 1 ); - syck_emitter_write( e, subd + 1, ( tag + taglen ) - ( subd + 1 ) ); - } - } else { - /* TODO: Invalid tag (no colon after domain) */ - return; - } - } - syck_emitter_write( e, " ", 1 ); - - /* private types */ - } else if ( strncmp( tag, "x-private:", 10 ) == 0 ) { - syck_emitter_write( e, "!!", 2 ); - syck_emitter_write( e, tag + 10, strlen( tag ) - 10 ); - syck_emitter_write( e, " ", 1 ); - } - lvl->anctag = 1; -} - -/* - * Emit a newline and an appropriately spaced indent. - */ -void syck_emit_indent( SyckEmitter *e ) -{ - int i; - SyckLevel *lvl = syck_emitter_current_level( e ); - if ( e->bufpos == 0 && ( e->marker - e->buffer ) == 0 ) return; - if ( lvl->spaces >= 0 ) { - char *spcs = S_ALLOC_N( char, lvl->spaces + 2 ); - - spcs[0] = '\n'; spcs[lvl->spaces + 1] = '\0'; - for ( i = 0; i < lvl->spaces; i++ ) spcs[i+1] = ' '; - syck_emitter_write( e, spcs, lvl->spaces + 1 ); - free( spcs ); - } -} - -/* Clear the scan */ -#define SCAN_NONE 0 -/* All printable characters? */ -#define SCAN_NONPRINT 1 -/* Any indented lines? */ -#define SCAN_INDENTED 2 -/* Larger than the requested width? */ -#define SCAN_WIDE 4 -/* Opens or closes with whitespace? */ -#define SCAN_WHITEEDGE 8 -/* Contains a newline */ -#define SCAN_NEWLINE 16 -/* Contains a single quote */ -#define SCAN_SINGLEQ 32 -/* Contains a double quote */ -#define SCAN_DOUBLEQ 64 -/* Starts with a token */ -#define SCAN_INDIC_S 128 -/* Contains a flow indicator */ -#define SCAN_INDIC_C 256 -/* Ends without newlines */ -#define SCAN_NONL_E 512 -/* Ends with many newlines */ -#define SCAN_MANYNL_E 1024 -/* Contains flow map indicators */ -#define SCAN_FLOWMAP 2048 -/* Contains flow seq indicators */ -#define SCAN_FLOWSEQ 4096 -/* Contains a valid doc separator */ -#define SCAN_DOCSEP 8192 - -/* - * Basic printable test for LATIN-1 characters. - */ -int -syck_scan_scalar( int req_width, const char *cursor, long len ) -{ - long i = 0, start = 0; - int flags = SCAN_NONE; - - if ( len < 1 ) return flags; - - /* c-indicators from the spec */ - if ( cursor[0] == '[' || cursor[0] == ']' || - cursor[0] == '{' || cursor[0] == '}' || - cursor[0] == '!' || cursor[0] == '*' || - cursor[0] == '&' || cursor[0] == '|' || - cursor[0] == '>' || cursor[0] == '\'' || - cursor[0] == '"' || cursor[0] == '#' || - cursor[0] == '%' || cursor[0] == '@' || - cursor[0] == '&' ) { - flags |= SCAN_INDIC_S; - } - if ( ( cursor[0] == '-' || cursor[0] == ':' || - cursor[0] == '?' || cursor[0] == ',' ) && - ( len == 1 || cursor[1] == ' ' || cursor[1] == '\n' ) ) - { - flags |= SCAN_INDIC_S; - } - - /* whitespace edges */ - if ( cursor[len-1] != '\n' ) { - flags |= SCAN_NONL_E; - } else if ( len > 1 && cursor[len-2] == '\n' ) { - flags |= SCAN_MANYNL_E; - } - if ( - ( len > 0 && ( cursor[0] == ' ' || cursor[0] == '\t' || cursor[0] == '\n' || cursor[0] == '\r' ) ) || - ( len > 1 && ( cursor[len-1] == ' ' || cursor[len-1] == '\t' ) ) - ) { - flags |= SCAN_WHITEEDGE; - } - - /* opening doc sep */ - if ( len >= 3 && strncmp( cursor, "---", 3 ) == 0 ) - flags |= SCAN_DOCSEP; - - /* scan string */ - for ( i = 0; i < len; i++ ) { - - if ( ! ( cursor[i] == 0x9 || - cursor[i] == 0xA || - cursor[i] == 0xD || - ( cursor[i] >= 0x20 && cursor[i] <= 0x7E ) ) - ) { - flags |= SCAN_NONPRINT; - } - else if ( cursor[i] == '\n' ) { - flags |= SCAN_NEWLINE; - if ( len - i >= 3 && strncmp( &cursor[i+1], "---", 3 ) == 0 ) - flags |= SCAN_DOCSEP; - if ( cursor[i+1] == ' ' || cursor[i+1] == '\t' ) - flags |= SCAN_INDENTED; - if ( req_width > 0 && i - start > req_width ) - flags |= SCAN_WIDE; - start = i; - } - else if ( cursor[i] == '\'' ) - { - flags |= SCAN_SINGLEQ; - } - else if ( cursor[i] == '"' ) - { - flags |= SCAN_DOUBLEQ; - } - else if ( cursor[i] == ']' ) - { - flags |= SCAN_FLOWSEQ; - } - else if ( cursor[i] == '}' ) - { - flags |= SCAN_FLOWMAP; - } - /* remember, if plain collections get implemented, to add nb-plain-flow-char */ - else if ( ( cursor[i] == ' ' && cursor[i+1] == '#' ) || - ( cursor[i] == ':' && - ( cursor[i+1] == ' ' || cursor[i+1] == '\n' || i == len - 1 ) ) ) - { - flags |= SCAN_INDIC_C; - } - else if ( cursor[i] == ',' && - ( cursor[i+1] == ' ' || cursor[i+1] == '\n' || i == len - 1 ) ) - { - flags |= SCAN_FLOWMAP; - flags |= SCAN_FLOWSEQ; - } - } - - /* printf( "---STR---\n%s\nFLAGS: %d\n", cursor, flags ); */ - return flags; -} -/* - * All scalars should be emitted through this function, which determines an appropriate style, - * tag and indent. - */ -void syck_emit_scalar( SyckEmitter *e, const char *tag, enum scalar_style force_style, int force_indent, int force_width, - char keep_nl, const char *str, long len ) -{ - enum scalar_style favor_style = scalar_literal; - SyckLevel *parent = syck_emitter_parent_level( e ); - SyckLevel *lvl = syck_emitter_current_level( e ); - int scan = 0; - const char *match_implicit; - char *implicit; - - if ( str == NULL ) str = ""; - - /* No empty nulls as map keys */ - if ( len == 0 && ( parent->status == syck_lvl_map || parent->status == syck_lvl_imap ) && - parent->ncount % 2 == 1 && syck_tagcmp( tag, "tag:yaml.org,2002:null" ) == 0 ) - { - str = "~"; - len = 1; - } - - scan = syck_scan_scalar( force_width, str, len ); - match_implicit = syck_match_implicit( str, len ); - - /* quote strings which default to implicits */ - implicit = syck_taguri( YAML_DOMAIN, match_implicit, (int)strlen( match_implicit ) ); - if ( syck_tagcmp( tag, implicit ) != 0 && syck_tagcmp( tag, "tag:yaml.org,2002:str" ) == 0 ) { - force_style = scalar_2quote; - } else { - /* complex key */ - if ( parent->status == syck_lvl_map && parent->ncount % 2 == 1 && - ( !( tag == NULL || - ( implicit != NULL && syck_tagcmp( tag, implicit ) == 0 && e->explicit_typing == 0 ) ) ) ) - { - syck_emitter_write( e, "? ", 2 ); - parent->status = syck_lvl_mapx; - } - syck_emit_tag( e, tag, implicit ); - } - S_FREE( implicit ); - - /* if still arbitrary, sniff a good block style. */ - if ( force_style == scalar_none ) { - if ( scan & SCAN_NEWLINE ) { - force_style = scalar_literal; - } else { - force_style = scalar_plain; - } - } - - if ( e->style == scalar_fold ) { - favor_style = scalar_fold; - } - - /* Determine block style */ - if ( scan & SCAN_NONPRINT ) { - force_style = scalar_2quote; - } else if ( scan & SCAN_WHITEEDGE ) { - force_style = scalar_2quote; - } else if ( force_style != scalar_fold && ( scan & SCAN_INDENTED ) ) { - force_style = scalar_literal; - } else if ( force_style == scalar_plain && ( scan & SCAN_NEWLINE ) ) { - force_style = favor_style; - } else if ( force_style == scalar_plain && parent->status == syck_lvl_iseq && ( scan & SCAN_FLOWSEQ ) ) { - force_style = scalar_2quote; - } else if ( force_style == scalar_plain && parent->status == syck_lvl_imap && ( scan & SCAN_FLOWMAP ) ) { - force_style = scalar_2quote; - /* } else if ( force_style == scalar_fold && ( ! ( scan & SCAN_WIDE ) ) ) { - force_style = scalar_literal; */ - } else if ( force_style == scalar_plain && ( scan & SCAN_INDIC_S || scan & SCAN_INDIC_C ) ) { - if ( scan & SCAN_NEWLINE ) { - force_style = favor_style; - } else { - force_style = scalar_2quote; - } - } - - if ( force_indent > 0 ) { - lvl->spaces = parent->spaces + force_indent; - } else if ( scan & SCAN_DOCSEP ) { - lvl->spaces = parent->spaces + e->indent; - } - - /* For now, all ambiguous keys are going to be double-quoted */ - if ( ( parent->status == syck_lvl_map || parent->status == syck_lvl_mapx ) && parent->ncount % 2 == 1 ) { - if ( force_style != scalar_plain ) { - force_style = scalar_2quote; - } - } - - /* If the parent is an inline, double quote anything complex */ - if ( parent->status == syck_lvl_imap || parent->status == syck_lvl_iseq ) { - if ( force_style != scalar_plain && force_style != scalar_1quote ) { - force_style = scalar_2quote; - } - } - - /* Fix the ending newlines */ - if ( scan & SCAN_NONL_E ) { - keep_nl = NL_CHOMP; - } else if ( scan & SCAN_MANYNL_E ) { - keep_nl = NL_KEEP; - } - - /* Write the text node */ - switch ( force_style ) - { - case scalar_1quote: - syck_emit_1quoted( e, force_width, str, len ); - break; - - case scalar_none: - case scalar_2quote: - syck_emit_2quoted( e, force_width, str, len ); - break; - - case scalar_fold: - syck_emit_folded( e, force_width, keep_nl, str, len ); - break; - - case scalar_literal: - syck_emit_literal( e, keep_nl, str, len ); - break; - - case scalar_plain: - syck_emitter_write( e, str, len ); - break; - } - - if ( parent->status == syck_lvl_mapx ) - { - syck_emitter_write( e, "\n", 1 ); - } -} - -void -syck_emitter_escape( SyckEmitter *e, const char *src, long len ) -{ - int i; - for( i = 0; i < len; i++ ) - { - if( (src[i] < 0x20) || (0x7E < src[i]) ) - { - syck_emitter_write( e, "\\", 1 ); - if( '\0' == src[i] ) - syck_emitter_write( e, "0", 1 ); - else - { - syck_emitter_write( e, "x", 1 ); - syck_emitter_write( e, (const char *)hex_table + ((src[i] & 0xF0) >> 4), 1 ); - syck_emitter_write( e, (const char *)hex_table + (src[i] & 0x0F), 1 ); - } - } - else - { - syck_emitter_write( e, src + i, 1 ); - if( '\\' == src[i] ) - syck_emitter_write( e, "\\", 1 ); - } - } -} - -/* - * Outputs a single-quoted block. - */ -void -syck_emit_1quoted( SyckEmitter *e, int width, const char *str, long len ) -{ - char do_indent = 0; - const char *mark = str; - const char *start = str; - const char *end = str; - syck_emitter_write( e, "'", 1 ); - while ( mark < str + len ) { - if ( do_indent ) { - syck_emit_indent( e ); - do_indent = 0; - } - switch ( *mark ) { - case '\'': syck_emitter_write( e, "'", 1 ); break; - - case '\n': - end = mark + 1; - if ( *start != ' ' && *start != '\n' && *end != '\n' && *end != ' ' ) { - syck_emitter_write( e, "\n\n", 2 ); - } else { - syck_emitter_write( e, "\n", 1 ); - } - do_indent = 1; - start = mark + 1; - break; - - case ' ': - if ( width > 0 && *start != ' ' && mark - end > width ) { - do_indent = 1; - end = mark + 1; - } else { - syck_emitter_write( e, " ", 1 ); - } - break; - - default: - syck_emitter_write( e, mark, 1 ); - break; - } - mark++; - } - syck_emitter_write( e, "'", 1 ); -} - -/* - * Outputs a double-quoted block. - */ -void -syck_emit_2quoted( SyckEmitter *e, int width, const char *str, long len ) -{ - char do_indent = 0; - const char *mark = str; - const char *start = str; - const char *end = str; - syck_emitter_write( e, "\"", 1 ); - while ( mark < str + len ) { - if ( do_indent > 0 ) { - if ( do_indent == 2 ) { - syck_emitter_write( e, "\\", 1 ); - } - syck_emit_indent( e ); - do_indent = 0; - } - switch ( *mark ) { - - /* Escape sequences allowed within double quotes. */ - case '"': syck_emitter_write( e, "\\\"", 2 ); break; - case '\\': syck_emitter_write( e, "\\\\", 2 ); break; - case '\0': syck_emitter_write( e, "\\0", 2 ); break; - case '\a': syck_emitter_write( e, "\\a", 2 ); break; - case '\b': syck_emitter_write( e, "\\b", 2 ); break; - case '\f': syck_emitter_write( e, "\\f", 2 ); break; - case '\r': syck_emitter_write( e, "\\r", 2 ); break; - case '\t': syck_emitter_write( e, "\\t", 2 ); break; - case '\v': syck_emitter_write( e, "\\v", 2 ); break; - case 0x1b: syck_emitter_write( e, "\\e", 2 ); break; - - case '\n': - end = mark + 1; - syck_emitter_write( e, "\\n", 2 ); - do_indent = 2; - start = mark + 1; - if ( start < str + len && ( *start == ' ' || *start == '\n' ) ) { - do_indent = 0; - } - break; - - case ' ': - if ( width > 0 && *start != ' ' && mark - end > width ) { - do_indent = 1; - end = mark + 1; - } else { - syck_emitter_write( e, " ", 1 ); - } - break; - - default: - syck_emitter_escape( e, mark, 1 ); - break; - } - mark++; - } - syck_emitter_write( e, "\"", 1 ); -} - -/* - * Outputs a literal block. - */ -void -syck_emit_literal( SyckEmitter *e, char keep_nl, const char *str, long len ) -{ - const char *mark = str; - const char *start = str; - const char *end = str; - syck_emitter_write( e, "|", 1 ); - if ( keep_nl == NL_CHOMP ) { - syck_emitter_write( e, "-", 1 ); - } else if ( keep_nl == NL_KEEP ) { - syck_emitter_write( e, "+", 1 ); - } - syck_emit_indent( e ); - while ( mark < str + len ) { - if ( *mark == '\n' ) { - end = mark; - if ( *start != ' ' && *start != '\n' && *end != '\n' && *end != ' ' ) end += 1; - syck_emitter_write( e, start, end - start ); - if ( mark + 1 == str + len ) { - if ( keep_nl != NL_KEEP ) syck_emitter_write( e, "\n", 1 ); - } else { - syck_emit_indent( e ); - } - start = mark + 1; - } - mark++; - } - end = str + len; - if ( start < end ) { - syck_emitter_write( e, start, end - start ); - } -} - -/* - * Outputs a folded block. - */ -void -syck_emit_folded( SyckEmitter *e, int width, char keep_nl, const char *str, long len ) -{ - const char *mark = str; - const char *start = str; - const char *end = str; - syck_emitter_write( e, ">", 1 ); - if ( keep_nl == NL_CHOMP ) { - syck_emitter_write( e, "-", 1 ); - } else if ( keep_nl == NL_KEEP ) { - syck_emitter_write( e, "+", 1 ); - } - syck_emit_indent( e ); - if ( width <= 0 ) width = e->best_width; - while ( mark < str + len ) { - switch ( *mark ) { - case '\n': - syck_emitter_write( e, end, mark - end ); - end = mark + 1; - if ( *start != ' ' && *start != '\n' && *end != '\n' && *end != ' ' ) { - syck_emitter_write( e, "\n", 1 ); - } - if ( mark + 1 == str + len ) { - if ( keep_nl != NL_KEEP ) syck_emitter_write( e, "\n", 1 ); - } else { - syck_emit_indent( e ); - } - start = mark + 1; - break; - - case ' ': - if ( *start != ' ' ) { - if ( mark - end > width ) { - syck_emitter_write( e, end, mark - end ); - syck_emit_indent( e ); - end = mark + 1; - } - } - break; - } - mark++; - } - if ( end < mark ) { - syck_emitter_write( e, end, mark - end ); - } -} - -/* - * Begins emission of a sequence. - */ -void syck_emit_seq( SyckEmitter *e, const char *tag, enum seq_style style ) -{ - SyckLevel *parent = syck_emitter_parent_level( e ); - SyckLevel *lvl = syck_emitter_current_level( e ); - syck_emit_tag( e, tag, "tag:yaml.org,2002:seq" ); - if ( style == seq_inline || ( parent->status == syck_lvl_imap || parent->status == syck_lvl_iseq ) ) { - syck_emitter_write( e, "[", 1 ); - lvl->status = syck_lvl_iseq; - } else { - /* complex key */ - if ( parent->status == syck_lvl_map && parent->ncount % 2 == 1 ) { - syck_emitter_write( e, "? ", 2 ); - parent->status = syck_lvl_mapx; - } - lvl->status = syck_lvl_seq; - } -} - -/* - * Begins emission of a mapping. - */ -void -syck_emit_map( SyckEmitter *e, const char *tag, enum map_style style ) -{ - SyckLevel *parent = syck_emitter_parent_level( e ); - SyckLevel *lvl = syck_emitter_current_level( e ); - syck_emit_tag( e, tag, "tag:yaml.org,2002:map" ); - if ( style == map_inline || ( parent->status == syck_lvl_imap || parent->status == syck_lvl_iseq ) ) { - syck_emitter_write( e, "{", 1 ); - lvl->status = syck_lvl_imap; - } else { - /* complex key */ - if ( parent->status == syck_lvl_map && parent->ncount % 2 == 1 ) { - syck_emitter_write( e, "? ", 2 ); - parent->status = syck_lvl_mapx; - } - lvl->status = syck_lvl_map; - } -} - -/* - * Handles emitting of a collection item (for both - * sequences and maps) - */ -void syck_emit_item( SyckEmitter *e, st_data_t n ) -{ - SyckLevel *lvl = syck_emitter_current_level( e ); - switch ( lvl->status ) - { - case syck_lvl_seq: - { - SyckLevel *parent = syck_emitter_parent_level( e ); - - /* seq-in-map shortcut -- the lvl->anctag check should be unneccesary but - * there is a nasty shift/reduce in the parser on this point and - * i'm not ready to tickle it. */ - if ( lvl->anctag == 0 && parent->status == syck_lvl_map && lvl->ncount == 0 ) { - lvl->spaces = parent->spaces; - } - - /* seq-in-seq shortcut */ - else if ( lvl->anctag == 0 && parent->status == syck_lvl_seq && lvl->ncount == 0 ) { - int spcs = ( lvl->spaces - parent->spaces ) - 2; - if ( spcs >= 0 ) { - int i = 0; - for ( i = 0; i < spcs; i++ ) { - syck_emitter_write( e, " ", 1 ); - } - syck_emitter_write( e, "- ", 2 ); - break; - } - } - - syck_emit_indent( e ); - syck_emitter_write( e, "- ", 2 ); - } - break; - - case syck_lvl_iseq: - { - if ( lvl->ncount > 0 ) { - syck_emitter_write( e, ", ", 2 ); - } - } - break; - - case syck_lvl_map: - { - SyckLevel *parent = syck_emitter_parent_level( e ); - - /* map-in-seq shortcut */ - if ( lvl->anctag == 0 && parent->status == syck_lvl_seq && lvl->ncount == 0 ) { - int spcs = ( lvl->spaces - parent->spaces ) - 2; - if ( spcs >= 0 ) { - int i = 0; - for ( i = 0; i < spcs; i++ ) { - syck_emitter_write( e, " ", 1 ); - } - break; - } - } - - if ( lvl->ncount % 2 == 0 ) { - syck_emit_indent( e ); - } else { - syck_emitter_write( e, ": ", 2 ); - } - } - break; - - case syck_lvl_mapx: - { - if ( lvl->ncount % 2 == 0 ) { - syck_emit_indent( e ); - lvl->status = syck_lvl_map; - } else { - int i; - if ( lvl->spaces > 0 ) { - char *spcs = S_ALLOC_N( char, lvl->spaces + 1 ); - - spcs[lvl->spaces] = '\0'; - for ( i = 0; i < lvl->spaces; i++ ) spcs[i] = ' '; - syck_emitter_write( e, spcs, lvl->spaces ); - S_FREE( spcs ); - } - syck_emitter_write( e, ": ", 2 ); - } - } - break; - - case syck_lvl_imap: - { - if ( lvl->ncount > 0 ) { - if ( lvl->ncount % 2 == 0 ) { - syck_emitter_write( e, ", ", 2 ); - } else { - syck_emitter_write( e, ": ", 2 ); - } - } - } - break; - - default: break; - } - lvl->ncount++; - - syck_emit( e, n ); -} - -/* - * Closes emission of a collection. - */ -void syck_emit_end( SyckEmitter *e ) -{ - SyckLevel *lvl = syck_emitter_current_level( e ); - SyckLevel *parent = syck_emitter_parent_level( e ); - switch ( lvl->status ) - { - case syck_lvl_seq: - if ( lvl->ncount == 0 ) { - syck_emitter_write( e, "[]\n", 3 ); - } else if ( parent->status == syck_lvl_mapx ) { - syck_emitter_write( e, "\n", 1 ); - } - break; - - case syck_lvl_iseq: - syck_emitter_write( e, "]\n", 1 ); - break; - - case syck_lvl_map: - if ( lvl->ncount == 0 ) { - syck_emitter_write( e, "{}\n", 3 ); - } else if ( lvl->ncount % 2 == 1 ) { - syck_emitter_write( e, ":\n", 1 ); - } else if ( parent->status == syck_lvl_mapx ) { - syck_emitter_write( e, "\n", 1 ); - } - break; - - case syck_lvl_imap: - syck_emitter_write( e, "}\n", 1 ); - break; - - default: break; - } -} - -/* - * Fill markers table with emitter nodes in the - * soon-to-be-emitted tree. - */ -SYMID -syck_emitter_mark_node( SyckEmitter *e, st_data_t n ) -{ - SYMID oid = 0; - char *anchor_name = NULL; - - /* - * Ensure markers table is initialized. - */ - if ( e->markers == NULL ) - { - e->markers = st_init_numtable(); - } - - /* - * Markers table initially marks the string position of the - * object. Doesn't yet create an anchor, simply notes the - * position. - */ - if ( ! st_lookup( e->markers, n, (st_data_t *)&oid ) ) - { - /* - * Store all markers - */ - oid = e->markers->num_entries + 1; - st_insert( e->markers, n, (st_data_t)oid ); - } - else - { - if ( e->anchors == NULL ) - { - e->anchors = st_init_numtable(); - } - - if ( ! st_lookup( e->anchors, (st_data_t)oid, (void *)&anchor_name ) ) - { - int idx = 0; - const char *anc = ( e->anchor_format == NULL ? DEFAULT_ANCHOR_FORMAT : e->anchor_format ); - - /* - * Second time hitting this object, let's give it an anchor - */ - idx = (int)(e->anchors->num_entries + 1); - anchor_name = S_ALLOC_N( char, strlen( anc ) + 10 ); - S_MEMZERO( anchor_name, char, strlen( anc ) + 10 ); - sprintf( anchor_name, anc, idx ); - - /* - * Insert into anchors table - */ - st_insert( e->anchors, (st_data_t)oid, (st_data_t)anchor_name ); - } - } - return oid; -} - diff --git a/ext/syck/extconf.rb b/ext/syck/extconf.rb deleted file mode 100644 index 6c10448c70..0000000000 --- a/ext/syck/extconf.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'mkmf' - -have_header( "st.h" ) -create_makefile( "syck" ) - diff --git a/ext/syck/gram.c b/ext/syck/gram.c deleted file mode 100644 index 8fe4e4f3b5..0000000000 --- a/ext/syck/gram.c +++ /dev/null @@ -1,1894 +0,0 @@ -/* A Bison parser, made by GNU Bison 1.875d. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Written by Richard Stallman by simplifying the original so called - ``semantic'' parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 1 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* If NAME_PREFIX is specified substitute the variables and functions - names. */ -#define yyparse syckparse -#define yylex sycklex -#define yyerror syckerror -#define yylval sycklval -#define yychar syckchar -#define yydebug syckdebug -#define yynerrs sycknerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - YAML_ANCHOR = 258, - YAML_ALIAS = 259, - YAML_TRANSFER = 260, - YAML_TAGURI = 261, - YAML_ITRANSFER = 262, - YAML_WORD = 263, - YAML_PLAIN = 264, - YAML_BLOCK = 265, - YAML_DOCSEP = 266, - YAML_IOPEN = 267, - YAML_INDENT = 268, - YAML_IEND = 269 - }; -#endif -#define YAML_ANCHOR 258 -#define YAML_ALIAS 259 -#define YAML_TRANSFER 260 -#define YAML_TAGURI 261 -#define YAML_ITRANSFER 262 -#define YAML_WORD 263 -#define YAML_PLAIN 264 -#define YAML_BLOCK 265 -#define YAML_DOCSEP 266 -#define YAML_IOPEN 267 -#define YAML_INDENT 268 -#define YAML_IEND 269 - - - - -/* Copy the first part of user declarations. */ -#line 14 "gram.y" - - -#include "syck.h" - -void apply_seq_in_map( SyckParser *parser, SyckNode *n ); - -#define YYPARSE_PARAM parser -#define YYLEX_PARAM parser - -#define NULL_NODE(parser, node) \ - SyckNode *node = syck_new_str( "", scalar_plain ); \ - if ( ((SyckParser *)parser)->taguri_expansion == 1 ) \ - { \ - node->type_id = syck_taguri( YAML_DOMAIN, "null", 4 ); \ - } \ - else \ - { \ - node->type_id = syck_strndup( "null", 4 ); \ - } - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 1 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 35 "gram.y" -typedef union YYSTYPE { - SYMID nodeId; - SyckNode *nodeData; - char *name; -} YYSTYPE; -/* Line 191 of yacc.c. */ -#line 140 "gram.c" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - -/* Copy the second part of user declarations. */ - - -/* Line 214 of yacc.c. */ -#line 152 "gram.c" - -#if ! defined (yyoverflow) || YYERROR_VERBOSE - -# ifndef YYFREE -# define YYFREE free -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# endif - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# define YYSTACK_ALLOC alloca -# endif -# else -# if defined (alloca) || defined (_ALLOCA_H) -# define YYSTACK_ALLOC alloca -# else -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# else -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# endif -#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short int yyss; - YYSTYPE yyvs; - }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined (__GNUC__) && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - register YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short int yysigned_char; -#endif - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 52 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 396 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 23 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 29 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 79 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 128 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 269 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 21, 15, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, - 2, 2, 2, 22, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 17, 2, 18, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 19, 2, 20, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned char yyprhs[] = -{ - 0, 0, 3, 5, 8, 9, 11, 13, 15, 18, - 21, 24, 28, 30, 32, 36, 37, 40, 43, 46, - 49, 51, 54, 56, 58, 60, 63, 66, 69, 72, - 75, 77, 79, 81, 85, 87, 89, 91, 93, 95, - 99, 103, 106, 110, 113, 117, 120, 124, 127, 129, - 133, 136, 140, 143, 145, 149, 151, 153, 157, 161, - 165, 168, 172, 175, 179, 182, 184, 188, 190, 194, - 196, 200, 204, 207, 211, 215, 218, 220, 224, 226 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yysigned_char yyrhs[] = -{ - 24, 0, -1, 25, -1, 11, 27, -1, -1, 33, - -1, 26, -1, 34, -1, 5, 26, -1, 6, 26, - -1, 3, 26, -1, 29, 26, 32, -1, 25, -1, - 28, -1, 29, 28, 30, -1, -1, 7, 28, -1, - 5, 28, -1, 6, 28, -1, 3, 28, -1, 12, - -1, 29, 13, -1, 14, -1, 13, -1, 14, -1, - 31, 32, -1, 5, 33, -1, 6, 33, -1, 7, - 33, -1, 3, 33, -1, 4, -1, 8, -1, 9, - -1, 29, 33, 32, -1, 10, -1, 35, -1, 39, - -1, 42, -1, 49, -1, 29, 37, 30, -1, 29, - 38, 30, -1, 15, 27, -1, 5, 31, 38, -1, - 5, 37, -1, 6, 31, 38, -1, 6, 37, -1, - 3, 31, 38, -1, 3, 37, -1, 36, -1, 38, - 31, 36, -1, 38, 31, -1, 17, 40, 18, -1, - 17, 18, -1, 41, -1, 40, 21, 41, -1, 25, - -1, 48, -1, 29, 43, 30, -1, 29, 47, 30, - -1, 5, 31, 47, -1, 5, 43, -1, 6, 31, - 47, -1, 6, 43, -1, 3, 31, 47, -1, 3, - 43, -1, 33, -1, 22, 25, 31, -1, 27, -1, - 44, 16, 45, -1, 46, -1, 47, 31, 36, -1, - 47, 31, 46, -1, 47, 31, -1, 25, 16, 27, - -1, 19, 50, 20, -1, 19, 20, -1, 51, -1, - 50, 21, 51, -1, 25, -1, 48, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned short int yyrline[] = -{ - 0, 56, 56, 60, 65, 70, 71, 74, 75, 80, - 85, 94, 100, 101, 104, 109, 113, 121, 126, 131, - 145, 146, 149, 152, 155, 156, 164, 169, 174, 182, - 186, 194, 207, 208, 218, 219, 220, 221, 222, 228, - 232, 238, 244, 249, 254, 259, 264, 268, 274, 278, - 283, 292, 296, 302, 306, 313, 314, 320, 325, 332, - 337, 342, 347, 352, 356, 362, 363, 369, 379, 396, - 397, 409, 417, 426, 434, 438, 444, 445, 454, 461 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE -/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "YAML_ANCHOR", "YAML_ALIAS", - "YAML_TRANSFER", "YAML_TAGURI", "YAML_ITRANSFER", "YAML_WORD", - "YAML_PLAIN", "YAML_BLOCK", "YAML_DOCSEP", "YAML_IOPEN", "YAML_INDENT", - "YAML_IEND", "'-'", "':'", "'['", "']'", "'{'", "'}'", "','", "'?'", - "$accept", "doc", "atom", "ind_rep", "atom_or_empty", "empty", - "indent_open", "indent_end", "indent_sep", "indent_flex_end", "word_rep", - "struct_rep", "implicit_seq", "basic_seq", "top_imp_seq", - "in_implicit_seq", "inline_seq", "in_inline_seq", "inline_seq_atom", - "implicit_map", "top_imp_map", "complex_key", "complex_value", - "complex_mapping", "in_implicit_map", "basic_mapping", "inline_map", - "in_inline_map", "inline_map_atom", 0 -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short int yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 45, 58, 91, 93, 123, - 125, 44, 63 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 23, 24, 24, 24, 25, 25, 26, 26, 26, - 26, 26, 27, 27, 28, 28, 28, 28, 28, 28, - 29, 29, 30, 31, 32, 32, 33, 33, 33, 33, - 33, 33, 33, 33, 34, 34, 34, 34, 34, 35, - 35, 36, 37, 37, 37, 37, 37, 37, 38, 38, - 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, - 43, 43, 43, 43, 43, 44, 44, 45, 46, 47, - 47, 47, 47, 48, 49, 49, 50, 50, 51, 51 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char yyr2[] = -{ - 0, 2, 1, 2, 0, 1, 1, 1, 2, 2, - 2, 3, 1, 1, 3, 0, 2, 2, 2, 2, - 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, - 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, - 3, 2, 3, 2, 3, 2, 3, 2, 1, 3, - 2, 3, 2, 1, 3, 1, 1, 3, 3, 3, - 2, 3, 2, 3, 2, 1, 3, 1, 3, 1, - 3, 3, 2, 3, 3, 2, 1, 3, 1, 1 -}; - -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const unsigned char yydefact[] = -{ - 4, 0, 30, 0, 0, 0, 31, 32, 34, 15, - 20, 0, 0, 0, 2, 6, 0, 5, 7, 35, - 36, 37, 38, 10, 29, 8, 26, 9, 27, 0, - 0, 0, 0, 28, 15, 15, 15, 15, 12, 3, - 13, 15, 52, 55, 0, 53, 56, 75, 78, 79, - 0, 76, 1, 0, 0, 0, 21, 15, 0, 0, - 65, 48, 0, 0, 0, 0, 69, 0, 0, 19, - 17, 18, 15, 15, 15, 16, 15, 15, 15, 15, - 0, 15, 51, 0, 74, 0, 23, 0, 47, 64, - 0, 43, 60, 0, 45, 62, 41, 0, 24, 0, - 11, 33, 22, 39, 40, 50, 57, 15, 58, 72, - 14, 73, 54, 77, 65, 46, 63, 42, 59, 44, - 61, 66, 25, 49, 67, 68, 70, 71 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const yysigned_char yydefgoto[] = -{ - -1, 13, 38, 15, 39, 40, 16, 103, 99, 101, - 17, 18, 19, 61, 62, 63, 20, 44, 45, 21, - 64, 65, 125, 66, 67, 46, 22, 50, 51 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -97 -static const short int yypact[] = -{ - 250, 318, -97, 318, 318, 374, -97, -97, -97, 335, - -97, 267, 232, 7, -97, -97, 192, -97, -97, -97, - -97, -97, -97, -97, -97, -97, -97, -97, -97, 374, - 374, 374, 352, -97, 335, 335, 335, 384, -97, -97, - -97, 212, -97, 10, 0, -97, -97, -97, 10, -97, - -4, -97, -97, 284, 284, 284, -97, 335, 318, 30, - 30, -97, -2, 36, -2, 16, -97, 36, 30, -97, - -97, -97, 384, 384, 384, -97, 363, 301, 301, 301, - -2, 335, -97, 318, -97, 318, -97, 158, -97, -97, - 158, -97, -97, 158, -97, -97, -97, 24, -97, 30, - -97, -97, -97, -97, -97, 26, -97, 335, -97, 158, - -97, -97, -97, -97, -97, 24, 24, 24, 24, 24, - 24, -97, -97, -97, -97, -97, -97, -97 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yysigned_char yypgoto[] = -{ - -97, -97, 8, 81, -56, 109, 33, -53, 74, -54, - -1, -97, -97, -96, -31, -32, -97, -97, -44, -97, - 77, -97, -97, -52, 9, -6, -97, -97, -29 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -1 -static const unsigned char yytable[] = -{ - 24, 96, 26, 28, 33, 100, 49, 52, 14, 123, - 104, 106, 102, 126, 108, 60, 84, 85, 82, 43, - 48, 83, 88, 91, 94, 111, 81, 110, 24, 26, - 28, 68, 107, 24, 26, 28, 33, 86, 32, 112, - 60, 57, 41, 86, 98, 122, 88, 91, 94, 86, - 102, 124, 24, 26, 28, 115, 113, 127, 117, 0, - 0, 119, 32, 32, 32, 32, 97, 41, 41, 41, - 76, 24, 26, 28, 41, 68, 24, 26, 28, 49, - 0, 0, 23, 0, 25, 27, 114, 0, 0, 114, - 41, 43, 114, 48, 0, 0, 116, 59, 0, 118, - 0, 0, 120, 0, 0, 76, 76, 76, 114, 76, - 41, 41, 41, 0, 41, 23, 25, 27, 0, 0, - 32, 0, 59, 32, 0, 0, 32, 87, 90, 93, - 89, 92, 95, 0, 23, 25, 27, 105, 0, 0, - 41, 109, 32, 69, 70, 71, 75, 0, 0, 0, - 80, 87, 90, 93, 89, 92, 95, 0, 23, 25, - 27, 29, 2, 30, 31, 5, 6, 7, 0, 0, - 10, 121, 0, 57, 0, 0, 0, 0, 0, 0, - 58, 69, 70, 71, 0, 80, 69, 70, 71, 105, - 109, 105, 109, 105, 109, 53, 2, 54, 55, 5, - 6, 7, 8, 0, 10, 56, 0, 57, 0, 11, - 0, 12, 0, 0, 58, 77, 2, 78, 79, 37, - 6, 7, 8, 0, 10, 56, 0, 57, 0, 11, - 0, 12, 0, 0, 58, 1, 2, 3, 4, 5, - 6, 7, 8, 0, 10, 0, 0, 0, 0, 11, - 0, 12, 47, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 0, 0, 0, 0, 11, 0, 12, - 1, 2, 3, 4, 5, 6, 7, 8, 0, 10, - 0, 0, 0, 0, 11, 42, 12, 53, 2, 54, - 55, 5, 6, 7, 8, 0, 10, 86, 0, 0, - 0, 11, 0, 12, 77, 2, 78, 79, 37, 6, - 7, 8, 0, 10, 86, 0, 0, 0, 11, 0, - 12, 1, 2, 3, 4, 5, 6, 7, 8, 0, - 10, 0, 0, 0, 0, 11, 0, 12, 34, 2, - 35, 36, 37, 6, 7, 8, 0, 10, 0, 0, - 0, 0, 11, 0, 12, 29, 2, 30, 31, 5, - 6, 7, 0, 0, 10, 56, 72, 2, 73, 74, - 37, 6, 7, 0, 0, 10, 56, 29, 2, 30, - 31, 5, 6, 7, 0, 0, 10, 72, 2, 73, - 74, 37, 6, 7, 0, 0, 10 -}; - -static const yysigned_char yycheck[] = -{ - 1, 57, 3, 4, 5, 59, 12, 0, 0, 105, - 63, 64, 14, 109, 67, 16, 20, 21, 18, 11, - 12, 21, 53, 54, 55, 81, 16, 80, 29, 30, - 31, 32, 16, 34, 35, 36, 37, 13, 5, 83, - 41, 15, 9, 13, 14, 99, 77, 78, 79, 13, - 14, 107, 53, 54, 55, 87, 85, 109, 90, -1, - -1, 93, 29, 30, 31, 32, 58, 34, 35, 36, - 37, 72, 73, 74, 41, 76, 77, 78, 79, 85, - -1, -1, 1, -1, 3, 4, 87, -1, -1, 90, - 57, 83, 93, 85, -1, -1, 87, 16, -1, 90, - -1, -1, 93, -1, -1, 72, 73, 74, 109, 76, - 77, 78, 79, -1, 81, 34, 35, 36, -1, -1, - 87, -1, 41, 90, -1, -1, 93, 53, 54, 55, - 53, 54, 55, -1, 53, 54, 55, 63, -1, -1, - 107, 67, 109, 34, 35, 36, 37, -1, -1, -1, - 41, 77, 78, 79, 77, 78, 79, -1, 77, 78, - 79, 3, 4, 5, 6, 7, 8, 9, -1, -1, - 12, 97, -1, 15, -1, -1, -1, -1, -1, -1, - 22, 72, 73, 74, -1, 76, 77, 78, 79, 115, - 116, 117, 118, 119, 120, 3, 4, 5, 6, 7, - 8, 9, 10, -1, 12, 13, -1, 15, -1, 17, - -1, 19, -1, -1, 22, 3, 4, 5, 6, 7, - 8, 9, 10, -1, 12, 13, -1, 15, -1, 17, - -1, 19, -1, -1, 22, 3, 4, 5, 6, 7, - 8, 9, 10, -1, 12, -1, -1, -1, -1, 17, - -1, 19, 20, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, -1, -1, -1, -1, 17, -1, 19, - 3, 4, 5, 6, 7, 8, 9, 10, -1, 12, - -1, -1, -1, -1, 17, 18, 19, 3, 4, 5, - 6, 7, 8, 9, 10, -1, 12, 13, -1, -1, - -1, 17, -1, 19, 3, 4, 5, 6, 7, 8, - 9, 10, -1, 12, 13, -1, -1, -1, 17, -1, - 19, 3, 4, 5, 6, 7, 8, 9, 10, -1, - 12, -1, -1, -1, -1, 17, -1, 19, 3, 4, - 5, 6, 7, 8, 9, 10, -1, 12, -1, -1, - -1, -1, 17, -1, 19, 3, 4, 5, 6, 7, - 8, 9, -1, -1, 12, 13, 3, 4, 5, 6, - 7, 8, 9, -1, -1, 12, 13, 3, 4, 5, - 6, 7, 8, 9, -1, -1, 12, 3, 4, 5, - 6, 7, 8, 9, -1, -1, 12 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = -{ - 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 17, 19, 24, 25, 26, 29, 33, 34, 35, - 39, 42, 49, 26, 33, 26, 33, 26, 33, 3, - 5, 6, 29, 33, 3, 5, 6, 7, 25, 27, - 28, 29, 18, 25, 40, 41, 48, 20, 25, 48, - 50, 51, 0, 3, 5, 6, 13, 15, 22, 26, - 33, 36, 37, 38, 43, 44, 46, 47, 33, 28, - 28, 28, 3, 5, 6, 28, 29, 3, 5, 6, - 28, 16, 18, 21, 20, 21, 13, 31, 37, 43, - 31, 37, 43, 31, 37, 43, 27, 25, 14, 31, - 32, 32, 14, 30, 30, 31, 30, 16, 30, 31, - 30, 27, 41, 51, 33, 38, 47, 38, 47, 38, - 47, 31, 32, 36, 27, 45, 36, 46 -}; - -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ - -#define YYFAIL goto yyerrlab - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror ("syntax error: cannot back up");\ - YYERROR; \ - } \ -while (0) - -#define YYTERROR 1 -#define YYERRCODE 256 - -/* YYLLOC_DEFAULT -- Compute the default location (before the actions - are run). */ - -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - ((Current).first_line = (Rhs)[1].first_line, \ - (Current).first_column = (Rhs)[1].first_column, \ - (Current).last_line = (Rhs)[N].last_line, \ - (Current).last_column = (Rhs)[N].last_column) -#endif - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, YYLEX_PARAM) -#else -# define YYLEX yylex (&yylval) -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -# define YYDSYMPRINT(Args) \ -do { \ - if (yydebug) \ - yysymprint Args; \ -} while (0) - -# define YYDSYMPRINTF(Title, Token, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Token, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short int *bottom, short int *top) -#else -static void -yy_stack_print (bottom, top) - short int *bottom; - short int *top; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else -static void -yy_reduce_print (yyrule) - int yyrule; -#endif -{ - int yyi; - unsigned int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", - yyrule - 1, yylno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YYDSYMPRINT(Args) -# define YYDSYMPRINTF(Title, Token, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0 -# undef YYMAXDEPTH -#endif - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - register const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - register char *yyd = yydest; - register const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -#endif /* !YYERROR_VERBOSE */ - - - -#if YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else -static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (yytype < YYNTOKENS) - { - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); -# ifdef YYPRINT - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - } - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); -} - -#endif /* ! YYDEBUG */ -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yydestruct (int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yytype, yyvaluep) - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - switch (yytype) - { - - default: - break; - } -} - - -/* Prevent warnings from -Wmissing-prototypes. */ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - - - - - -/*----------. -| yyparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) -#else -int -yyparse () - -#endif -#endif -{ - /* The lookahead symbol. */ -int yychar; - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - - register int yystate; - register int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short int yyssa[YYINITDEPTH]; - short int *yyss = yyssa; - register short int *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - register YYSTYPE *yyvsp; - - - -#define YYPOPSTACK (yyvsp--, yyssp--) - - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ - int yylen; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; - - - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short int *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyoverflowlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyoverflowlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - short int *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyoverflowlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to lookahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the lookahead token. */ - YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; - - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - yystate = yyn; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -#line 57 "gram.y" - { - ((SyckParser *)parser)->root = syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ); - } - break; - - case 3: -#line 61 "gram.y" - { - ((SyckParser *)parser)->root = syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ); - } - break; - - case 4: -#line 65 "gram.y" - { - ((SyckParser *)parser)->eof = 1; - } - break; - - case 8: -#line 76 "gram.y" - { - syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 9: -#line 81 "gram.y" - { - syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 10: -#line 86 "gram.y" - { - /* - * _Anchors_: The language binding must keep a separate symbol table - * for anchors. The actual ID in the symbol table is returned to the - * higher nodes, though. - */ - yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData ); - } - break; - - case 11: -#line 95 "gram.y" - { - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 14: -#line 105 "gram.y" - { - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 15: -#line 109 "gram.y" - { - NULL_NODE( parser, n ); - yyval.nodeData = n; - } - break; - - case 16: -#line 114 "gram.y" - { - if ( ((SyckParser *)parser)->implicit_typing == 1 ) - { - try_tag_implicit( yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); - } - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 17: -#line 122 "gram.y" - { - syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 18: -#line 127 "gram.y" - { - syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 19: -#line 132 "gram.y" - { - /* - * _Anchors_: The language binding must keep a separate symbol table - * for anchors. The actual ID in the symbol table is returned to the - * higher nodes, though. - */ - yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData ); - } - break; - - case 26: -#line 165 "gram.y" - { - syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 27: -#line 170 "gram.y" - { - syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 28: -#line 175 "gram.y" - { - if ( ((SyckParser *)parser)->implicit_typing == 1 ) - { - try_tag_implicit( yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); - } - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 29: -#line 183 "gram.y" - { - yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData ); - } - break; - - case 30: -#line 187 "gram.y" - { - /* - * _Aliases_: The anchor symbol table is scanned for the anchor name. - * The anchor's ID in the language's symbol table is returned. - */ - yyval.nodeData = syck_hdlr_get_anchor( (SyckParser *)parser, yyvsp[0].name ); - } - break; - - case 31: -#line 195 "gram.y" - { - SyckNode *n = yyvsp[0].nodeData; - if ( ((SyckParser *)parser)->taguri_expansion == 1 ) - { - n->type_id = syck_taguri( YAML_DOMAIN, "str", 3 ); - } - else - { - n->type_id = syck_strndup( "str", 3 ); - } - yyval.nodeData = n; - } - break; - - case 33: -#line 209 "gram.y" - { - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 39: -#line 229 "gram.y" - { - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 40: -#line 233 "gram.y" - { - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 41: -#line 239 "gram.y" - { - yyval.nodeId = syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ); - } - break; - - case 42: -#line 245 "gram.y" - { - syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 43: -#line 250 "gram.y" - { - syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 44: -#line 255 "gram.y" - { - syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, 0 ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 45: -#line 260 "gram.y" - { - syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 46: -#line 265 "gram.y" - { - yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-2].name, yyvsp[0].nodeData ); - } - break; - - case 47: -#line 269 "gram.y" - { - yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData ); - } - break; - - case 48: -#line 275 "gram.y" - { - yyval.nodeData = syck_new_seq( yyvsp[0].nodeId ); - } - break; - - case 49: -#line 279 "gram.y" - { - syck_seq_add( yyvsp[-2].nodeData, yyvsp[0].nodeId ); - yyval.nodeData = yyvsp[-2].nodeData; - } - break; - - case 50: -#line 284 "gram.y" - { - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 51: -#line 293 "gram.y" - { - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 52: -#line 297 "gram.y" - { - yyval.nodeData = syck_alloc_seq(); - } - break; - - case 53: -#line 303 "gram.y" - { - yyval.nodeData = syck_new_seq( syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) ); - } - break; - - case 54: -#line 307 "gram.y" - { - syck_seq_add( yyvsp[-2].nodeData, syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) ); - yyval.nodeData = yyvsp[-2].nodeData; - } - break; - - case 57: -#line 321 "gram.y" - { - apply_seq_in_map( (SyckParser *)parser, yyvsp[-1].nodeData ); - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 58: -#line 326 "gram.y" - { - apply_seq_in_map( (SyckParser *)parser, yyvsp[-1].nodeData ); - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 59: -#line 333 "gram.y" - { - syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 60: -#line 338 "gram.y" - { - syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, ((SyckParser *)parser)->taguri_expansion ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 61: -#line 343 "gram.y" - { - syck_add_transfer( yyvsp[-2].name, yyvsp[0].nodeData, 0 ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 62: -#line 348 "gram.y" - { - syck_add_transfer( yyvsp[-1].name, yyvsp[0].nodeData, 0 ); - yyval.nodeData = yyvsp[0].nodeData; - } - break; - - case 63: -#line 353 "gram.y" - { - yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-2].name, yyvsp[0].nodeData ); - } - break; - - case 64: -#line 357 "gram.y" - { - yyval.nodeData = syck_hdlr_add_anchor( (SyckParser *)parser, yyvsp[-1].name, yyvsp[0].nodeData ); - } - break; - - case 66: -#line 364 "gram.y" - { - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 68: -#line 380 "gram.y" - { - yyval.nodeData = syck_new_map( - syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-2].nodeData ), - syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) ); - } - break; - - case 70: -#line 398 "gram.y" - { - if ( yyvsp[-2].nodeData->shortcut == NULL ) - { - yyvsp[-2].nodeData->shortcut = syck_new_seq( yyvsp[0].nodeId ); - } - else - { - syck_seq_add( yyvsp[-2].nodeData->shortcut, yyvsp[0].nodeId ); - } - yyval.nodeData = yyvsp[-2].nodeData; - } - break; - - case 71: -#line 410 "gram.y" - { - apply_seq_in_map( (SyckParser *)parser, yyvsp[-2].nodeData ); - syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData ); - syck_free_node( yyvsp[0].nodeData ); - yyvsp[0].nodeData = NULL; - yyval.nodeData = yyvsp[-2].nodeData; - } - break; - - case 72: -#line 418 "gram.y" - { - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 73: -#line 427 "gram.y" - { - yyval.nodeData = syck_new_map( - syck_hdlr_add_node( (SyckParser *)parser, yyvsp[-2].nodeData ), - syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ) ); - } - break; - - case 74: -#line 435 "gram.y" - { - yyval.nodeData = yyvsp[-1].nodeData; - } - break; - - case 75: -#line 439 "gram.y" - { - yyval.nodeData = syck_alloc_map(); - } - break; - - case 77: -#line 446 "gram.y" - { - syck_map_update( yyvsp[-2].nodeData, yyvsp[0].nodeData ); - syck_free_node( yyvsp[0].nodeData ); - yyvsp[0].nodeData = NULL; - yyval.nodeData = yyvsp[-2].nodeData; - } - break; - - case 78: -#line 455 "gram.y" - { - NULL_NODE( parser, n ); - yyval.nodeData = syck_new_map( - syck_hdlr_add_node( (SyckParser *)parser, yyvsp[0].nodeData ), - syck_hdlr_add_node( (SyckParser *)parser, n ) ); - } - break; - - - } - -/* Line 1010 of yacc.c. */ -#line 1651 "gram.c" - - yyvsp -= yylen; - yyssp -= yylen; - - - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (YYPACT_NINF < yyn && yyn < YYLAST) - { - YYSIZE_T yysize = 0; - int yytype = YYTRANSLATE (yychar); - const char* yyprefix; - char *yymsg; - int yyx; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 0; - - yyprefix = ", expecting "; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); - yycount += 1; - if (yycount == 5) - { - yysize = 0; - break; - } - } - yysize += (sizeof ("syntax error, unexpected ") - + yystrlen (yytname[yytype])); - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg != 0) - { - char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); - yyp = yystpcpy (yyp, yytname[yytype]); - - if (yycount < 5) - { - yyprefix = ", expecting "; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - yyp = yystpcpy (yyp, yyprefix); - yyp = yystpcpy (yyp, yytname[yyx]); - yyprefix = " or "; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - yyerror ("syntax error; also virtual memory exhausted"); - } - else -#endif /* YYERROR_VERBOSE */ - yyerror ("syntax error"); - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* If at end of input, pop the error token, - then the rest of the stack, then return failure. */ - if (yychar == YYEOF) - for (;;) - { - YYPOPSTACK; - if (yyssp == yyss) - YYABORT; - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[*yyssp], yyvsp); - } - } - else - { - YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); - yydestruct (yytoken, &yylval); - yychar = YYEMPTY; - - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - -#ifdef __GNUC__ - /* Pacify GCC when the user code never invokes YYERROR and the label - yyerrorlab therefore never appears in user code. */ - if (0) - goto yyerrorlab; -#endif - - yyvsp -= yylen; - yyssp -= yylen; - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[yystate], yyvsp); - YYPOPSTACK; - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - if (yyn == YYFINAL) - YYACCEPT; - - YYDPRINTF ((stderr, "Shifting error token, ")); - - *++yyvsp = yylval; - - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#ifndef yyoverflow -/*----------------------------------------------. -| yyoverflowlab -- parser overflow comes here. | -`----------------------------------------------*/ -yyoverflowlab: - yyerror ("parser stack overflow"); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - return yyresult; -} - - -#line 464 "gram.y" - - -void -apply_seq_in_map( SyckParser *parser, SyckNode *n ) -{ - long map_len; - if ( n->shortcut == NULL ) - { - return; - } - - map_len = syck_map_count( n ); - syck_map_assign( n, map_value, map_len - 1, - syck_hdlr_add_node( parser, n->shortcut ) ); - - n->shortcut = NULL; -} - - diff --git a/ext/syck/gram.h b/ext/syck/gram.h deleted file mode 100644 index 547149ab4b..0000000000 --- a/ext/syck/gram.h +++ /dev/null @@ -1,79 +0,0 @@ -/* A Bison parser, made by GNU Bison 1.875d. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - YAML_ANCHOR = 258, - YAML_ALIAS = 259, - YAML_TRANSFER = 260, - YAML_TAGURI = 261, - YAML_ITRANSFER = 262, - YAML_WORD = 263, - YAML_PLAIN = 264, - YAML_BLOCK = 265, - YAML_DOCSEP = 266, - YAML_IOPEN = 267, - YAML_INDENT = 268, - YAML_IEND = 269 - }; -#endif -#define YAML_ANCHOR 258 -#define YAML_ALIAS 259 -#define YAML_TRANSFER 260 -#define YAML_TAGURI 261 -#define YAML_ITRANSFER 262 -#define YAML_WORD 263 -#define YAML_PLAIN 264 -#define YAML_BLOCK 265 -#define YAML_DOCSEP 266 -#define YAML_IOPEN 267 -#define YAML_INDENT 268 -#define YAML_IEND 269 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 35 "gram.y" -typedef union YYSTYPE { - SYMID nodeId; - SyckNode *nodeData; - char *name; -} YYSTYPE; -/* Line 1285 of yacc.c. */ -#line 71 "gram.h" -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - - - diff --git a/ext/syck/handler.c b/ext/syck/handler.c deleted file mode 100644 index 40f5ef27d0..0000000000 --- a/ext/syck/handler.c +++ /dev/null @@ -1,173 +0,0 @@ -/* - * handler.c - * - * $Author$ - * - * Copyright (C) 2003 why the lucky stiff - */ - -#include "ruby/ruby.h" -#include "syck.h" - -SYMID -syck_hdlr_add_node( SyckParser *p, SyckNode *n ) -{ - SYMID id; - - if ( ! n->id ) - { - n->id = (p->handler)( p, n ); - } - id = n->id; - - if ( n->anchor == NULL ) - { - syck_free_node( n ); - } - return id; -} - -SyckNode * -syck_hdlr_add_anchor( SyckParser *p, char *a, SyckNode *n ) -{ - SyckNode *ntmp = NULL; - - n->anchor = a; - if ( p->bad_anchors != NULL ) - { - SyckNode *bad; - if ( st_lookup( p->bad_anchors, (st_data_t)a, (void *)&bad ) ) - { - if ( n->kind != syck_str_kind ) - { - n->id = bad->id; - (p->handler)( p, n ); - } - } - } - if ( p->anchors == NULL ) - { - p->anchors = st_init_strtable(); - } - if ( st_lookup( p->anchors, (st_data_t)a, (void *)&ntmp ) ) - { - if ( ntmp != (void *)1 ) - { - syck_free_node( ntmp ); - } - } - st_insert( p->anchors, (st_data_t)a, (st_data_t)n ); - return n; -} - -void -syck_hdlr_remove_anchor( SyckParser *p, char *a ) -{ - char *atmp = a; - SyckNode *ntmp; - if ( p->anchors == NULL ) - { - p->anchors = st_init_strtable(); - } - if ( st_delete( p->anchors, (void *)&atmp, (void *)&ntmp ) ) - { - if ( ntmp != (void *)1 ) - { - syck_free_node( ntmp ); - } - } - st_insert( p->anchors, (st_data_t)a, (st_data_t)1 ); -} - -SyckNode * -syck_hdlr_get_anchor( SyckParser *p, char *a ) -{ - SyckNode *n = NULL; - - if ( p->anchors != NULL ) - { - if ( st_lookup( p->anchors, (st_data_t)a, (void *)&n ) ) - { - if ( n != (void *)1 ) - { - S_FREE( a ); - return n; - } - else - { - if ( p->bad_anchors == NULL ) - { - p->bad_anchors = st_init_strtable(); - } - if ( ! st_lookup( p->bad_anchors, (st_data_t)a, (void *)&n ) ) - { - n = (p->bad_anchor_handler)( p, a ); - st_insert( p->bad_anchors, (st_data_t)a, (st_data_t)n ); - } - } - } - } - - if ( n == NULL ) - { - n = (p->bad_anchor_handler)( p, a ); - } - - if ( n->anchor ) - { - S_FREE( a ); - } - else - { - n->anchor = a; - } - - return n; -} - -void -syck_add_transfer( char *uri, SyckNode *n, int taguri ) -{ - if ( n->type_id != NULL ) - { - S_FREE( n->type_id ); - } - - if ( taguri == 0 ) - { - n->type_id = uri; - return; - } - - n->type_id = syck_type_id_to_uri( uri ); - S_FREE( uri ); -} - -char * -syck_xprivate( const char *type_id, int type_len ) -{ - char *uri = S_ALLOC_N( char, type_len + 14 ); - uri[0] = '\0'; - strcat( uri, "x-private:" ); - strncat( uri, type_id, type_len ); - return uri; -} - -char * -syck_taguri( const char *domain, const char *type_id, int type_len ) -{ - char *uri = S_ALLOC_N( char, strlen( domain ) + type_len + 14 ); - uri[0] = '\0'; - strcat( uri, "tag:" ); - strcat( uri, domain ); - strcat( uri, ":" ); - strncat( uri, type_id, type_len ); - return uri; -} - -int -syck_try_implicit( SyckNode *n ) -{ - return 1; -} - diff --git a/ext/syck/implicit.c b/ext/syck/implicit.c deleted file mode 100644 index 6911e6175d..0000000000 --- a/ext/syck/implicit.c +++ /dev/null @@ -1,2990 +0,0 @@ -/* Generated by re2c 0.9.10 on Mon Sep 19 21:46:50 2005 */ -#line 1 "implicit.re" -/* - * implicit.re - * - * $Author$ - * - * Copyright (C) 2003 why the lucky stiff - */ - -#include "ruby/ruby.h" -#include "syck.h" - -#define YYCTYPE char -#define YYCURSOR cursor -#define YYMARKER marker -#define YYLIMIT limit -#define YYFILL(n) (void)0 - -void -try_tag_implicit( SyckNode *n, int taguri ) -{ - const char *tid = ""; - switch ( n->kind ) - { - case syck_str_kind: - tid = syck_match_implicit( n->data.str->ptr, n->data.str->len ); - break; - - case syck_seq_kind: - tid = "seq"; - break; - - case syck_map_kind: - tid = "map"; - break; - } - if ( n->type_id != NULL ) S_FREE( n->type_id ); - if ( taguri == 1 ) - { - n->type_id = syck_taguri( YAML_DOMAIN, tid, (int)strlen( tid ) ); - } else { - n->type_id = syck_strndup( tid, (int)strlen( tid ) ); - } -} - -const char * -syck_match_implicit( const char *str, size_t len ) -{ - const char *cursor, *limit, *marker = 0; - cursor = str; - limit = str + len; - - -#line 55 "" -{ - YYCTYPE yych; - unsigned int yyaccept; - goto yy0; - ++YYCURSOR; -yy0: - if((YYLIMIT - YYCURSOR) < 26) YYFILL(26); - yych = *YYCURSOR; - switch(yych){ - case 0x00: goto yy6; - case '+': goto yy16; - case '-': goto yy17; - case '.': goto yy20; - case '0': goto yy18; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy19; - case '<': goto yy22; - case '=': goto yy21; - case 'F': goto yy15; - case 'N': goto yy5; - case 'O': goto yy13; - case 'T': goto yy11; - case 'Y': goto yy9; - case 'f': goto yy14; - case 'n': goto yy4; - case 'o': goto yy12; - case 't': goto yy10; - case 'y': goto yy8; - case '~': goto yy2; - default: goto yy23; - } -yy2: ++YYCURSOR; - if((yych = *YYCURSOR) <= 0x00) goto yy6; - goto yy3; -yy3: -#line 123 "implicit.re" -{ return "str"; } -#line 100 "" -yy4: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'o': goto yy172; - case 'u': goto yy200; - default: goto yy3; - } -yy5: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'O': case 'o': goto yy172; - case 'U': goto yy195; - case 'u': goto yy196; - default: goto yy3; - } -yy6: ++YYCURSOR; - goto yy7; -yy7: -#line 85 "implicit.re" -{ return "null"; } -#line 121 "" -yy8: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'e': goto yy194; - default: goto yy3; - } -yy9: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'E': goto yy192; - case 'e': goto yy193; - default: goto yy3; - } -yy10: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'r': goto yy190; - default: goto yy3; - } -yy11: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'R': goto yy186; - case 'r': goto yy187; - default: goto yy3; - } -yy12: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'f': goto yy185; - case 'n': goto yy182; - default: goto yy3; - } -yy13: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'F': goto yy180; - case 'N': case 'n': goto yy182; - case 'f': goto yy181; - default: goto yy3; - } -yy14: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'a': goto yy177; - default: goto yy3; - } -yy15: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'A': goto yy168; - case 'a': goto yy169; - default: goto yy3; - } -yy16: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case '.': goto yy167; - case '0': goto yy158; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy47; - default: goto yy3; - } -yy17: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case '.': goto yy157; - case '0': goto yy158; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy47; - default: goto yy3; - } -yy18: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 0x00: goto yy52; - case ',': goto yy142; - case '.': goto yy50; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy140; - case '8': - case '9': goto yy141; - case ':': goto yy49; - case 'x': goto yy144; - default: goto yy3; - } -yy19: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 0x00: goto yy52; - case ',': goto yy47; - case '.': goto yy50; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy46; - case ':': goto yy49; - default: goto yy3; - } -yy20: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case 'I': goto yy33; - case 'N': goto yy31; - case 'i': goto yy32; - case 'n': goto yy30; - default: goto yy3; - } -yy21: yych = *++YYCURSOR; - if(yych <= 0x00) goto yy28; - goto yy3; -yy22: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case '<': goto yy24; - default: goto yy3; - } -yy23: yych = *++YYCURSOR; - goto yy3; -yy24: yych = *++YYCURSOR; - if(yych <= 0x00) goto yy26; - goto yy25; -yy25: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; - } -yy26: ++YYCURSOR; - goto yy27; -yy27: -#line 121 "implicit.re" -{ return "merge"; } -#line 279 "" -yy28: ++YYCURSOR; - goto yy29; -yy29: -#line 119 "implicit.re" -{ return "default"; } -#line 285 "" -yy30: yych = *++YYCURSOR; - switch(yych){ - case 'a': goto yy45; - default: goto yy25; - } -yy31: yych = *++YYCURSOR; - switch(yych){ - case 'A': goto yy40; - case 'a': goto yy41; - default: goto yy25; - } -yy32: yych = *++YYCURSOR; - switch(yych){ - case 'n': goto yy39; - default: goto yy25; - } -yy33: yych = *++YYCURSOR; - switch(yych){ - case 'N': goto yy34; - case 'n': goto yy35; - default: goto yy25; - } -yy34: yych = *++YYCURSOR; - switch(yych){ - case 'F': goto yy36; - default: goto yy25; - } -yy35: yych = *++YYCURSOR; - switch(yych){ - case 'f': goto yy36; - default: goto yy25; - } -yy36: yych = *++YYCURSOR; - if(yych >= 0x01) goto yy25; - goto yy37; -yy37: ++YYCURSOR; - goto yy38; -yy38: -#line 105 "implicit.re" -{ return "float#inf"; } -#line 326 "" -yy39: yych = *++YYCURSOR; - switch(yych){ - case 'f': goto yy36; - default: goto yy25; - } -yy40: yych = *++YYCURSOR; - switch(yych){ - case 'N': goto yy42; - default: goto yy25; - } -yy41: yych = *++YYCURSOR; - switch(yych){ - case 'N': goto yy42; - default: goto yy25; - } -yy42: yych = *++YYCURSOR; - if(yych >= 0x01) goto yy25; - goto yy43; -yy43: ++YYCURSOR; - goto yy44; -yy44: -#line 109 "implicit.re" -{ return "float#nan"; } -#line 350 "" -yy45: yych = *++YYCURSOR; - switch(yych){ - case 'n': goto yy42; - default: goto yy25; - } -yy46: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy74; - default: goto yy48; - } -yy47: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy48; -yy48: switch(yych){ - case 0x00: goto yy52; - case ',': case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy47; - case '.': goto yy50; - case ':': goto yy49; - default: goto yy25; - } -yy49: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': goto yy66; - case '6': - case '7': - case '8': - case '9': goto yy67; - default: goto yy25; - } -yy50: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); - yych = *YYCURSOR; - goto yy51; -yy51: switch(yych){ - case 0x00: goto yy56; - case ',': goto yy54; - case '.': goto yy58; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy50; - case 'E': case 'e': goto yy60; - default: goto yy25; - } -yy52: ++YYCURSOR; - goto yy53; -yy53: -#line 97 "implicit.re" -{ return "int"; } -#line 432 "" -yy54: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy55; -yy55: switch(yych){ - case 0x00: goto yy56; - case ',': case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy54; - default: goto yy25; - } -yy56: ++YYCURSOR; - goto yy57; -yy57: -#line 99 "implicit.re" -{ return "float#fix"; } -#line 456 "" -yy58: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); - yych = *YYCURSOR; - goto yy59; -yy59: switch(yych){ - case '.': case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy58; - case 'E': case 'e': goto yy60; - default: goto yy25; - } -yy60: yych = *++YYCURSOR; - switch(yych){ - case '+': case '-': goto yy61; - default: goto yy25; - } -yy61: yych = *++YYCURSOR; - if(yych <= 0x00) goto yy25; - goto yy63; -yy62: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy63; -yy63: switch(yych){ - case 0x00: goto yy64; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy62; - default: goto yy25; - } -yy64: ++YYCURSOR; - goto yy65; -yy65: -#line 101 "implicit.re" -{ return "float#exp"; } -#line 506 "" -yy66: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - switch(yych){ - case 0x00: goto yy70; - case '.': goto yy68; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy67; - case ':': goto yy49; - default: goto yy25; - } -yy67: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - switch(yych){ - case 0x00: goto yy70; - case '.': goto yy68; - case ':': goto yy49; - default: goto yy25; - } -yy68: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy69; -yy69: switch(yych){ - case 0x00: goto yy72; - case ',': case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy68; - default: goto yy25; - } -yy70: ++YYCURSOR; - goto yy71; -yy71: -#line 95 "implicit.re" -{ return "int#base60"; } -#line 558 "" -yy72: ++YYCURSOR; - goto yy73; -yy73: -#line 103 "implicit.re" -{ return "float#base60"; } -#line 564 "" -yy74: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy75; - default: goto yy48; - } -yy75: yych = *++YYCURSOR; - switch(yych){ - case '-': goto yy76; - default: goto yy48; - } -yy76: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy77; - default: goto yy25; - } -yy77: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy78; - default: goto yy25; - } -yy78: yych = *++YYCURSOR; - switch(yych){ - case '-': goto yy79; - default: goto yy25; - } -yy79: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy80; - default: goto yy25; - } -yy80: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy81; - default: goto yy25; - } -yy81: yych = *++YYCURSOR; - switch(yych){ - case 0x00: goto yy82; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy25; - case 'T': goto yy84; - case 't': goto yy85; - default: goto yy87; - } -yy82: ++YYCURSOR; - goto yy83; -yy83: -#line 111 "implicit.re" -{ return "timestamp#ymd"; } -#line 667 "" -yy84: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy126; - default: goto yy25; - } -yy85: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy108; - default: goto yy25; - } -yy86: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 9) YYFILL(9); - yych = *YYCURSOR; - goto yy87; -yy87: switch(yych){ - case 0x09: case ' ': goto yy86; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy88; - default: goto yy25; - } -yy88: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy89; - default: goto yy25; - } -yy89: yych = *++YYCURSOR; - switch(yych){ - case ':': goto yy90; - default: goto yy25; - } -yy90: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy91; - default: goto yy25; - } -yy91: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy92; - default: goto yy25; - } -yy92: yych = *++YYCURSOR; - switch(yych){ - case ':': goto yy93; - default: goto yy25; - } -yy93: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy94; - default: goto yy25; - } -yy94: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy95; - default: goto yy25; - } -yy95: yych = *++YYCURSOR; - switch(yych){ - case 0x09: case ' ': goto yy98; - case '.': goto yy96; - default: goto yy25; - } -yy96: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy97; -yy97: switch(yych){ - case 0x09: case ' ': goto yy98; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy96; - default: goto yy25; - } -yy98: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); - yych = *YYCURSOR; - goto yy99; -yy99: switch(yych){ - case 0x09: case ' ': goto yy98; - case '+': case '-': goto yy101; - case 'Z': goto yy100; - default: goto yy25; - } -yy100: yych = *++YYCURSOR; - if(yych <= 0x00) goto yy105; - goto yy25; -yy101: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy102; - default: goto yy25; - } -yy102: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy103; - default: goto yy25; - } -yy103: yych = *++YYCURSOR; - switch(yych){ - case 0x00: goto yy105; - case ':': goto yy104; - default: goto yy25; - } -yy104: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy107; - default: goto yy25; - } -yy105: ++YYCURSOR; - goto yy106; -yy106: -#line 115 "implicit.re" -{ return "timestamp#spaced"; } -#line 884 "" -yy107: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy100; - default: goto yy25; - } -yy108: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy109; - default: goto yy25; - } -yy109: yych = *++YYCURSOR; - switch(yych){ - case ':': goto yy110; - default: goto yy25; - } -yy110: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy111; - default: goto yy25; - } -yy111: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy112; - default: goto yy25; - } -yy112: yych = *++YYCURSOR; - switch(yych){ - case ':': goto yy113; - default: goto yy25; - } -yy113: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy114; - default: goto yy25; - } -yy114: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy115; - default: goto yy25; - } -yy115: yych = *++YYCURSOR; - switch(yych){ - case '.': goto yy116; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy25; - default: goto yy117; - } -yy116: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); - yych = *YYCURSOR; - goto yy117; -yy117: switch(yych){ - case '+': case '-': goto yy119; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy116; - case 'Z': goto yy118; - default: goto yy25; - } -yy118: yych = *++YYCURSOR; - if(yych <= 0x00) goto yy123; - goto yy25; -yy119: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy120; - default: goto yy25; - } -yy120: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy121; - default: goto yy25; - } -yy121: yych = *++YYCURSOR; - switch(yych){ - case 0x00: goto yy123; - case ':': goto yy122; - default: goto yy25; - } -yy122: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy125; - default: goto yy25; - } -yy123: ++YYCURSOR; - goto yy124; -yy124: -#line 113 "implicit.re" -{ return "timestamp#iso8601"; } -#line 1069 "" -yy125: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy118; - default: goto yy25; - } -yy126: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy127; - default: goto yy25; - } -yy127: yych = *++YYCURSOR; - switch(yych){ - case ':': goto yy128; - default: goto yy25; - } -yy128: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy129; - default: goto yy25; - } -yy129: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy130; - default: goto yy25; - } -yy130: yych = *++YYCURSOR; - switch(yych){ - case ':': goto yy131; - default: goto yy25; - } -yy131: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy132; - default: goto yy25; - } -yy132: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy133; - default: goto yy25; - } -yy133: yych = *++YYCURSOR; - switch(yych){ - case '.': goto yy134; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy25; - case 'Z': goto yy136; - default: goto yy135; - } -yy134: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); - yych = *YYCURSOR; - goto yy135; -yy135: switch(yych){ - case '+': case '-': goto yy119; - case '0': goto yy134; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy138; - case 'Z': goto yy118; - default: goto yy25; - } -yy136: yych = *++YYCURSOR; - if(yych >= 0x01) goto yy25; - goto yy137; -yy137: yych = *++YYCURSOR; - goto yy124; -yy138: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); - yych = *YYCURSOR; - goto yy139; -yy139: switch(yych){ - case '+': case '-': goto yy119; - case '0': goto yy134; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy138; - case 'Z': goto yy136; - default: goto yy25; - } -yy140: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy155; - case '8': - case '9': goto yy153; - default: goto yy143; - } -yy141: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy153; - default: goto yy152; - } -yy142: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy143; -yy143: switch(yych){ - case 0x00: goto yy149; - case ',': case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy142; - case '.': goto yy50; - case '8': - case '9': goto yy151; - case ':': goto yy49; - default: goto yy25; - } -yy144: yych = *++YYCURSOR; - if(yych <= 0x00) goto yy25; - goto yy146; -yy145: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy146; -yy146: switch(yych){ - case 0x00: goto yy147; - 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 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': goto yy145; - default: goto yy25; - } -yy147: ++YYCURSOR; - goto yy148; -yy148: -#line 91 "implicit.re" -{ return "int#hex"; } -#line 1307 "" -yy149: ++YYCURSOR; - goto yy150; -yy150: -#line 93 "implicit.re" -{ return "int#oct"; } -#line 1313 "" -yy151: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy152; -yy152: switch(yych){ - case ',': case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy151; - case '.': goto yy50; - case ':': goto yy49; - default: goto yy25; - } -yy153: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy154; - default: goto yy152; - } -yy154: yych = *++YYCURSOR; - switch(yych){ - case '-': goto yy76; - default: goto yy152; - } -yy155: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': goto yy156; - case '8': - case '9': goto yy154; - default: goto yy143; - } -yy156: yych = *++YYCURSOR; - switch(yych){ - case '-': goto yy76; - default: goto yy143; - } -yy157: yych = *++YYCURSOR; - switch(yych){ - case 'I': goto yy160; - case 'i': goto yy159; - default: goto yy25; - } -yy158: yych = *++YYCURSOR; - switch(yych){ - case 0x00: goto yy52; - case 'x': goto yy144; - default: goto yy143; - } -yy159: yych = *++YYCURSOR; - switch(yych){ - case 'n': goto yy166; - default: goto yy25; - } -yy160: yych = *++YYCURSOR; - switch(yych){ - case 'N': goto yy161; - case 'n': goto yy162; - default: goto yy25; - } -yy161: yych = *++YYCURSOR; - switch(yych){ - case 'F': goto yy163; - default: goto yy25; - } -yy162: yych = *++YYCURSOR; - switch(yych){ - case 'f': goto yy163; - default: goto yy25; - } -yy163: yych = *++YYCURSOR; - if(yych >= 0x01) goto yy25; - goto yy164; -yy164: ++YYCURSOR; - goto yy165; -yy165: -#line 107 "implicit.re" -{ return "float#neginf"; } -#line 1412 "" -yy166: yych = *++YYCURSOR; - switch(yych){ - case 'f': goto yy163; - default: goto yy25; - } -yy167: yych = *++YYCURSOR; - switch(yych){ - case 'I': goto yy33; - case 'i': goto yy32; - default: goto yy25; - } -yy168: yych = *++YYCURSOR; - switch(yych){ - case 'L': goto yy175; - default: goto yy25; - } -yy169: yych = *++YYCURSOR; - switch(yych){ - case 'l': goto yy170; - default: goto yy25; - } -yy170: yych = *++YYCURSOR; - switch(yych){ - case 's': goto yy171; - default: goto yy25; - } -yy171: yych = *++YYCURSOR; - switch(yych){ - case 'e': goto yy172; - default: goto yy25; - } -yy172: yych = *++YYCURSOR; - if(yych >= 0x01) goto yy25; - goto yy173; -yy173: ++YYCURSOR; - goto yy174; -yy174: -#line 89 "implicit.re" -{ return "bool#no"; } -#line 1452 "" -yy175: yych = *++YYCURSOR; - switch(yych){ - case 'S': goto yy176; - default: goto yy25; - } -yy176: yych = *++YYCURSOR; - switch(yych){ - case 'E': goto yy172; - default: goto yy25; - } -yy177: yych = *++YYCURSOR; - switch(yych){ - case 'l': goto yy178; - default: goto yy25; - } -yy178: yych = *++YYCURSOR; - switch(yych){ - case 's': goto yy179; - default: goto yy25; - } -yy179: yych = *++YYCURSOR; - switch(yych){ - case 'e': goto yy172; - default: goto yy25; - } -yy180: yych = *++YYCURSOR; - switch(yych){ - case 'F': goto yy172; - default: goto yy25; - } -yy181: yych = *++YYCURSOR; - switch(yych){ - case 'f': goto yy172; - default: goto yy25; - } -yy182: yych = *++YYCURSOR; - if(yych >= 0x01) goto yy25; - goto yy183; -yy183: ++YYCURSOR; - goto yy184; -yy184: -#line 87 "implicit.re" -{ return "bool#yes"; } -#line 1496 "" -yy185: yych = *++YYCURSOR; - switch(yych){ - case 'f': goto yy172; - default: goto yy25; - } -yy186: yych = *++YYCURSOR; - switch(yych){ - case 'U': goto yy189; - default: goto yy25; - } -yy187: yych = *++YYCURSOR; - switch(yych){ - case 'u': goto yy188; - default: goto yy25; - } -yy188: yych = *++YYCURSOR; - switch(yych){ - case 'e': goto yy182; - default: goto yy25; - } -yy189: yych = *++YYCURSOR; - switch(yych){ - case 'E': goto yy182; - default: goto yy25; - } -yy190: yych = *++YYCURSOR; - switch(yych){ - case 'u': goto yy191; - default: goto yy25; - } -yy191: yych = *++YYCURSOR; - switch(yych){ - case 'e': goto yy182; - default: goto yy25; - } -yy192: yych = *++YYCURSOR; - switch(yych){ - case 'S': goto yy182; - default: goto yy25; - } -yy193: yych = *++YYCURSOR; - switch(yych){ - case 's': goto yy182; - default: goto yy25; - } -yy194: yych = *++YYCURSOR; - switch(yych){ - case 's': goto yy182; - default: goto yy25; - } -yy195: yych = *++YYCURSOR; - switch(yych){ - case 'L': goto yy199; - default: goto yy25; - } -yy196: yych = *++YYCURSOR; - switch(yych){ - case 'l': goto yy197; - default: goto yy25; - } -yy197: yych = *++YYCURSOR; - switch(yych){ - case 'l': goto yy198; - default: goto yy25; - } -yy198: yych = *++YYCURSOR; - if(yych <= 0x00) goto yy6; - goto yy25; -yy199: yych = *++YYCURSOR; - switch(yych){ - case 'L': goto yy198; - default: goto yy25; - } -yy200: yych = *++YYCURSOR; - switch(yych){ - case 'l': goto yy201; - default: goto yy25; - } -yy201: ++YYCURSOR; - switch((yych = *YYCURSOR)) { - case 'l': goto yy198; - default: goto yy25; - } -} -#line 125 "implicit.re" - - -} - -/* Remove ending fragment and compare types */ -int -syck_tagcmp( const char *tag1, const char *tag2 ) -{ - if ( tag1 == tag2 ) return 1; - if ( tag1 == NULL || tag2 == NULL ) return 0; - else { - int i; - char *othorpe; - char *tmp1 = syck_strndup( tag1, strlen( tag1 ) ); - char *tmp2 = syck_strndup( tag2, strlen( tag2 ) ); - othorpe = strstr( tmp1, "#" ); - if ( othorpe != NULL ) { - othorpe[0] = '\0'; - } - othorpe = strstr( tmp2, "#" ); - if ( othorpe != NULL ) { - othorpe[0] = '\0'; - } - i = strcmp( tmp1, tmp2 ); - S_FREE( tmp1 ); S_FREE( tmp2 ); - return i; - } -} - -char * -syck_type_id_to_uri( const char *type_id ) -{ - const char *cursor, *limit, *marker = 0; - - cursor = type_id; - limit = type_id + strlen( type_id ); - - -#line 1620 "" -{ - YYCTYPE yych; - unsigned int yyaccept = 0; - goto yy202; - ++YYCURSOR; -yy202: - if((YYLIMIT - YYCURSOR) < 11) YYFILL(11); - yych = *YYCURSOR; - switch(yych){ - case 0x00: goto yy204; - case '!': goto yy208; - 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 'u': - case 'v': - case 'w': case 'y': - case 'z': goto yy210; - case 't': goto yy205; - case 'x': goto yy207; - default: goto yy211; - } -yy204: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy206; - } -yy205: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case ',': goto yy216; - case '-': goto yy212; - case '.': goto yy217; - case '/': goto yy218; - 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 '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 yy214; - case 'a': goto yy246; - default: goto yy206; - } -yy206: -#line 202 "implicit.re" -{ return syck_taguri( YAML_DOMAIN, type_id, (int)strlen( type_id ) ); } -#line 1768 "" -yy207: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case ',': case '.': - 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 yy215; - case '-': goto yy236; - default: goto yy206; - } -yy208: ++YYCURSOR; - goto yy209; -yy209: -#line 176 "implicit.re" -{ return syck_xprivate( type_id + 1, (int)strlen( type_id ) - 1 ); } -#line 1842 "" -yy210: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - switch(yych){ - case ',': goto yy216; - case '-': goto yy212; - case '.': goto yy217; - case '/': goto yy218; - 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 yy214; - default: goto yy206; - } -yy211: yych = *++YYCURSOR; - goto yy206; -yy212: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy213; -yy213: switch(yych){ - case '-': goto yy212; - 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 yy214; - default: goto yy204; - } -yy214: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - goto yy215; -yy215: switch(yych){ - case ',': goto yy216; - case '-': goto yy212; - case '.': goto yy217; - case '/': goto yy218; - 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 yy214; - default: goto yy204; - } -yy216: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy224; - default: goto yy204; - } -yy217: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - 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 '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 yy220; - default: goto yy204; - } -yy218: ++YYCURSOR; - goto yy219; -yy219: -#line 178 "implicit.re" -{ char *domain = S_ALLOC_N( char, ( YYCURSOR - type_id ) + 15 ); - char *uri; - - domain[0] = '\0'; - strncat( domain, type_id, ( YYCURSOR - type_id ) - 1 ); - strcat( domain, "." ); - strcat( domain, YAML_DOMAIN ); - uri = syck_taguri( domain, YYCURSOR, (int)(YYLIMIT - YYCURSOR) ); - - S_FREE( domain ); - return uri; - } -#line 2149 "" -yy220: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 12) YYFILL(12); - yych = *YYCURSOR; - goto yy221; -yy221: switch(yych){ - case ',': goto yy216; - case '-': goto yy222; - case '.': goto yy217; - case '/': goto yy218; - 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 yy220; - default: goto yy204; - } -yy222: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy223; -yy223: switch(yych){ - case '-': goto yy222; - 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 yy220; - default: goto yy204; - } -yy224: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy225; - default: goto yy204; - } -yy225: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy226; - default: goto yy204; - } -yy226: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy227; - default: goto yy204; - } -yy227: yych = *++YYCURSOR; - switch(yych){ - case '-': goto yy228; - case '/': goto yy229; - default: goto yy204; - } -yy228: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy231; - default: goto yy204; - } -yy229: ++YYCURSOR; - goto yy230; -yy230: -#line 191 "implicit.re" -{ char *domain = S_ALLOC_N( char, YYCURSOR - type_id ); - char *uri; - - domain[0] = '\0'; - strncat( domain, type_id, ( YYCURSOR - type_id ) - 1 ); - uri = syck_taguri( domain, YYCURSOR, (int)(YYLIMIT - YYCURSOR) ); - - S_FREE( domain ); - return uri; - } -#line 2365 "" -yy231: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy232; - default: goto yy204; - } -yy232: yych = *++YYCURSOR; - switch(yych){ - case '-': goto yy233; - case '/': goto yy229; - default: goto yy204; - } -yy233: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy234; - default: goto yy204; - } -yy234: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy235; - default: goto yy204; - } -yy235: yych = *++YYCURSOR; - switch(yych){ - case '/': goto yy229; - default: goto yy204; - } -yy236: yych = *++YYCURSOR; - switch(yych){ - case 'p': goto yy237; - default: goto yy213; - } -yy237: yych = *++YYCURSOR; - switch(yych){ - case ',': goto yy216; - case '.': goto yy217; - case '/': goto yy218; - case 'r': goto yy238; - default: goto yy213; - } -yy238: yych = *++YYCURSOR; - switch(yych){ - case ',': goto yy216; - case '.': goto yy217; - case '/': goto yy218; - case 'i': goto yy239; - default: goto yy213; - } -yy239: yych = *++YYCURSOR; - switch(yych){ - case ',': goto yy216; - case '.': goto yy217; - case '/': goto yy218; - case 'v': goto yy240; - default: goto yy213; - } -yy240: yych = *++YYCURSOR; - switch(yych){ - case ',': goto yy216; - case '.': goto yy217; - case '/': goto yy218; - case 'a': goto yy241; - default: goto yy213; - } -yy241: yych = *++YYCURSOR; - switch(yych){ - case ',': goto yy216; - case '.': goto yy217; - case '/': goto yy218; - case 't': goto yy242; - default: goto yy213; - } -yy242: yych = *++YYCURSOR; - switch(yych){ - case ',': goto yy216; - case '.': goto yy217; - case '/': goto yy218; - case 'e': goto yy243; - default: goto yy213; - } -yy243: yych = *++YYCURSOR; - switch(yych){ - case ',': goto yy216; - case '.': goto yy217; - case '/': goto yy218; - case ':': goto yy244; - default: goto yy213; - } -yy244: ++YYCURSOR; - goto yy245; -yy245: -#line 174 "implicit.re" -{ return syck_strndup( type_id, strlen( type_id ) ); } -#line 2485 "" -yy246: yych = *++YYCURSOR; - switch(yych){ - case ',': goto yy216; - case '.': goto yy217; - case '/': goto yy218; - case 'g': goto yy247; - default: goto yy213; - } -yy247: yych = *++YYCURSOR; - switch(yych){ - case ',': goto yy216; - case '.': goto yy217; - case '/': goto yy218; - case ':': goto yy248; - default: goto yy213; - } -yy248: yych = *++YYCURSOR; - switch(yych){ - case ',': - case '-': - case '.': goto yy204; - default: goto yy250; - } -yy249: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - goto yy250; -yy250: switch(yych){ - case ',': goto yy253; - case '-': goto yy251; - case '.': goto yy254; - 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 yy249; - default: goto yy204; - } -yy251: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy252; -yy252: switch(yych){ - case '-': goto yy251; - 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 yy249; - default: goto yy204; - } -yy253: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy259; - default: goto yy204; - } -yy254: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - 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 '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 yy255; - default: goto yy204; - } -yy255: ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 12) YYFILL(12); - yych = *YYCURSOR; - goto yy256; -yy256: switch(yych){ - case ',': goto yy253; - case '-': goto yy257; - case '.': goto yy254; - 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 yy255; - default: goto yy204; - } -yy257: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy258; -yy258: switch(yych){ - case '-': goto yy257; - 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 yy255; - default: goto yy204; - } -yy259: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy260; - default: goto yy204; - } -yy260: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy261; - default: goto yy204; - } -yy261: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy262; - default: goto yy204; - } -yy262: yych = *++YYCURSOR; - switch(yych){ - case '-': goto yy263; - case ':': goto yy264; - default: goto yy204; - } -yy263: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy266; - default: goto yy204; - } -yy264: ++YYCURSOR; - goto yy265; -yy265: -#line 172 "implicit.re" -{ return syck_strndup( type_id, strlen( type_id ) ); } -#line 2932 "" -yy266: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy267; - default: goto yy204; - } -yy267: yych = *++YYCURSOR; - switch(yych){ - case '-': goto yy268; - case ':': goto yy264; - default: goto yy204; - } -yy268: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy269; - default: goto yy204; - } -yy269: yych = *++YYCURSOR; - switch(yych){ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy270; - default: goto yy204; - } -yy270: ++YYCURSOR; - switch((yych = *YYCURSOR)) { - case ':': goto yy264; - default: goto yy204; - } -} -#line 204 "implicit.re" - - -} diff --git a/ext/syck/lib/syck.rb b/ext/syck/lib/syck.rb deleted file mode 100644 index f8e3c0f8bc..0000000000 --- a/ext/syck/lib/syck.rb +++ /dev/null @@ -1,447 +0,0 @@ -# -*- mode: ruby; ruby-indent-level: 4; tab-width: 4 -*- vim: sw=4 ts=4 -# $Id$ -# -# = yaml.rb: top-level module with methods for loading and parsing YAML documents -# -# Author:: why the lucky stiff -# - -require 'yaml/syck' - -# == YAML -# -# YAML(tm) (rhymes with 'camel') is a -# straightforward machine parsable data serialization format designed for -# human readability and interaction with scripting languages such as Perl -# and Python. YAML is optimized for data serialization, formatted -# dumping, configuration files, log files, Internet messaging and -# filtering. This specification describes the YAML information model and -# serialization format. Together with the Unicode standard for characters, it -# provides all the information necessary to understand YAML Version 1.0 -# and construct computer programs to process it. -# -# See http://yaml.org/ for more information. For a quick tutorial, please -# visit YAML In Five Minutes (http://yaml.kwiki.org/?YamlInFiveMinutes). -# -# == About This Library -# -# The YAML 1.0 specification outlines four stages of YAML loading and dumping. -# This library honors all four of those stages, although data is really only -# available to you in three stages. -# -# The four stages are: native, representation, serialization, and presentation. -# -# The native stage refers to data which has been loaded completely into Ruby's -# own types. (See +YAML::load+.) -# -# The representation stage means data which has been composed into -# +YAML::BaseNode+ objects. In this stage, the document is available as a -# tree of node objects. You can perform YPath queries and transformations -# at this level. (See +YAML::parse+.) -# -# The serialization stage happens inside the parser. The YAML parser used in -# Ruby is called Syck. Serialized nodes are available in the extension as -# SyckNode structs. -# -# The presentation stage is the YAML document itself. This is accessible -# to you as a string. (See +YAML::dump+.) -# -# For more information about the various information models, see Chapter -# 3 of the YAML 1.0 Specification (http://yaml.org/spec/#id2491269). -# -# The YAML module provides quick access to the most common loading (YAML::load) -# and dumping (YAML::dump) tasks. This module also provides an API for registering -# global types (YAML::add_domain_type). -# -# == Example -# -# A simple round-trip (load and dump) of an object. -# -# require "yaml" -# -# test_obj = ["dogs", "cats", "badgers"] -# -# yaml_obj = YAML::dump( test_obj ) -# # -> --- -# - dogs -# - cats -# - badgers -# ruby_obj = YAML::load( yaml_obj ) -# # => ["dogs", "cats", "badgers"] -# ruby_obj == test_obj -# # => true -# -# To register your custom types with the global resolver, use +add_domain_type+. -# -# YAML::add_domain_type( "your-site.com,2004", "widget" ) do |type, val| -# Widget.new( val ) -# end -# -module Syck - - DefaultResolver.use_types_at( @@tagged_classes ) - - # Returns a new default parser - def self.parser; Parser.new.set_resolver( self.resolver ); end - - # Returns a new generic parser - def self.generic_parser - warn "#{caller[0]}: YAML.generic_parser is deprecated, switch to psych" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - Parser.new.set_resolver( GenericResolver ) - end - - # Returns the default resolver - def self.resolver - warn "#{caller[0]}: YAML.resolver is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - DefaultResolver - end - - # Returns a new default emitter - def self.emitter - warn "#{caller[0]}: YAML.emitter is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - Emitter.new.set_resolver( self.resolver ) - end - - # - # Converts _obj_ to YAML and writes the YAML result to _io_. - # - # File.open( 'animals.yaml', 'w' ) do |out| - # YAML.dump( ['badger', 'elephant', 'tiger'], out ) - # end - # - # If no _io_ is provided, a string containing the dumped YAML - # is returned. - # - # YAML.dump( :locked ) - # #=> "--- :locked" - # - def self.dump( obj, io = nil ) - obj.to_yaml( io || io2 = StringIO.new ) - io || ( io2.rewind; io2.read ) - end - - # - # Load a document from the current _io_ stream. - # - # File.open( 'animals.yaml' ) { |yf| YAML::load( yf ) } - # #=> ['badger', 'elephant', 'tiger'] - # - # Can also load from a string. - # - # YAML.load( "--- :locked" ) - # #=> :locked - # - def self.load( io ) - parser.load( io ) - end - - # - # Load a document from the file located at _filepath_. - # - # YAML.load_file( 'animals.yaml' ) - # #=> ['badger', 'elephant', 'tiger'] - # - def self.load_file( filepath ) - File.open( filepath ) do |f| - load( f ) - end - end - - # - # Parse the first document from the current _io_ stream - # - # File.open( 'animals.yaml' ) { |yf| YAML::load( yf ) } - # #=> #, - # #, - # #]> - # - # Can also load from a string. - # - # YAML.parse( "--- :locked" ) - # #=> # - # - def self.parse( io ) - generic_parser.load( io ) - end - - # - # Parse a document from the file located at _filepath_. - # - # YAML.parse_file( 'animals.yaml' ) - # #=> #, - # #, - # #]> - # - def self.parse_file( filepath ) - File.open( filepath ) do |f| - parse( f ) - end - end - - # - # Calls _block_ with each consecutive document in the YAML - # stream contained in _io_. - # - # File.open( 'many-docs.yaml' ) do |yf| - # YAML.each_document( yf ) do |ydoc| - # ## ydoc contains the single object - # ## from the YAML document - # end - # end - # - def self.each_document( io, &block ) - warn "#{caller[0]}: YAML.each_document is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - parser.load_documents( io, &block ) - end - - # - # Calls _block_ with each consecutive document in the YAML - # stream contained in _io_. - # - # File.open( 'many-docs.yaml' ) do |yf| - # YAML.load_documents( yf ) do |ydoc| - # ## ydoc contains the single object - # ## from the YAML document - # end - # end - # - def self.load_documents( io, &doc_proc ) - parser.load_documents( io, &doc_proc ) - end - - # - # Calls _block_ with a tree of +YAML::BaseNodes+, one tree for - # each consecutive document in the YAML stream contained in _io_. - # - # File.open( 'many-docs.yaml' ) do |yf| - # YAML.each_node( yf ) do |ydoc| - # ## ydoc contains a tree of nodes - # ## from the YAML document - # end - # end - # - def self.each_node( io, &doc_proc ) - warn "#{caller[0]}: YAML.each_node is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - generic_parser.load_documents( io, &doc_proc ) - end - - # - # Calls _block_ with a tree of +YAML::BaseNodes+, one tree for - # each consecutive document in the YAML stream contained in _io_. - # - # File.open( 'many-docs.yaml' ) do |yf| - # YAML.parse_documents( yf ) do |ydoc| - # ## ydoc contains a tree of nodes - # ## from the YAML document - # end - # end - # - def self.parse_documents( io, &doc_proc ) - warn "#{caller[0]}: YAML.parse_documents is deprecated, use load_stream" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - self.each_node( io, &doc_proc ) - end - - # - # Loads all documents from the current _io_ stream, - # returning a +YAML::Stream+ object containing all - # loaded documents. - # - def self.load_stream( io ) - d = nil - parser.load_documents( io ) do |doc| - d = Stream.new if not d - d.add( doc ) - end - return d - end - - # - # Returns a YAML stream containing each of the items in +objs+, - # each having their own document. - # - # YAML.dump_stream( 0, [], {} ) - # #=> --- 0 - # --- [] - # --- {} - # - def self.dump_stream( *objs ) - d = Stream.new - objs.each do |doc| - d.add( doc ) - end - d.emit - end - - # - # Add a global handler for a YAML domain type. - # - def self.add_domain_type( domain, type_tag, &transfer_proc ) - resolver.add_type( "tag:#{ domain }:#{ type_tag }", transfer_proc ) - end - - # - # Add a transfer method for a builtin type - # - def self.add_builtin_type( type_tag, &transfer_proc ) - resolver.add_type( "tag:yaml.org,2002:#{ type_tag }", transfer_proc ) - end - - # - # Add a transfer method for a builtin type - # - def self.add_ruby_type( type_tag, &transfer_proc ) - warn "#{caller[0]}: YAML.add_ruby_type is deprecated, use add_domain_type" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - resolver.add_type( "tag:ruby.yaml.org,2002:#{ type_tag }", transfer_proc ) - end - - # - # Add a private document type - # - def self.add_private_type( type_re, &transfer_proc ) - warn "#{caller[0]}: YAML.add_private_type is deprecated, use add_domain_type" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - resolver.add_type( "x-private:" + type_re, transfer_proc ) - end - - # - # Detect typing of a string - # - def self.detect_implicit( val ) - warn "#{caller[0]}: YAML.detect_implicit is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - resolver.detect_implicit( val ) - end - - # - # Convert a type_id to a taguri - # - def self.tagurize( val ) - warn "#{caller[0]}: YAML.tagurize is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - resolver.tagurize( val ) - end - - # - # Apply a transfer method to a Ruby object - # - def self.transfer( type_id, obj ) - warn "#{caller[0]}: YAML.transfer is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - resolver.transfer( tagurize( type_id ), obj ) - end - - # - # Apply any implicit a node may qualify for - # - def self.try_implicit( obj ) - warn "#{caller[0]}: YAML.try_implicit is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - transfer( detect_implicit( obj ), obj ) - end - - # - # Method to extract colon-seperated type and class, returning - # the type and the constant of the class - # - def self.read_type_class( type, obj_class ) - warn "#{caller[0]}: YAML.read_type_class is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - type, tclass = type.split( ':', 4 ).last(2) - tclass.split( "::" ).each { |c| obj_class = obj_class.const_get( c ) } if tclass - return [ type, obj_class ] - end - - # - # Allocate blank object - # - def self.object_maker( obj_class, val ) - warn "#{caller[0]}: YAML.object_maker is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - if Hash === val - o = obj_class.allocate - val.each_pair { |k,v| - o.instance_variable_set("@#{k}", v) - } - o - else - raise Error, "Invalid object explicitly tagged !ruby/Object: " + val.inspect - end - end - - # - # Allocate an Emitter if needed - # - def self.quick_emit( oid, opts = {}, &e ) - warn "#{caller[0]}: YAML.quick_emit is deprecated" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__)) - out = - if opts.is_a? Emitter - opts - else - emitter.reset( opts ) - end - out.emit( oid, &e ) - end - -end - -module Kernel - # - # ryan:: You know how Kernel.p is a really convenient way to dump ruby - # structures? The only downside is that it's not as legible as - # YAML. - # - # _why:: (listening) - # - # ryan:: I know you don't want to urinate all over your users' namespaces. - # But, on the other hand, convenience of dumping for debugging is, - # IMO, a big YAML use case. - # - # _why:: Go nuts! Have a pony parade! - # - # ryan:: Either way, I certainly will have a pony parade. - # - - # Prints any supplied _objects_ out in YAML. Intended as - # a variation on +Kernel::p+. - # - # S = Struct.new(:name, :state) - # s = S['dave', 'TX'] - # y s - # - # _produces:_ - # - # --- !ruby/struct:S - # name: dave - # state: TX - # - def y( object, *objects ) - objects.unshift object - puts( if objects.length == 1 - YAML.dump( *objects ) - else - YAML.dump_stream( *objects ) - end ) - end - private :y -end - - diff --git a/ext/syck/lib/syck/baseemitter.rb b/ext/syck/lib/syck/baseemitter.rb deleted file mode 100644 index 5e39e450de..0000000000 --- a/ext/syck/lib/syck/baseemitter.rb +++ /dev/null @@ -1,242 +0,0 @@ -# -# BaseEmitter -# - -require 'syck/constants' -require 'syck/encoding' -require 'syck/error' - -module Syck - module BaseEmitter - def options( opt = nil ) - if opt - @options[opt] || DEFAULTS[opt] - else - @options - end - end - - def options=( opt ) - @options = opt - end - - # - # Emit binary data - # - def binary_base64( value ) - self << "!binary " - self.node_text( [value].pack("m"), '|' ) - end - - # - # Emit plain, normal flowing text - # - def node_text( value, block = nil ) - @seq_map = false - valx = value.dup - unless block - block = - if options(:UseBlock) - '|' - elsif not options(:UseFold) and valx =~ /\n[ \t]/ and not valx =~ /#{ESCAPE_CHAR}/ - '|' - else - '>' - end - indt = $&.to_i if block =~ /\d+/ - if valx =~ /(\A\n*[ \t#]|^---\s+)/ - indt = options(:Indent) unless indt.to_i > 0 - block += indt.to_s - end - - block += - if valx =~ /\n\Z\n/ - "+" - elsif valx =~ /\Z\n/ - "" - else - "-" - end - end - block += "\n" - if block[0] == ?" - esc_skip = ( "\t\n" unless valx =~ /^[ \t]/ ) || "" - valx = fold( Syck.escape( valx, esc_skip ) + "\"" ).chomp - self << '"' + indent_text( valx, indt, false ) - else - if block[0] == ?> - valx = fold( valx ) - end - #p [block, indt] - self << block + indent_text( valx, indt ) - end - end - - # - # Emit a simple, unqouted string - # - def simple( value ) - @seq_map = false - self << value.to_s - end - - # - # Emit double-quoted string - # - def double( value ) - "\"#{Syck.escape( value )}\"" - end - - # - # Emit single-quoted string - # - def single( value ) - "'#{value}'" - end - - # - # Write a text block with the current indent - # - def indent_text( text, mod, first_line = true ) - return "" if text.to_s.empty? - spacing = indent( mod ) - text = text.gsub( /\A([^\n])/, "#{ spacing }\\1" ) if first_line - return text.gsub( /\n^([^\n])/, "\n#{spacing}\\1" ) - end - - # - # Write a current indent - # - def indent( mod = nil ) - #p [ self.id, level, mod, :INDENT ] - if level <= 0 - mod ||= 0 - else - mod ||= options(:Indent) - mod += ( level - 1 ) * options(:Indent) - end - return " " * mod - end - - # - # Add indent to the buffer - # - def indent! - self << indent - end - - # - # Folding paragraphs within a column - # - def fold( value ) - value.gsub( /(^[ \t]+.*$)|(\S.{0,#{options(:BestWidth) - 1}})(?:[ \t]+|(\n+(?=[ \t]|\Z))|$)/ ) do - $1 || $2 + ( $3 || "\n" ) - end - end - - # - # Quick mapping - # - def map( type, &e ) - val = Mapping.new - e.call( val ) - self << "#{type} " if type.length.nonzero? - - # - # Empty hashes - # - if val.length.zero? - self << "{}" - @seq_map = false - else - # FIXME - # if @buffer.length == 1 and options(:UseHeader) == false and type.length.zero? - # @headless = 1 - # end - - defkey = @options.delete( :DefaultKey ) - if defkey - seq_map_shortcut - self << "= : " - defkey.to_yaml( :Emitter => self ) - end - - # - # Emit the key and value - # - val.each { |v| - seq_map_shortcut - if v[0].is_complex_yaml? - self << "? " - end - v[0].to_yaml( :Emitter => self ) - if v[0].is_complex_yaml? - self << "\n" - indent! - end - self << ": " - v[1].to_yaml( :Emitter => self ) - } - end - end - - def seq_map_shortcut - # FIXME: seq_map needs to work with the new anchoring system - # if @seq_map - # @anchor_extras[@buffer.length - 1] = "\n" + indent - # @seq_map = false - # else - self << "\n" - indent! - # end - end - - # - # Quick sequence - # - def seq( type, &e ) - @seq_map = false - val = Sequence.new - e.call( val ) - self << "#{type} " if type.length.nonzero? - - # - # Empty arrays - # - if val.length.zero? - self << "[]" - else - # FIXME - # if @buffer.length == 1 and options(:UseHeader) == false and type.length.zero? - # @headless = 1 - # end - - # - # Emit the key and value - # - val.each { |v| - self << "\n" - indent! - self << "- " - @seq_map = true if v.class == Hash - v.to_yaml( :Emitter => self ) - } - end - end - end - - # - # Emitter helper classes - # - class Mapping < Array - def add( k, v ) - push [k, v] - end - end - - class Sequence < Array - def add( v ) - push v - end - end -end diff --git a/ext/syck/lib/syck/basenode.rb b/ext/syck/lib/syck/basenode.rb deleted file mode 100644 index 5dc27bfdfe..0000000000 --- a/ext/syck/lib/syck/basenode.rb +++ /dev/null @@ -1,222 +0,0 @@ -# -# YAML::BaseNode class -# - -module Syck - - # - # YAML Generic Model container - # - module BaseNode - - # - # Search for YPath entry and return - # qualified nodes. - # - def select( ypath_str ) - warn "#{caller[0]}: select is deprecated" if $VERBOSE - matches = match_path( ypath_str ) - - # - # Create a new generic view of the elements selected - # - if matches - result = [] - matches.each { |m| - result.push m.last - } - Syck.transfer( 'seq', result ) - end - end - - # - # Search for YPath entry and return - # transformed nodes. - # - def select!( ypath_str ) - warn "#{caller[0]}: select!() is deprecated" if $VERBOSE - matches = match_path( ypath_str ) - - # - # Create a new generic view of the elements selected - # - if matches - result = [] - matches.each { |m| - result.push m.last.transform - } - result - end - end - - # - # Search for YPath entry and return a list of - # qualified paths. - # - def search( ypath_str ) - warn "#{caller[0]}: search() is deprecated" if $VERBOSE - matches = match_path( ypath_str ) - - if matches - matches.collect { |m| - path = [] - m.each_index { |i| - path.push m[i] if ( i % 2 ).zero? - } - "/" + path.compact.join( "/" ) - } - end - end - - def at( seg ) - warn "#{caller[0]}: at() is deprecated" if $VERBOSE - if Hash === @value - self[seg] - elsif Array === @value and seg =~ /\A\d+\Z/ and @value[seg.to_i] - @value[seg.to_i] - end - end - - # - # YPath search returning a complete depth array - # - def match_path( ypath_str ) - warn "#{caller[0]}: match_path is deprecated" if $VERBOSE - require 'syck/ypath' - matches = [] - YPath.each_path( ypath_str ) do |ypath| - seg = match_segment( ypath, 0 ) - matches += seg if seg - end - matches.uniq - end - - # - # Search a node for a single YPath segment - # - def match_segment( ypath, depth ) - warn "#{caller[0]}: match_segment is deprecated" if $VERBOSE - deep_nodes = [] - seg = ypath.segments[ depth ] - if seg == "/" - unless String === @value - idx = -1 - @value.collect { |v| - idx += 1 - if Hash === @value - match_init = [v[0].transform, v[1]] - match_deep = v[1].match_segment( ypath, depth ) - else - match_init = [idx, v] - match_deep = v.match_segment( ypath, depth ) - end - if match_deep - match_deep.each { |m| - deep_nodes.push( match_init + m ) - } - end - } - end - depth += 1 - seg = ypath.segments[ depth ] - end - match_nodes = - case seg - when "." - [[nil, self]] - when ".." - [["..", nil]] - when "*" - if @value.is_a? Enumerable - idx = -1 - @value.collect { |h| - idx += 1 - if Hash === @value - [h[0].transform, h[1]] - else - [idx, h] - end - } - end - else - if seg =~ /^"(.*)"$/ - seg = $1 - elsif seg =~ /^'(.*)'$/ - seg = $1 - end - if ( v = at( seg ) ) - [[ seg, v ]] - end - end - return deep_nodes unless match_nodes - pred = ypath.predicates[ depth ] - if pred - case pred - when /^\.=/ - pred = $' # ' - match_nodes.reject! { |n| - n.last.value != pred - } - else - match_nodes.reject! { |n| - n.last.at( pred ).nil? - } - end - end - return match_nodes + deep_nodes unless ypath.segments.length > depth + 1 - - #puts "DEPTH: #{depth + 1}" - deep_nodes = [] - match_nodes.each { |n| - if n[1].is_a? BaseNode - match_deep = n[1].match_segment( ypath, depth + 1 ) - if match_deep - match_deep.each { |m| - deep_nodes.push( n + m ) - } - end - else - deep_nodes = [] - end - } - deep_nodes = nil if deep_nodes.length == 0 - deep_nodes - end - - # - # We want the node to act like as Hash - # if it is. - # - def []( *key ) - if Hash === @value - v = @value.detect { |k,| k.transform == key.first } - v[1] if v - elsif Array === @value - @value.[]( *key ) - end - end - - def children - if Hash === @value - @value.values.collect { |c| c[1] } - elsif Array === @value - @value - end - end - - def children_with_index - warn "#{caller[0]}: children_with_index is deprecated, use children" if $VERBOSE - if Hash === @value - @value.keys.collect { |i| [self[i], i] } - elsif Array === @value - i = -1; @value.collect { |v| i += 1; [v, i] } - end - end - - def emit - transform.to_yaml - end - end - -end - diff --git a/ext/syck/lib/syck/constants.rb b/ext/syck/lib/syck/constants.rb deleted file mode 100644 index 19fe42ef85..0000000000 --- a/ext/syck/lib/syck/constants.rb +++ /dev/null @@ -1,45 +0,0 @@ -# -# Constants used throughout the library -# -module Syck - - # - # Constants - # - VERSION = '0.60' - SUPPORTED_YAML_VERSIONS = ['1.0'] - - # - # Parser tokens - # - WORD_CHAR = 'A-Za-z0-9' - PRINTABLE_CHAR = '-_A-Za-z0-9!?/()$\'". ' - NOT_PLAIN_CHAR = '\x7f\x0-\x1f\x80-\x9f' - ESCAPE_CHAR = '[\\x00-\\x09\\x0b-\\x1f]' - INDICATOR_CHAR = '*&!|\\\\^@%{}[]=' - SPACE_INDICATORS = '-#:,?' - RESTRICTED_INDICATORS = '#:,}]' - DNS_COMP_RE = "\\w(?:[-\\w]*\\w)?" - DNS_NAME_RE = "(?:(?:#{DNS_COMP_RE}\\.)+#{DNS_COMP_RE}|#{DNS_COMP_RE})" - ESCAPES = %w{\x00 \x01 \x02 \x03 \x04 \x05 \x06 \a - \x08 \t \n \v \f \r \x0e \x0f - \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 - \x18 \x19 \x1a \e \x1c \x1d \x1e \x1f - } - UNESCAPES = { - 'a' => "\x07", 'b' => "\x08", 't' => "\x09", - 'n' => "\x0a", 'v' => "\x0b", 'f' => "\x0c", - 'r' => "\x0d", 'e' => "\x1b", '\\' => '\\', - } - - # - # Default settings - # - DEFAULTS = { - :Indent => 2, :UseHeader => false, :UseVersion => false, :Version => '1.0', - :SortKeys => false, :AnchorFormat => 'id%03d', :ExplicitTypes => false, - :WidthType => 'absolute', :BestWidth => 80, - :UseBlock => false, :UseFold => false, :Encoding => :None - } - -end diff --git a/ext/syck/lib/syck/encoding.rb b/ext/syck/lib/syck/encoding.rb deleted file mode 100644 index dad062994c..0000000000 --- a/ext/syck/lib/syck/encoding.rb +++ /dev/null @@ -1,35 +0,0 @@ -# -# Handle Unicode-to-Internal conversion -# - -module Syck - - # - # Escape the string, condensing common escapes - # - def self.escape( value, skip = "" ) - warn "#{caller[0]}: YAML.escape is deprecated" if $VERBOSE - value.gsub( /\\/, "\\\\\\" ). - gsub( /"/, "\\\"" ). - gsub( /([\x00-\x1f])/ ) do - skip[$&] || ESCAPES[ $&.unpack("C")[0] ] - end - end - - # - # Unescape the condenses escapes - # - def self.unescape( value ) - warn "#{caller[0]}: YAML.unescape is deprecated" if $VERBOSE - value.gsub( /\\(?:([nevfbart\\])|0?x([0-9a-fA-F]{2})|u([0-9a-fA-F]{4}))/ ) { - if $3 - ["#$3".hex ].pack('U*') - elsif $2 - [$2].pack( "H2" ) - else - UNESCAPES[$1] - end - } - end - -end diff --git a/ext/syck/lib/syck/error.rb b/ext/syck/lib/syck/error.rb deleted file mode 100644 index 0bac872411..0000000000 --- a/ext/syck/lib/syck/error.rb +++ /dev/null @@ -1,34 +0,0 @@ -# -# Error messages and exception class -# - -module Syck - - # - # Error messages - # - - ERROR_NO_HEADER_NODE = "With UseHeader=false, the node Array or Hash must have elements" - ERROR_NEED_HEADER = "With UseHeader=false, the node must be an Array or Hash" - ERROR_BAD_EXPLICIT = "Unsupported explicit transfer: '%s'" - ERROR_MANY_EXPLICIT = "More than one explicit transfer" - ERROR_MANY_IMPLICIT = "More than one implicit request" - ERROR_NO_ANCHOR = "No anchor for alias '%s'" - ERROR_BAD_ANCHOR = "Invalid anchor: %s" - ERROR_MANY_ANCHOR = "More than one anchor" - ERROR_ANCHOR_ALIAS = "Can't define both an anchor and an alias" - ERROR_BAD_ALIAS = "Invalid alias: %s" - ERROR_MANY_ALIAS = "More than one alias" - ERROR_ZERO_INDENT = "Can't use zero as an indentation width" - ERROR_UNSUPPORTED_VERSION = "This release of YAML.rb does not support YAML version %s" - ERROR_UNSUPPORTED_ENCODING = "Attempt to use unsupported encoding: %s" - - # - # YAML Error classes - # - - class Error < StandardError; end - class ParseError < Error; end - class TypeError < StandardError; end - -end diff --git a/ext/syck/lib/syck/loader.rb b/ext/syck/lib/syck/loader.rb deleted file mode 100644 index 925c9ee4b2..0000000000 --- a/ext/syck/lib/syck/loader.rb +++ /dev/null @@ -1,14 +0,0 @@ -# -# YAML::Loader class -# .. type handling .. -# -module Syck - class Loader - TRANSFER_DOMAINS = { - 'yaml.org,2002' => {}, - 'ruby.yaml.org,2002' => {} - } - PRIVATE_TYPES = {} - IMPLICIT_TYPES = [ 'null', 'bool', 'time', 'int', 'float' ] - end -end diff --git a/ext/syck/lib/syck/rubytypes.rb b/ext/syck/lib/syck/rubytypes.rb deleted file mode 100644 index b6869c4b8b..0000000000 --- a/ext/syck/lib/syck/rubytypes.rb +++ /dev/null @@ -1,467 +0,0 @@ -# -*- mode: ruby; ruby-indent-level: 4; tab-width: 4 -*- vim: sw=4 ts=4 -require 'date' - -class Class - def to_yaml( opts = {} ) - raise TypeError, "can't dump anonymous class %s" % self.class - end -end - -class Object - yaml_as "tag:ruby.yaml.org,2002:object" - def to_yaml_style; end - undef to_yaml_properties rescue nil - def to_yaml_properties; instance_variables.sort; end - def to_yaml( opts = {} ) - YAML::quick_emit( self, opts ) do |out| - out.map( taguri, to_yaml_style ) do |map| - to_yaml_properties.each do |m| - map.add( m[1..-1], instance_variable_get( m ) ) - end - end - end - end - alias :syck_to_yaml :to_yaml -end - -class Hash - yaml_as "tag:ruby.yaml.org,2002:hash" - yaml_as "tag:yaml.org,2002:map" - def yaml_initialize( tag, val ) - if Array === val - update Hash.[]( *val ) # Convert the map to a sequence - elsif Hash === val - update val - else - raise YAML::TypeError, "Invalid map explicitly tagged #{ tag }: " + val.inspect - end - end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( self, opts ) do |out| - out.map( taguri, to_yaml_style ) do |map| - each do |k, v| - map.add( k, v ) - end - end - end - end -end - -class Struct - yaml_as "tag:ruby.yaml.org,2002:struct" - def self.yaml_tag_class_name; self.name.gsub( "Struct::", "" ); end - def self.yaml_tag_read_class( name ); "Struct::#{ name }"; end - def self.yaml_new( klass, tag, val ) - if Hash === val - struct_type = nil - - # - # Use existing Struct if it exists - # - props = {} - val.delete_if { |k,v| props[k] = v if k =~ /^@/ } - begin - struct_type = YAML.read_type_class( tag, Struct ).last - rescue NameError - end - if not struct_type - struct_def = [ tag.split( ':', 4 ).last ] - struct_type = Struct.new( *struct_def.concat( val.keys.collect { |k| k.intern } ) ) - end - - # - # Set the Struct properties - # - st = YAML::object_maker( struct_type, {} ) - st.members.each do |m| - st.send( "#{m}=", val[m.to_s] ) - end - props.each do |k,v| - st.instance_variable_set(k, v) - end - st - else - raise YAML::TypeError, "Invalid Ruby Struct: " + val.inspect - end - end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( self, opts ) do |out| - # - # Basic struct is passed as a YAML map - # - out.map( taguri, to_yaml_style ) do |map| - self.members.each do |m| - map.add( m.to_s, self[m.to_s] ) - end - self.to_yaml_properties.each do |m| - map.add( m, instance_variable_get( m ) ) - end - end - end - end -end - -class Array - yaml_as "tag:ruby.yaml.org,2002:array" - yaml_as "tag:yaml.org,2002:seq" - def yaml_initialize( tag, val ); concat( val.to_a ); end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( self, opts ) do |out| - out.seq( taguri, to_yaml_style ) do |seq| - each do |x| - seq.add( x ) - end - end - end - end -end - -class Exception - yaml_as "tag:ruby.yaml.org,2002:exception" - def Exception.yaml_new( klass, tag, val ) - o = klass.allocate - Exception.instance_method(:initialize).bind(o).call(val.delete('message')) - val.each_pair do |k,v| - o.instance_variable_set("@#{k}", v) - end - o - end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( self, opts ) do |out| - out.map( taguri, to_yaml_style ) do |map| - map.add( 'message', message ) - to_yaml_properties.each do |m| - map.add( m[1..-1], instance_variable_get( m ) ) - end - end - end - end -end - -class String - yaml_as "tag:ruby.yaml.org,2002:string" - yaml_as "tag:yaml.org,2002:binary" - yaml_as "tag:yaml.org,2002:str" - def is_complex_yaml? - to_yaml_style or not to_yaml_properties.empty? or self =~ /\n.+/ - end - def is_binary_data? - self.count("\x00-\x7F", "^ -~\t\r\n").fdiv(self.size) > 0.3 || self.index("\x00") unless self.empty? - end - def String.yaml_new( klass, tag, val ) - val = val.unpack("m")[0] if tag == "tag:yaml.org,2002:binary" - val = { 'str' => val } if String === val - if Hash === val - s = klass.allocate - # Thank you, NaHi - String.instance_method(:initialize). - bind(s). - call( val.delete( 'str' ) ) - val.each { |k,v| s.instance_variable_set( k, v ) } - s - else - raise YAML::TypeError, "Invalid String: " + val.inspect - end - end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( is_complex_yaml? ? self : nil, opts ) do |out| - if is_binary_data? - out.scalar( "tag:yaml.org,2002:binary", [self].pack("m"), :literal ) - elsif to_yaml_properties.empty? - out.scalar( taguri, self, self =~ /^:/ ? :quote2 : to_yaml_style ) - else - out.map( taguri, to_yaml_style ) do |map| - map.add( 'str', "#{self}" ) - to_yaml_properties.each do |m| - map.add( m, instance_variable_get( m ) ) - end - end - end - end - end -end - -class Symbol - yaml_as "tag:ruby.yaml.org,2002:symbol" - yaml_as "tag:ruby.yaml.org,2002:sym" - def Symbol.yaml_new( klass, tag, val ) - if String === val - val = YAML::load( val ) if val =~ /\A(["']).*\1\z/ - val.intern - else - raise YAML::TypeError, "Invalid Symbol: " + val.inspect - end - end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( nil, opts ) do |out| - out.scalar( "tag:yaml.org,2002:str", self.inspect, :plain ) - end - end -end - -class Range - yaml_as "tag:ruby.yaml.org,2002:range" - def Range.yaml_new( klass, tag, val ) - inr = %r'(\w+|[+-]?\d+(?:\.\d+)?(?:e[+-]\d+)?|"(?:[^\\"]|\\.)*")' - opts = {} - if String === val and val =~ /^#{inr}(\.{2,3})#{inr}$/o - r1, rdots, r2 = $1, $2, $3 - opts = { - 'begin' => YAML.load( "--- #{r1}" ), - 'end' => YAML.load( "--- #{r2}" ), - 'excl' => rdots.length == 3 - } - val = {} - elsif Hash === val - opts['begin'] = val.delete('begin') - opts['end'] = val.delete('end') - opts['excl'] = val.delete('excl') - end - if Hash === opts - r = YAML::object_maker( klass, {} ) - # Thank you, NaHi - Range.instance_method(:initialize). - bind(r). - call( opts['begin'], opts['end'], opts['excl'] ) - val.each { |k,v| r.instance_variable_set( k, v ) } - r - else - raise YAML::TypeError, "Invalid Range: " + val.inspect - end - end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( self, opts ) do |out| - # if self.begin.is_complex_yaml? or self.begin.respond_to? :to_str or - # self.end.is_complex_yaml? or self.end.respond_to? :to_str or - # not to_yaml_properties.empty? - out.map( taguri, to_yaml_style ) do |map| - map.add( 'begin', self.begin ) - map.add( 'end', self.end ) - map.add( 'excl', self.exclude_end? ) - to_yaml_properties.each do |m| - map.add( m, instance_variable_get( m ) ) - end - end - # else - # out.scalar( taguri ) do |sc| - # sc.embed( self.begin ) - # sc.concat( self.exclude_end? ? "..." : ".." ) - # sc.embed( self.end ) - # end - # end - end - end -end - -class Regexp - yaml_as "tag:ruby.yaml.org,2002:regexp" - def Regexp.yaml_new( klass, tag, val ) - if String === val and val =~ /^\/(.*)\/([mixn]*)$/ - val = { 'regexp' => $1, 'mods' => $2 } - end - if Hash === val - mods = nil - unless val['mods'].to_s.empty? - mods = 0x00 - mods |= Regexp::EXTENDED if val['mods'].include?( 'x' ) - mods |= Regexp::IGNORECASE if val['mods'].include?( 'i' ) - mods |= Regexp::MULTILINE if val['mods'].include?( 'm' ) - mods |= Regexp::NOENCODING if val['mods'].include?( 'n' ) - end - val.delete( 'mods' ) - r = YAML::object_maker( klass, {} ) - Regexp.instance_method(:initialize). - bind(r). - call( val.delete( 'regexp' ), mods ) - val.each { |k,v| r.instance_variable_set( k, v ) } - r - else - raise YAML::TypeError, "Invalid Regular expression: " + val.inspect - end - end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( nil, opts ) do |out| - if to_yaml_properties.empty? - out.scalar( taguri, self.inspect, :plain ) - else - out.map( taguri, to_yaml_style ) do |map| - src = self.inspect - if src =~ /\A\/(.*)\/([a-z]*)\Z/ - map.add( 'regexp', $1 ) - map.add( 'mods', $2 ) - else - raise YAML::TypeError, "Invalid Regular expression: " + src - end - to_yaml_properties.each do |m| - map.add( m, instance_variable_get( m ) ) - end - end - end - end - end -end - -class Time - yaml_as "tag:ruby.yaml.org,2002:time" - yaml_as "tag:yaml.org,2002:timestamp" - def Time.yaml_new( klass, tag, val ) - if Hash === val - t = val.delete( 'at' ) - val.each { |k,v| t.instance_variable_set( k, v ) } - t - else - raise YAML::TypeError, "Invalid Time: " + val.inspect - end - end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( self, opts ) do |out| - tz = "Z" - # from the tidy Tobias Peters Thanks! - unless self.utc? - utc_same_instant = self.dup.utc - utc_same_writing = Time.utc(year,month,day,hour,min,sec,usec) - difference_to_utc = utc_same_writing - utc_same_instant - if (difference_to_utc < 0) - difference_sign = '-' - absolute_difference = -difference_to_utc - else - difference_sign = '+' - absolute_difference = difference_to_utc - end - difference_minutes = (absolute_difference/60).round - tz = "%s%02d:%02d" % [ difference_sign, difference_minutes / 60, difference_minutes % 60] - end - standard = self.strftime( "%Y-%m-%d %H:%M:%S" ) - standard += ".%06d" % [usec] if usec.nonzero? - standard += " %s" % [tz] - if to_yaml_properties.empty? - out.scalar( taguri, standard, :plain ) - else - out.map( taguri, to_yaml_style ) do |map| - map.add( 'at', standard ) - to_yaml_properties.each do |m| - map.add( m, instance_variable_get( m ) ) - end - end - end - end - end -end - -class Date - yaml_as "tag:yaml.org,2002:timestamp#ymd" - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( self, opts ) do |out| - out.scalar( "tag:yaml.org,2002:timestamp", self.to_s, :plain ) - end - end -end - -class Integer - yaml_as "tag:yaml.org,2002:int" - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( nil, opts ) do |out| - out.scalar( "tag:yaml.org,2002:int", self.to_s, :plain ) - end - end -end - -class Float - yaml_as "tag:yaml.org,2002:float" - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( nil, opts ) do |out| - str = self.to_s - if str == "Infinity" - str = ".Inf" - elsif str == "-Infinity" - str = "-.Inf" - elsif str == "NaN" - str = ".NaN" - end - out.scalar( "tag:yaml.org,2002:float", str, :plain ) - end - end -end - -class Rational - yaml_as "tag:ruby.yaml.org,2002:object:Rational" - def Rational.yaml_new( klass, tag, val ) - if val.is_a? String - Rational( val ) - else - Rational( val['numerator'], val['denominator'] ) - end - end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( self, opts ) do |out| - out.map( taguri, nil ) do |map| - map.add( 'denominator', denominator ) - map.add( 'numerator', numerator ) - end - end - end -end - -class Complex - yaml_as "tag:ruby.yaml.org,2002:object:Complex" - def Complex.yaml_new( klass, tag, val ) - if val.is_a? String - Complex( val ) - else - Complex( val['real'], val['image'] ) - end - end - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( self, opts ) do |out| - out.map( taguri, nil ) do |map| - map.add( 'image', imaginary ) - map.add( 'real', real ) - end - end - end -end - -class TrueClass - yaml_as "tag:yaml.org,2002:bool#yes" - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( nil, opts ) do |out| - out.scalar( taguri, "true", :plain ) - end - end -end - -class FalseClass - yaml_as "tag:yaml.org,2002:bool#no" - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( nil, opts ) do |out| - out.scalar( taguri, "false", :plain ) - end - end -end - -class NilClass - yaml_as "tag:yaml.org,2002:null" - def to_yaml( opts = {} ) - return super unless YAML::ENGINE.syck? - YAML::quick_emit( nil, opts ) do |out| - out.scalar( taguri, "", :plain ) - end - end -end - diff --git a/ext/syck/lib/syck/stream.rb b/ext/syck/lib/syck/stream.rb deleted file mode 100644 index cd77a033c6..0000000000 --- a/ext/syck/lib/syck/stream.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Syck - - # - # YAML::Stream -- for emitting many documents - # - class Stream - - attr_accessor :documents, :options - - def initialize( opts = {} ) - @options = opts - @documents = [] - end - - def []( i ) - @documents[ i ] - end - - def add( doc ) - @documents << doc - end - - def edit( doc_num, doc ) - warn "#{caller[0]}: edit is deprecated" if $VERBOSE - @documents[ doc_num ] = doc - end - - def emit( io = nil ) - # opts = @options.dup - # opts[:UseHeader] = true if @documents.length > 1 - out = Syck.emitter - out.reset( io || io2 = StringIO.new ) - @documents.each { |v| - v.to_yaml( out ) - } - io || ( io2.rewind; io2.read ) - end - - end - -end diff --git a/ext/syck/lib/syck/stringio.rb b/ext/syck/lib/syck/stringio.rb deleted file mode 100644 index 77a2b827e5..0000000000 --- a/ext/syck/lib/syck/stringio.rb +++ /dev/null @@ -1,85 +0,0 @@ -warn "#{caller[0]}: yaml/stringio is deprecated" if $VERBOSE - -# -# Limited StringIO if no core lib is available -# -begin -require 'stringio' -rescue LoadError - # StringIO based on code by MoonWolf - class StringIO - def initialize(string="") - @string=string - @pos=0 - @eof=(string.size==0) - end - def pos - @pos - end - def eof - @eof - end - alias eof? eof - def readline(rs=$/) - if @eof - raise EOFError - else - if p = @string[@pos..-1]=~rs - line = @string[@pos,p+1] - else - line = @string[@pos..-1] - end - @pos+=line.size - @eof =true if @pos==@string.size - $_ = line - end - end - def rewind - seek(0,0) - end - def seek(offset,whence) - case whence - when 0 - @pos=offset - when 1 - @pos+=offset - when 2 - @pos=@string.size+offset - end - @eof=(@pos>=@string.size) - 0 - end - end - - # - # Class method for creating streams - # - def Syck.make_stream( io ) - if String === io - io = StringIO.new( io ) - elsif not IO === io - raise Syck::Error, "YAML stream must be an IO or String object." - end - if Syck::unicode - def io.readline - Syck.utf_to_internal( readline( @ln_sep ), @utf_encoding ) - end - def io.check_unicode - @utf_encoding = Syck.sniff_encoding( read( 4 ) ) - @ln_sep = Syck.enc_separator( @utf_encoding ) - seek( -4, IO::SEEK_CUR ) - end - def io.utf_encoding - @utf_encoding - end - io.check_unicode - else - def io.utf_encoding - :None - end - end - io - end - -end - diff --git a/ext/syck/lib/syck/syck.rb b/ext/syck/lib/syck/syck.rb deleted file mode 100644 index 10e5023f46..0000000000 --- a/ext/syck/lib/syck/syck.rb +++ /dev/null @@ -1,16 +0,0 @@ -# -# YAML::Syck module -# .. glues syck and yaml.rb together .. -# -require 'syck/basenode' - -module Syck - - # - # Mixin BaseNode functionality - # - class Node - include Syck::BaseNode - end - -end diff --git a/ext/syck/lib/syck/tag.rb b/ext/syck/lib/syck/tag.rb deleted file mode 100644 index 9c6de57953..0000000000 --- a/ext/syck/lib/syck/tag.rb +++ /dev/null @@ -1,95 +0,0 @@ -# -*- mode: ruby; ruby-indent-level: 4; tab-width: 4 -*- vim: sw=4 ts=4 -# $Id$ -# -# = yaml/tag.rb: methods for associating a taguri to a class. -# -# Author:: why the lucky stiff -# -module Syck - # A dictionary of taguris which map to - # Ruby classes. - @@tagged_classes = {} - - # - # Associates a taguri _tag_ with a Ruby class _cls_. The taguri is used to give types - # to classes when loading YAML. Taguris are of the form: - # - # tag:authorityName,date:specific - # - # The +authorityName+ is a domain name or email address. The +date+ is the date the type - # was issued in YYYY or YYYY-MM or YYYY-MM-DD format. The +specific+ is a name for - # the type being added. - # - # For example, built-in YAML types have 'yaml.org' as the +authorityName+ and '2002' as the - # +date+. The +specific+ is simply the name of the type: - # - # tag:yaml.org,2002:int - # tag:yaml.org,2002:float - # tag:yaml.org,2002:timestamp - # - # The domain must be owned by you on the +date+ declared. If you don't own any domains on the - # date you declare the type, you can simply use an e-mail address. - # - # tag:why@ruby-lang.org,2004:notes/personal - # - def self.tag_class( tag, cls ) - if @@tagged_classes.has_key? tag - warn "class #{ @@tagged_classes[tag] } held ownership of the #{ tag } tag" - end - @@tagged_classes[tag] = cls - end - - # Returns the complete dictionary of taguris, paired with classes. The key for - # the dictionary is the full taguri. The value for each key is the class constant - # associated to that taguri. - # - # YAML.tagged_classes["tag:yaml.org,2002:int"] => Integer - # - def self.tagged_classes - @@tagged_classes - end -end - -class Module - # :stopdoc: - - # Adds a taguri _tag_ to a class, used when dumping or loading the class - # in YAML. See YAML::tag_class for detailed information on typing and - # taguris. - def syck_yaml_as( tag, sc = true ) - verbose, $VERBOSE = $VERBOSE, nil - class_eval <<-"END", __FILE__, __LINE__+1 - attr_writer :taguri - def taguri - if respond_to? :to_yaml_type - Syck.tagurize( to_yaml_type[1..-1] ) - else - return @taguri if defined?(@taguri) and @taguri - tag = #{ tag.dump } - if self.class.yaml_tag_subclasses? and self.class != Syck.tagged_classes[tag] - tag = "\#{ tag }:\#{ self.class.yaml_tag_class_name }" - end - tag - end - end - def self.yaml_tag_subclasses?; #{ sc ? 'true' : 'false' }; end - END - Syck.tag_class tag, self - ensure - $VERBOSE = verbose - end - remove_method :yaml_as rescue nil - alias :yaml_as :syck_yaml_as - - # Transforms the subclass name into a name suitable for display - # in a subclassed tag. - def yaml_tag_class_name - self.name - end - # Transforms the subclass name found in the tag into a Ruby - # constant name. - def yaml_tag_read_class( name ) - name - end - # :startdoc: -end diff --git a/ext/syck/lib/syck/types.rb b/ext/syck/lib/syck/types.rb deleted file mode 100644 index 4a3fe873d9..0000000000 --- a/ext/syck/lib/syck/types.rb +++ /dev/null @@ -1,192 +0,0 @@ -# -*- mode: ruby; ruby-indent-level: 4 -*- vim: sw=4 -# -# Classes required by the full core typeset -# - -module Syck - - # - # Default private type - # - class PrivateType - def self.tag_subclasses?; false; end - verbose, $VERBOSE = $VERBOSE, nil - def initialize( type, val ) - @type_id = type; @value = val - @value.taguri = "x-private:#{ @type_id }" - end - def to_yaml( opts = {} ) - @value.to_yaml( opts ) - end - ensure - $VERBOSE = verbose - end - - # - # Default domain type - # - class DomainType - def self.tag_subclasses?; false; end - verbose, $VERBOSE = $VERBOSE, nil - def initialize( domain, type, val ) - @domain = domain; @type_id = type; @value = val - @value.taguri = "tag:#{ @domain }:#{ @type_id }" - end - def to_yaml( opts = {} ) - @value.to_yaml( opts ) - end - ensure - $VERBOSE = verbose - end - - # - # Unresolved objects - # - class Object - def self.tag_subclasses?; false; end - def to_yaml( opts = {} ) - ::Syck.quick_emit( self, opts ) do |out| - out.map( "tag:ruby.yaml.org,2002:object:#{ @class }", to_yaml_style ) do |map| - @ivars.each do |k,v| - map.add( k, v ) - end - end - end - end - end - - # - # YAML Hash class to support comments and defaults - # - class SpecialHash < ::Hash - attr_accessor :default - def inspect - self.default.to_s - end - def to_s - self.default.to_s - end - def update( h ) - if ::Syck::SpecialHash === h - @default = h.default if h.default - end - super( h ) - end - def to_yaml( opts = {} ) - opts[:DefaultKey] = self.default - super( opts ) - end - end - - # - # Builtin collection: !omap - # - class Omap < ::Array - yaml_as "tag:yaml.org,2002:omap" - def yaml_initialize( tag, val ) - if Array === val - val.each do |v| - if Hash === v - concat( v.to_a ) # Convert the map to a sequence - else - raise ::Syck::Error, "Invalid !omap entry: " + val.inspect - end - end - else - raise ::Syck::Error, "Invalid !omap: " + val.inspect - end - self - end - def self.[]( *vals ) - o = Omap.new - 0.step( vals.length - 1, 2 ) do |i| - o[vals[i]] = vals[i+1] - end - o - end - def []( k ) - self.assoc( k ).to_a[1] - end - def []=( k, *rest ) - val, set = rest.reverse - if ( tmp = self.assoc( k ) ) and not set - tmp[1] = val - else - self << [ k, val ] - end - val - end - def has_key?( k ) - self.assoc( k ) ? true : false - end - def is_complex_yaml? - true - end - def to_yaml( opts = {} ) - ::Syck.quick_emit( self, opts ) do |out| - out.seq( taguri, to_yaml_style ) do |seq| - self.each do |v| - seq.add( Hash[ *v ] ) - end - end - end - end - end - - # - # Builtin collection: !pairs - # - class Pairs < ::Array - yaml_as "tag:yaml.org,2002:pairs" - def yaml_initialize( tag, val ) - if Array === val - val.each do |v| - if Hash === v - concat( v.to_a ) # Convert the map to a sequence - else - raise ::Syck::Error, "Invalid !pairs entry: " + val.inspect - end - end - else - raise ::Syck::Error, "Invalid !pairs: " + val.inspect - end - self - end - def self.[]( *vals ) - p = Pairs.new - 0.step( vals.length - 1, 2 ) { |i| - p[vals[i]] = vals[i+1] - } - p - end - def []( k ) - self.assoc( k ).to_a - end - def []=( k, val ) - self << [ k, val ] - val - end - def has_key?( k ) - self.assoc( k ) ? true : false - end - def is_complex_yaml? - true - end - def to_yaml( opts = {} ) - ::Syck.quick_emit( self, opts ) do |out| - out.seq( taguri, to_yaml_style ) do |seq| - self.each do |v| - seq.add( Hash[ *v ] ) - end - end - end - end - end - - # - # Builtin collection: !set - # - class Set < ::Hash - yaml_as "tag:yaml.org,2002:set" - end -end diff --git a/ext/syck/lib/syck/yamlnode.rb b/ext/syck/lib/syck/yamlnode.rb deleted file mode 100644 index 2fa57b1f97..0000000000 --- a/ext/syck/lib/syck/yamlnode.rb +++ /dev/null @@ -1,54 +0,0 @@ -# -# YAML::YamlNode class -# -require 'syck/basenode' - -module Syck - - # - # YAML Generic Model container - # - class YamlNode - include BaseNode - attr_accessor :kind, :type_id, :value, :anchor - def initialize(t, v) - @type_id = t - if Hash === v - @kind = 'map' - @value = {} - v.each {|key,val| - @value[key.transform] = [key, val] - } - elsif Array === v - @kind = 'seq' - @value = v - elsif String === v - @kind = 'scalar' - @value = v - end - end - - # - # Transform this node fully into a native type - # - def transform - t = nil - if @value.is_a? Hash - t = {} - @value.each { |k,v| - t[ k ] = v[1].transform - } - elsif @value.is_a? Array - t = [] - @value.each { |v| - t.push v.transform - } - else - t = @value - end - Syck.transfer_method( @type_id, t ) - end - - end - -end diff --git a/ext/syck/lib/syck/ypath.rb b/ext/syck/lib/syck/ypath.rb deleted file mode 100644 index 024dcb7f4e..0000000000 --- a/ext/syck/lib/syck/ypath.rb +++ /dev/null @@ -1,54 +0,0 @@ -# -# YAML::YPath -# - -warn "#{caller[0]}: YAML::YPath is deprecated" if $VERBOSE - -module Syck - - class YPath - attr_accessor :segments, :predicates, :flags - def initialize( str ) - @segments = [] - @predicates = [] - @flags = nil - while str =~ /^\/?(\/|[^\/\[]+)(?:\[([^\]]+)\])?/ - @segments.push $1 - @predicates.push $2 - str = $' - end - unless str.to_s.empty? - @segments += str.split( "/" ) - end - if @segments.length == 0 - @segments.push "." - end - end - def self.each_path( str ) - # - # Find choices - # - paths = [] - str = "(#{ str })" - while str.sub!( /\(([^()]+)\)/, "\n#{ paths.length }\n" ) - paths.push $1.split( '|' ) - end - - # - # Construct all possible paths - # - all = [ str ] - ( paths.length - 1 ).downto( 0 ) do |i| - all = all.collect do |a| - paths[i].collect do |p| - a.gsub( /\n#{ i }\n/, p ) - end - end.flatten.uniq - end - all.collect do |path| - yield YPath.new( path ) - end - end - end - -end diff --git a/ext/syck/lib/yaml/syck.rb b/ext/syck/lib/yaml/syck.rb deleted file mode 100644 index 5b5d1c494e..0000000000 --- a/ext/syck/lib/yaml/syck.rb +++ /dev/null @@ -1,14 +0,0 @@ -# $Id$ -# -# = yaml/syck.rb: -# - -require 'stringio' -require 'syck.so' -require 'syck/error' -require 'syck/syck' -require 'syck/tag' -require 'syck/stream' -require 'syck/constants' -require 'syck/rubytypes' -require 'syck/types' diff --git a/ext/syck/node.c b/ext/syck/node.c deleted file mode 100644 index 35c1f45150..0000000000 --- a/ext/syck/node.c +++ /dev/null @@ -1,407 +0,0 @@ -/* - * node.c - * - * $Author$ - * - * Copyright (C) 2003 why the lucky stiff - */ - -#include "ruby/ruby.h" -#include "syck.h" - -/* - * Node allocation functions - */ -SyckNode * -syck_alloc_node( enum syck_kind_tag type ) -{ - SyckNode *s; - - s = S_ALLOC( SyckNode ); - s->kind = type; - s->id = 0; - s->type_id = NULL; - s->anchor = NULL; - s->shortcut = NULL; - - return s; -} - -void -syck_free_node( SyckNode *n ) -{ - syck_free_members( n ); - if ( n->type_id != NULL ) - { - S_FREE( n->type_id ); - n->type_id = NULL; - } - if ( n->anchor != NULL ) - { - S_FREE( n->anchor ); - n->anchor = NULL; - } - S_FREE( n ); -} - -SyckNode * -syck_alloc_map(void) -{ - SyckNode *n; - struct SyckMap *m; - - m = S_ALLOC( struct SyckMap ); - m->style = map_none; - m->idx = 0; - m->capa = ALLOC_CT; - m->keys = S_ALLOC_N( SYMID, m->capa ); - m->values = S_ALLOC_N( SYMID, m->capa ); - - n = syck_alloc_node( syck_map_kind ); - n->data.pairs = m; - - return n; -} - -SyckNode * -syck_alloc_seq(void) -{ - SyckNode *n; - struct SyckSeq *s; - - s = S_ALLOC( struct SyckSeq ); - s->style = seq_none; - s->idx = 0; - s->capa = ALLOC_CT; - s->items = S_ALLOC_N( SYMID, s->capa ); - - n = syck_alloc_node( syck_seq_kind ); - n->data.list = s; - - return n; -} - -SyckNode * -syck_alloc_str(void) -{ - SyckNode *n; - struct SyckStr *s; - - s = S_ALLOC( struct SyckStr ); - s->len = 0; - s->ptr = NULL; - s->style = scalar_none; - - n = syck_alloc_node( syck_str_kind ); - n->data.str = s; - - return n; -} - -SyckNode * -syck_new_str( const char *str, enum scalar_style style ) -{ - return syck_new_str2( str, strlen( str ), style ); -} - -SyckNode * -syck_new_str2( const char *str, long len, enum scalar_style style ) -{ - SyckNode *n; - - n = syck_alloc_str(); - n->data.str->ptr = S_ALLOC_N( char, len + 1 ); - n->data.str->len = len; - n->data.str->style = style; - memcpy( n->data.str->ptr, str, len ); - n->data.str->ptr[len] = '\0'; - - return n; -} - -void -syck_replace_str( SyckNode *n, char *str, enum scalar_style style ) -{ - syck_replace_str2( n, str, strlen( str ), style ); -} - -void -syck_replace_str2( SyckNode *n, char *str, long len, enum scalar_style style ) -{ - if ( n->data.str->ptr != NULL ) - { - S_FREE( n->data.str->ptr ); - n->data.str->ptr = NULL; - n->data.str->len = 0; - } - n->data.str->ptr = S_ALLOC_N( char, len + 1 ); - n->data.str->len = len; - n->data.str->style = style; - memcpy( n->data.str->ptr, str, len ); - n->data.str->ptr[len] = '\0'; -} - -void -syck_str_blow_away_commas( SyckNode *n ) -{ - char *go, *end; - - go = n->data.str->ptr; - end = go + n->data.str->len; - while ( *(++go) != '\0' ) - { - if ( *go == ',' ) - { - n->data.str->len -= 1; - memmove( go, go + 1, end - go ); - end -= 1; - } - } -} - -char * -syck_str_read( SyckNode *n ) -{ - ASSERT( n != NULL ); - return n->data.str->ptr; -} - -SyckNode * -syck_new_map( SYMID key, SYMID value ) -{ - SyckNode *n; - - n = syck_alloc_map(); - syck_map_add( n, key, value ); - - return n; -} - -void -syck_map_empty( SyckNode *n ) -{ - struct SyckMap *m; - ASSERT( n != NULL ); - ASSERT( n->data.list != NULL ); - - S_FREE( n->data.pairs->keys ); - S_FREE( n->data.pairs->values ); - m = n->data.pairs; - m->idx = 0; - m->capa = ALLOC_CT; - m->keys = S_ALLOC_N( SYMID, m->capa ); - m->values = S_ALLOC_N( SYMID, m->capa ); -} - -void -syck_map_add( SyckNode *map, SYMID key, SYMID value ) -{ - struct SyckMap *m; - long idx; - - ASSERT( map != NULL ); - ASSERT( map->data.pairs != NULL ); - - m = map->data.pairs; - idx = m->idx; - m->idx += 1; - if ( m->idx > m->capa ) - { - m->capa += ALLOC_CT; - S_REALLOC_N( m->keys, SYMID, m->capa ); - S_REALLOC_N( m->values, SYMID, m->capa ); - } - m->keys[idx] = key; - m->values[idx] = value; -} - -void -syck_map_update( SyckNode *map1, SyckNode *map2 ) -{ - struct SyckMap *m1, *m2; - long new_idx, new_capa; - ASSERT( map1 != NULL ); - ASSERT( map2 != NULL ); - - m1 = map1->data.pairs; - m2 = map2->data.pairs; - if ( m2->idx < 1 ) return; - - new_idx = m1->idx; - new_idx += m2->idx; - new_capa = m1->capa; - while ( new_idx > new_capa ) - { - new_capa += ALLOC_CT; - } - if ( new_capa > m1->capa ) - { - m1->capa = new_capa; - S_REALLOC_N( m1->keys, SYMID, m1->capa ); - S_REALLOC_N( m1->values, SYMID, m1->capa ); - } - for ( new_idx = 0; new_idx < m2->idx; m1->idx++, new_idx++ ) - { - m1->keys[m1->idx] = m2->keys[new_idx]; - m1->values[m1->idx] = m2->values[new_idx]; - } -} - -long -syck_map_count( SyckNode *map ) -{ - ASSERT( map != NULL ); - ASSERT( map->data.pairs != NULL ); - return map->data.pairs->idx; -} - -void -syck_map_assign( SyckNode *map, enum map_part p, long idx, SYMID id ) -{ - struct SyckMap *m; - - ASSERT( map != NULL ); - m = map->data.pairs; - ASSERT( m != NULL ); - if ( p == map_key ) - { - m->keys[idx] = id; - } - else - { - m->values[idx] = id; - } -} - -SYMID -syck_map_read( SyckNode *map, enum map_part p, long idx ) -{ - struct SyckMap *m; - - ASSERT( map != NULL ); - m = map->data.pairs; - ASSERT( m != NULL ); - if ( p == map_key ) - { - return m->keys[idx]; - } - else - { - return m->values[idx]; - } -} - -SyckNode * -syck_new_seq( SYMID value ) -{ - SyckNode *n; - - n = syck_alloc_seq(); - syck_seq_add( n, value ); - - return n; -} - -void -syck_seq_empty( SyckNode *n ) -{ - struct SyckSeq *s; - ASSERT( n != NULL ); - ASSERT( n->data.list != NULL ); - - S_FREE( n->data.list->items ); - s = n->data.list; - s->idx = 0; - s->capa = ALLOC_CT; - s->items = S_ALLOC_N( SYMID, s->capa ); -} - -void -syck_seq_add( SyckNode *arr, SYMID value ) -{ - struct SyckSeq *s; - long idx; - - ASSERT( arr != NULL ); - ASSERT( arr->data.list != NULL ); - - s = arr->data.list; - idx = s->idx; - s->idx += 1; - if ( s->idx > s->capa ) - { - s->capa += ALLOC_CT; - S_REALLOC_N( s->items, SYMID, s->capa ); - } - s->items[idx] = value; -} - -long -syck_seq_count( SyckNode *seq ) -{ - ASSERT( seq != NULL ); - ASSERT( seq->data.list != NULL ); - return seq->data.list->idx; -} - -void -syck_seq_assign( SyckNode *seq, long idx, SYMID id ) -{ - struct SyckSeq *s; - - ASSERT( map != NULL ); - s = seq->data.list; - ASSERT( m != NULL ); - s->items[idx] = id; -} - -SYMID -syck_seq_read( SyckNode *seq, long idx ) -{ - struct SyckSeq *s; - - ASSERT( seq != NULL ); - s = seq->data.list; - ASSERT( s != NULL ); - return s->items[idx]; -} - -void -syck_free_members( SyckNode *n ) -{ - if ( n == NULL ) return; - - switch ( n->kind ) - { - case syck_str_kind: - if ( n->data.str != NULL ) - { - S_FREE( n->data.str->ptr ); - n->data.str->ptr = NULL; - n->data.str->len = 0; - S_FREE( n->data.str ); - n->data.str = NULL; - } - break; - - case syck_seq_kind: - if ( n->data.list != NULL ) - { - S_FREE( n->data.list->items ); - S_FREE( n->data.list ); - n->data.list = NULL; - } - break; - - case syck_map_kind: - if ( n->data.pairs != NULL ) - { - S_FREE( n->data.pairs->keys ); - S_FREE( n->data.pairs->values ); - S_FREE( n->data.pairs ); - n->data.pairs = NULL; - } - break; - } -} - diff --git a/ext/syck/rubyext.c b/ext/syck/rubyext.c deleted file mode 100644 index 92b413dc54..0000000000 --- a/ext/syck/rubyext.c +++ /dev/null @@ -1,2328 +0,0 @@ -/* -*- indent-tabs-mode: nil -*- */ -/* - * rubyext.c - * - * $Author$ - * - * Copyright (C) 2003-2005 why the lucky stiff - */ - -#include "ruby/ruby.h" -#include "ruby/encoding.h" -#include "syck.h" -#include -#include - -typedef struct RVALUE { - union { -#if 0 - struct { - unsigned long flags; /* always 0 for freed obj */ - struct RVALUE *next; - } free; -#endif - struct RBasic basic; - struct RObject object; - struct RClass klass; - /*struct RFloat flonum;*/ - /*struct RString string;*/ - struct RArray array; - /*struct RRegexp regexp;*/ - struct RHash hash; - /*struct RData data;*/ - struct RStruct rstruct; - /*struct RBignum bignum;*/ - /*struct RFile file;*/ - } as; -} RVALUE; - -typedef struct { - long hash; - char *buffer; - long length; - long remaining; - int printed; -} bytestring_t; - -#define RUBY_DOMAIN "ruby.yaml.org,2002" - -/* - * symbols and constants - */ -static ID s_new, s_utc, s_at, s_to_f, s_to_i, s_read, s_binmode, s_call, s_cmp, s_transfer, s_update, s_dup, s_haskey, s_match, s_keys, s_unpack, s_tr_bang, s_default_set, s_tag_read_class, s_tag_subclasses, s_resolver, s_push, s_emitter, s_level, s_detect_implicit, s_node_import, s_out, s_input, s_intern, s_transform, s_yaml_new, s_yaml_initialize, s_node_export, s_to_yaml, s_write, s_set_resolver, s_each; -static ID s_tags, s_kind, s_name, s_options, s_type_id, s_type_id_set, s_style, s_style_set, s_value, s_value_set, s_parse; -static VALUE sym_model, sym_generic, sym_input, sym_bytecode; -static VALUE sym_scalar, sym_seq, sym_map; -static VALUE sym_1quote, sym_2quote, sym_fold, sym_literal, sym_plain, sym_inline; -static VALUE cDate, cNode, cMap, cSeq, cScalar, cOut, cParser, cResolver, cPrivateType, cDomainType, cYObject, cBadAlias, cDefaultKey, cMergeKey, cEmitter, cDateTime; -static VALUE oDefaultResolver, oGenericResolver; - -/* - * my private collection of numerical oddities. - */ -static double S_zero(void) { return 0.0; } -static double S_one(void) { return 1.0; } -static double S_inf(void) { return S_one() / S_zero(); } -static double S_nan(void) { return S_zero() / S_zero(); } - -static VALUE syck_node_transform( VALUE ); - -/* - * handler prototypes - */ -SYMID rb_syck_load_handler _((SyckParser *, SyckNode *)); -void rb_syck_err_handler _((SyckParser *, const char *)); -SyckNode * rb_syck_bad_anchor_handler _((SyckParser *, char *)); -void rb_syck_output_handler _((SyckEmitter *, char *, long)); -void rb_syck_emitter_handler _((SyckEmitter *, st_data_t)); -int syck_parser_assign_io _((SyckParser *, VALUE *)); -VALUE syck_scalar_alloc _((VALUE class)); -VALUE syck_seq_alloc _((VALUE class)); -VALUE syck_map_alloc _((VALUE class)); - -struct parser_xtra { - VALUE data; /* Borrowed this idea from marshal.c to fix [ruby-core:8067] problem */ - VALUE proc; - VALUE resolver; - int taint; -}; - -struct emitter_xtra { - VALUE oid; - VALUE data; - VALUE port; -}; - -/* - * Convert YAML to bytecode - */ -VALUE -rb_syck_compile(VALUE self, VALUE port) -{ - SYMID oid; - int taint; - char *ret; - VALUE bc; - bytestring_t *sav = NULL; - void *data = NULL; - - SyckParser *parser = syck_new_parser(); - taint = syck_parser_assign_io(parser, &port); - syck_parser_handler( parser, syck_yaml2byte_handler ); - syck_parser_error_handler( parser, NULL ); - syck_parser_implicit_typing( parser, 0 ); - syck_parser_taguri_expansion( parser, 0 ); - oid = syck_parse( parser ); - if (!syck_lookup_sym( parser, oid, &data )) { - rb_raise(rb_eSyntaxError, "root node <%p> not found", (void *)oid); - } - sav = data; - - ret = S_ALLOCA_N( char, strlen( sav->buffer ) + 3 ); - ret[0] = '\0'; - strcat( ret, "D\n" ); - strcat( ret, sav->buffer ); - - syck_free_parser( parser ); - - bc = rb_str_new2( ret ); - if ( taint ) OBJ_TAINT( bc ); - return bc; -} - -/* - * read from io. - */ -long -rb_syck_io_str_read( char *buf, SyckIoStr *str, long max_size, long skip ) -{ - long len = 0; - - ASSERT( str != NULL ); - max_size -= skip; - - if ( max_size <= 0 ) max_size = 0; - else - { - /* - * call io#read. - */ - VALUE src = (VALUE)str->ptr; - VALUE n = LONG2NUM(max_size); - VALUE str2 = rb_funcall2(src, s_read, 1, &n); - if (!NIL_P(str2)) - { - StringValue(str2); - len = RSTRING_LEN(str2); - memcpy( buf + skip, RSTRING_PTR(str2), len ); - } - } - len += skip; - buf[len] = '\0'; - return len; -} - -/* - * determine: are we reading from a string or io? - * (returns tainted? boolean) - */ -int -syck_parser_assign_io(SyckParser *parser, VALUE *pport) -{ - int taint = Qtrue; - VALUE tmp, port = *pport; - if (!NIL_P(tmp = rb_check_string_type(port))) { - taint = OBJ_TAINTED(port); /* original taintedness */ - port = tmp; - syck_parser_str( parser, RSTRING_PTR(port), RSTRING_LEN(port), NULL ); - } - else if (rb_respond_to(port, s_read)) { - if (rb_respond_to(port, s_binmode)) { - rb_funcall2(port, s_binmode, 0, 0); - } - syck_parser_str( parser, (char *)port, 0, rb_syck_io_str_read ); - } - else { - rb_raise(rb_eTypeError, "instance of IO needed"); - } - *pport = port; - return taint; -} - -/* - * Get value in hash by key, forcing an empty hash if nil. - */ -VALUE -syck_get_hash_aref(VALUE hsh, VALUE key) -{ - VALUE val = rb_hash_aref( hsh, key ); - if ( NIL_P( val ) ) - { - val = rb_hash_new(); - rb_hash_aset(hsh, key, val); - } - return val; -} - -/* - * creating timestamps - */ -struct mktime_arg { - const char *str; - long len; -}; - -VALUE -mktime_do(VALUE varg) -{ - struct mktime_arg *arg = (struct mktime_arg *)varg; - VALUE time; - const char *str = arg->str; - long len = arg->len; - const char *ptr = str; - VALUE year = INT2FIX(0); - VALUE mon = INT2FIX(0); - VALUE day = INT2FIX(0); - VALUE hour = INT2FIX(0); - VALUE min = INT2FIX(0); - VALUE sec = INT2FIX(0); - long usec; - - /* Year*/ - if ( ptr[0] != '\0' && len > 0 ) { - year = INT2FIX(strtol(ptr, NULL, 10)); - } - - /* Month*/ - ptr += 4; - if ( ptr[0] != '\0' && len > ptr - str ) { - while ( !ISDIGIT( *ptr ) ) ptr++; - mon = INT2FIX(strtol(ptr, NULL, 10)); - } - - /* Day*/ - ptr += 2; - if ( ptr[0] != '\0' && len > ptr - str ) { - while ( !ISDIGIT( *ptr ) ) ptr++; - day = INT2FIX(strtol(ptr, NULL, 10)); - } - - /* Hour*/ - ptr += 2; - if ( ptr[0] != '\0' && len > ptr - str ) { - while ( !ISDIGIT( *ptr ) ) ptr++; - hour = INT2FIX(strtol(ptr, NULL, 10)); - } - - /* Minute */ - ptr += 2; - if ( ptr[0] != '\0' && len > ptr - str ) { - while ( !ISDIGIT( *ptr ) ) ptr++; - min = INT2FIX(strtol(ptr, NULL, 10)); - } - - /* Second */ - ptr += 2; - if ( ptr[0] != '\0' && len > ptr - str ) { - while ( !ISDIGIT( *ptr ) ) ptr++; - sec = INT2FIX(strtol(ptr, NULL, 10)); - } - - /* Millisecond */ - ptr += 2; - if ( len > ptr - str && *ptr == '.' ) - { - char padded[] = "000000"; - const int padding = (int)(sizeof(padded) - 1); - const char *end = ptr + 1; - const char *begin = end; - ptrdiff_t length; - while ( ISDIGIT( *end ) ) end++; - if ((length = (end - begin)) > padding) length = padding; - MEMCPY(padded, begin, char, length); - usec = strtol(padded, NULL, 10); - } - else - { - usec = 0; - } - - /* Time Zone*/ - while ( len > ptr - str && *ptr != 'Z' && *ptr != '+' && *ptr != '-' && *ptr != '\0' ) ptr++; - if ( len > ptr - str && ( *ptr == '-' || *ptr == '+' ) ) - { - time_t tz_offset = strtol(ptr, NULL, 10) * 3600; - VALUE tmp; - - while ( *ptr != ':' && *ptr != '\0' ) ptr++; - if ( *ptr == ':' ) - { - ptr += 1; - if ( tz_offset < 0 ) - { - tz_offset -= strtol(ptr, NULL, 10) * 60; - } - else - { - tz_offset += strtol(ptr, NULL, 10) * 60; - } - } - - /* Make TZ time*/ - time = rb_funcall(rb_cTime, s_utc, 6, year, mon, day, hour, min, sec); - tmp = rb_funcall(time, s_to_i, 0); - tmp = rb_funcall(tmp, '-', 1, LONG2FIX(tz_offset)); - return rb_funcall(rb_cTime, s_at, 2, tmp, LONG2NUM(usec)); - } - else - { - /* Make UTC time*/ - return rb_funcall(rb_cTime, s_utc, 7, year, mon, day, hour, min, sec, LONG2NUM(usec)); - } -} - -VALUE -mktime_r(VALUE varg) -{ - struct mktime_arg *arg = (struct mktime_arg *)varg; - - if (!cDateTime) { - /* - * Load Date module - */ - rb_require("date"); - cDateTime = rb_const_get(rb_cObject, rb_intern("DateTime")); - } - return rb_funcall(cDateTime, s_parse, 1, rb_str_new(arg->str, arg->len)); -} - -VALUE -rb_syck_mktime(const char *str, long len) -{ - struct mktime_arg a; - - a.str = str; - a.len = len; - return rb_rescue2(mktime_do, (VALUE)&a, mktime_r, (VALUE)&a, rb_eArgError, NULL); -} - -/* - * handles merging of an array of hashes - * (see http://www.yaml.org/type/merge/) - */ -VALUE -syck_merge_i(VALUE entry, VALUE hsh ) -{ - VALUE tmp; - if ( !NIL_P(tmp = rb_check_convert_type(entry, T_HASH, "Hash", "to_hash")) ) - { - entry = tmp; - rb_funcall( hsh, s_update, 1, entry ); - } - return Qnil; -} - -/* - * default handler for ruby.yaml.org types - */ -int -yaml_org_handler( SyckNode *n, VALUE *ref ) -{ - char *type_id = n->type_id; - int transferred = 0; - long i = 0; - VALUE obj = Qnil; - - if ( type_id != NULL && strncmp( type_id, "tag:yaml.org,2002:", 18 ) == 0 ) - { - type_id += 18; - } - - switch (n->kind) - { - case syck_str_kind: - transferred = 1; - if ( type_id == NULL ) - { - obj = rb_str_new( n->data.str->ptr, n->data.str->len ); - } - else if ( strcmp( type_id, "null" ) == 0 ) - { - obj = Qnil; - } - else if ( strcmp( type_id, "binary" ) == 0 ) - { - VALUE arr; - obj = rb_str_new( n->data.str->ptr, n->data.str->len ); - rb_funcall( obj, s_tr_bang, 2, rb_str_new2( "\n\t " ), rb_str_new2( "" ) ); - arr = rb_funcall( obj, s_unpack, 1, rb_str_new2( "m" ) ); - obj = rb_ary_shift( arr ); - } - else if ( strcmp( type_id, "bool#yes" ) == 0 ) - { - obj = Qtrue; - } - else if ( strcmp( type_id, "bool#no" ) == 0 ) - { - obj = Qfalse; - } - else if ( strcmp( type_id, "int#hex" ) == 0 ) - { - syck_str_blow_away_commas( n ); - obj = rb_cstr2inum( n->data.str->ptr, 16 ); - } - else if ( strcmp( type_id, "int#oct" ) == 0 ) - { - syck_str_blow_away_commas( n ); - obj = rb_cstr2inum( n->data.str->ptr, 8 ); - } - else if ( strcmp( type_id, "int#base60" ) == 0 ) - { - char *ptr, *end; - long sixty = 1; - long total = 0; - syck_str_blow_away_commas( n ); - ptr = n->data.str->ptr; - end = n->data.str->ptr + n->data.str->len; - while ( end > ptr ) - { - long bnum = 0; - char *colon = end - 1; - while ( colon >= ptr && *colon != ':' ) - { - colon--; - } - if ( colon >= ptr && *colon == ':' ) *colon = '\0'; - - bnum = strtol( colon + 1, NULL, 10 ); - total += bnum * sixty; - sixty *= 60; - end = colon; - } - obj = INT2FIX(total); - } - else if ( strncmp( type_id, "int", 3 ) == 0 ) - { - syck_str_blow_away_commas( n ); - obj = rb_cstr2inum( n->data.str->ptr, 10 ); - } - else if ( strcmp( type_id, "float#base60" ) == 0 ) - { - char *ptr, *end; - long sixty = 1; - double total = 0.0; - syck_str_blow_away_commas( n ); - ptr = n->data.str->ptr; - end = n->data.str->ptr + n->data.str->len; - while ( end > ptr ) - { - double bnum = 0; - char *colon = end - 1; - while ( colon >= ptr && *colon != ':' ) - { - colon--; - } - if ( colon >= ptr && *colon == ':' ) *colon = '\0'; - - bnum = strtod( colon + 1, NULL ); - total += bnum * sixty; - sixty *= 60; - end = colon; - } - obj = rb_float_new( total ); - } - else if ( strcmp( type_id, "float#nan" ) == 0 ) - { - obj = rb_float_new( S_nan() ); - } - else if ( strcmp( type_id, "float#inf" ) == 0 ) - { - obj = rb_float_new( S_inf() ); - } - else if ( strcmp( type_id, "float#neginf" ) == 0 ) - { - obj = rb_float_new( -S_inf() ); - } - else if ( strncmp( type_id, "float", 5 ) == 0 ) - { - double f; - syck_str_blow_away_commas( n ); - f = strtod( n->data.str->ptr, NULL ); - obj = rb_float_new( f ); - } - else if ( strcmp( type_id, "timestamp#iso8601" ) == 0 ) - { - obj = rb_syck_mktime( n->data.str->ptr, n->data.str->len ); - } - else if ( strcmp( type_id, "timestamp#spaced" ) == 0 ) - { - obj = rb_syck_mktime( n->data.str->ptr, n->data.str->len ); - } - else if ( strcmp( type_id, "timestamp#ymd" ) == 0 ) - { - char *ptr = n->data.str->ptr; - VALUE year, mon, day; - - /* Year*/ - ptr[4] = '\0'; - year = INT2FIX(strtol(ptr, NULL, 10)); - - /* Month*/ - ptr += 4; - while ( !ISDIGIT( *ptr ) ) ptr++; - mon = INT2FIX(strtol(ptr, NULL, 10)); - - /* Day*/ - ptr += 2; - while ( !ISDIGIT( *ptr ) ) ptr++; - day = INT2FIX(strtol(ptr, NULL, 10)); - - if ( !cDate ) { - /* - * Load Date module - */ - rb_require( "date" ); - cDate = rb_const_get( rb_cObject, rb_intern("Date") ); - } - - obj = rb_funcall( cDate, s_new, 3, year, mon, day ); - } - else if ( strncmp( type_id, "timestamp", 9 ) == 0 ) - { - obj = rb_syck_mktime( n->data.str->ptr, n->data.str->len ); - } - else if ( strncmp( type_id, "merge", 5 ) == 0 ) - { - obj = rb_funcall( cMergeKey, s_new, 0 ); - } - else if ( strncmp( type_id, "default", 7 ) == 0 ) - { - obj = rb_funcall( cDefaultKey, s_new, 0 ); - } - else if ( n->data.str->style == scalar_plain && - n->data.str->len > 1 && - strncmp( n->data.str->ptr, ":", 1 ) == 0 ) - { - obj = rb_funcall( oDefaultResolver, s_transfer, 2, - rb_str_new2( "tag:ruby.yaml.org,2002:sym" ), - rb_str_new( n->data.str->ptr + 1, n->data.str->len - 1 ) ); - } - else if ( strcmp( type_id, "str" ) == 0 ) - { - obj = rb_str_new( n->data.str->ptr, n->data.str->len ); - rb_enc_associate(obj, rb_utf8_encoding()); - } - else - { - transferred = 0; - obj = rb_str_new( n->data.str->ptr, n->data.str->len ); - } - break; - - case syck_seq_kind: - if ( type_id == NULL || strcmp( type_id, "seq" ) == 0 ) - { - transferred = 1; - } - obj = rb_ary_new2( n->data.list->idx ); - for ( i = 0; i < n->data.list->idx; i++ ) - { - rb_ary_store( obj, i, syck_seq_read( n, i ) ); - } - break; - - case syck_map_kind: - if ( type_id == NULL || strcmp( type_id, "map" ) == 0 ) - { - transferred = 1; - } - obj = rb_hash_new(); - for ( i = 0; i < n->data.pairs->idx; i++ ) - { - VALUE k = syck_map_read( n, map_key, i ); - VALUE v = syck_map_read( n, map_value, i ); - int skip_aset = 0; - - /* - * Handle merge keys - */ - if ( rb_obj_is_kind_of( k, cMergeKey ) ) - { - VALUE tmp; - if ( !NIL_P(tmp = rb_check_convert_type(v, T_HASH, "Hash", "to_hash")) ) - { - VALUE dup = rb_funcall( tmp, s_dup, 0 ); - rb_funcall( dup, s_update, 1, obj ); - obj = dup; - skip_aset = 1; - } - else if ( !NIL_P(tmp = rb_check_array_type(v)) ) - { - VALUE end = rb_ary_pop( tmp ); - VALUE tmph = rb_check_convert_type(end, T_HASH, "Hash", "to_hash"); - if ( !NIL_P(tmph) ) - { - VALUE dup = rb_funcall( tmph, s_dup, 0 ); - tmp = rb_ary_reverse( tmp ); - rb_ary_push( tmp, obj ); - rb_block_call( tmp, s_each, 0, 0, syck_merge_i, dup ); - obj = dup; - skip_aset = 1; - } - } - } - else if ( rb_obj_is_kind_of( k, cDefaultKey ) ) - { - rb_funcall( obj, s_default_set, 1, v ); - skip_aset = 1; - } - - if ( ! skip_aset ) - { - rb_hash_aset( obj, k, v ); - } - } - break; - } - - *ref = obj; - return transferred; -} - -static void syck_node_mark( SyckNode *n ); - -/* - * {native mode} node handler - * - Converts data into native Ruby types - */ -SYMID -rb_syck_load_handler(SyckParser *p, SyckNode *n) -{ - VALUE obj = Qnil; - struct parser_xtra *bonus = (struct parser_xtra *)p->bonus; - VALUE resolver = bonus->resolver; - if ( NIL_P( resolver ) ) - { - resolver = oDefaultResolver; - } - - /* - * Create node, - */ - obj = rb_funcall( resolver, s_node_import, 1, Data_Wrap_Struct( cNode, NULL, NULL, n ) ); - - /* - * ID already set, let's alter the symbol table to accept the new object - */ - if (n->id > 0 && !NIL_P(obj)) - { - MEMCPY((void *)n->id, (void *)obj, RVALUE, 1); - MEMZERO((void *)obj, RVALUE, 1); - obj = n->id; - } - - if ( bonus->taint) OBJ_TAINT( obj ); - if ( bonus->proc != 0 ) rb_funcall(bonus->proc, s_call, 1, obj); - - rb_hash_aset(bonus->data, INT2FIX(RHASH_SIZE(bonus->data)), obj); - return obj; -} - -/* - * friendly errors. - */ -void -rb_syck_err_handler(SyckParser *p, const char *msg) -{ - char *endl = p->cursor; - - while ( *endl != '\0' && *endl != '\n' ) - endl++; - - endl[0] = '\0'; - rb_raise(rb_eArgError, "%s on line %d, col %"PRIdPTRDIFF": `%s'", - msg, - p->linect, - p->cursor - p->lineptr, - p->lineptr); -} - -/* - * provide bad anchor object to the parser. - */ -SyckNode * -rb_syck_bad_anchor_handler(SyckParser *p, char *a) -{ - VALUE anchor_name = rb_str_new2( a ); - SyckNode *badanc = syck_new_map( rb_str_new2( "name" ), anchor_name ); - badanc->type_id = syck_strndup( "tag:ruby.yaml.org,2002:object:YAML::Syck::BadAlias", 53 ); - return badanc; -} - -/* - * data loaded based on the model requested. - */ -void -syck_set_model(VALUE p, VALUE input, VALUE model) -{ - SyckParser *parser; - Data_Get_Struct(p, SyckParser, parser); - syck_parser_handler( parser, rb_syck_load_handler ); - /* WARN: gonna be obsoleted soon!! */ - if ( model == sym_generic ) - { - rb_funcall( p, s_set_resolver, 1, oGenericResolver ); - } - syck_parser_implicit_typing( parser, 1 ); - syck_parser_taguri_expansion( parser, 1 ); - - if ( NIL_P( input ) ) - { - input = rb_ivar_get( p, s_input ); - } - if ( input == sym_bytecode ) - { - syck_parser_set_input_type( parser, syck_bytecode_utf8 ); - } - else - { - syck_parser_set_input_type( parser, syck_yaml_utf8 ); - } - syck_parser_error_handler( parser, rb_syck_err_handler ); - syck_parser_bad_anchor_handler( parser, rb_syck_bad_anchor_handler ); -} - -static int -syck_st_mark_nodes( char *key, SyckNode *n, char *arg ) -{ - if ( n != (void *)1 ) syck_node_mark( n ); - return ST_CONTINUE; -} - -/* - * mark parser nodes - */ -static void -syck_mark_parser(SyckParser *parser) -{ - struct parser_xtra *bonus = (struct parser_xtra *)parser->bonus; - rb_gc_mark_maybe(parser->root); - rb_gc_mark_maybe(parser->root_on_error); - rb_gc_mark( bonus->data ); - rb_gc_mark( bonus->proc ); - rb_gc_mark( bonus->resolver ); - - if ( parser->anchors != NULL ) - { - st_foreach( parser->anchors, syck_st_mark_nodes, 0 ); - } - if ( parser->bad_anchors != NULL ) - { - st_foreach( parser->bad_anchors, syck_st_mark_nodes, 0 ); - } -} - -/* - * Free the parser and any bonus attachment. - */ -void -rb_syck_free_parser(SyckParser *p) -{ - S_FREE( p->bonus ); - syck_free_parser(p); -} - -/* - * YAML::Syck::Parser.allocate - */ -VALUE syck_parser_s_alloc _((VALUE)); -VALUE -syck_parser_s_alloc(VALUE class) -{ - VALUE pobj; - SyckParser *parser = syck_new_parser(); - - parser->bonus = S_ALLOC( struct parser_xtra ); - S_MEMZERO( parser->bonus, struct parser_xtra, 1 ); - - pobj = Data_Wrap_Struct( class, syck_mark_parser, rb_syck_free_parser, parser ); - - syck_parser_set_root_on_error( parser, Qnil ); - - return pobj; -} - -/* - * YAML::Syck::Parser.initialize( resolver, options ) - */ -static VALUE -syck_parser_initialize(int argc, VALUE *argv, VALUE self) -{ - VALUE options; - if (rb_scan_args(argc, argv, "01", &options) == 0) - { - options = rb_hash_new(); - } - else - { - Check_Type(options, T_HASH); - } - rb_ivar_set(self, s_options, options); - rb_ivar_set(self, s_input, Qnil); - return self; -} - -/* - * YAML::Syck::Parser.bufsize = Integer - */ -static VALUE -syck_parser_bufsize_set(VALUE self, VALUE size) -{ - SyckParser *parser; - - if ( rb_respond_to( size, s_to_i ) ) { - int n = NUM2INT(rb_funcall(size, s_to_i, 0)); - Data_Get_Struct(self, SyckParser, parser); - parser->bufsize = n; - } - return self; -} - -/* - * YAML::Syck::Parser.bufsize => Integer - */ -static VALUE -syck_parser_bufsize_get(VALUE self) -{ - SyckParser *parser; - - Data_Get_Struct(self, SyckParser, parser); - return INT2FIX( parser->bufsize ); -} - -/* - * YAML::Syck::Parser.load( IO or String ) - */ -VALUE -syck_parser_load(int argc, VALUE *argv, VALUE self) -{ - VALUE port, proc, model, input; - SyckParser *parser; - struct parser_xtra *bonus; - - rb_scan_args(argc, argv, "11", &port, &proc); - - input = rb_hash_aref( rb_attr_get( self, s_options ), sym_input ); - model = rb_hash_aref( rb_attr_get( self, s_options ), sym_model ); - Data_Get_Struct(self, SyckParser, parser); - syck_set_model( self, input, model ); - - bonus = (struct parser_xtra *)parser->bonus; - bonus->taint = syck_parser_assign_io(parser, &port); - bonus->data = rb_hash_new(); - bonus->resolver = rb_attr_get( self, s_resolver ); - if ( NIL_P( proc ) ) bonus->proc = 0; - else bonus->proc = proc; - - return syck_parse( parser ); -} - -/* - * YAML::Syck::Parser.load_documents( IO or String ) { |doc| } - */ -VALUE -syck_parser_load_documents(int argc, VALUE *argv, VALUE self) -{ - VALUE port, proc, v, input, model; - SyckParser *parser; - struct parser_xtra *bonus; - - rb_scan_args(argc, argv, "1&", &port, &proc); - - input = rb_hash_aref( rb_attr_get( self, s_options ), sym_input ); - model = rb_hash_aref( rb_attr_get( self, s_options ), sym_model ); - Data_Get_Struct(self, SyckParser, parser); - syck_set_model( self, input, model ); - - bonus = (struct parser_xtra *)parser->bonus; - bonus->taint = syck_parser_assign_io(parser, &port); - bonus->resolver = rb_attr_get( self, s_resolver ); - bonus->proc = 0; - - while ( 1 ) - { - /* Reset hash for tracking nodes */ - bonus->data = rb_hash_new(); - - /* Parse a document */ - v = syck_parse( parser ); - if ( parser->eof == 1 ) - { - break; - } - - /* Pass document to block */ - rb_funcall( proc, s_call, 1, v ); - } - - return Qnil; -} - -/* - * YAML::Syck::Parser#set_resolver - */ -VALUE -syck_parser_set_resolver(VALUE self, VALUE resolver) -{ - rb_ivar_set( self, s_resolver, resolver ); - return self; -} - -/* - * YAML::Syck::Resolver.initialize - */ -static VALUE -syck_resolver_initialize(VALUE self) -{ - rb_ivar_set(self, s_tags, rb_hash_new()); - return self; -} - -/* - * YAML::Syck::Resolver#add_type - */ -VALUE -syck_resolver_add_type(VALUE self, VALUE taguri, VALUE cls) -{ - VALUE tags = rb_attr_get(self, s_tags); - rb_hash_aset( tags, taguri, cls ); - return Qnil; -} - -/* - * YAML::Syck::Resolver#use_types_at - */ -VALUE -syck_resolver_use_types_at(VALUE self, VALUE hsh) -{ - rb_ivar_set( self, s_tags, hsh ); - return Qnil; -} - -/* - * YAML::Syck::Resolver#detect_implicit - */ -VALUE -syck_resolver_detect_implicit(VALUE self, VALUE val) -{ - return rb_str_new2( "" ); -} - -/* - * YAML::Syck::Resolver#node_import - */ -VALUE -syck_resolver_node_import(VALUE self, VALUE node) -{ - SyckNode *n; - VALUE obj = Qnil; - int i = 0; - Data_Get_Struct(node, SyckNode, n); - - switch (n->kind) - { - case syck_str_kind: - obj = rb_str_new( n->data.str->ptr, n->data.str->len ); - break; - - case syck_seq_kind: - obj = rb_ary_new2( n->data.list->idx ); - for ( i = 0; i < n->data.list->idx; i++ ) - { - rb_ary_store( obj, i, syck_seq_read( n, i ) ); - } - break; - - case syck_map_kind: - obj = rb_hash_new(); - for ( i = 0; i < n->data.pairs->idx; i++ ) - { - VALUE k = syck_map_read( n, map_key, i ); - VALUE v = syck_map_read( n, map_value, i ); - int skip_aset = 0; - - /* - * Handle merge keys - */ - if ( rb_obj_is_kind_of( k, cMergeKey ) ) - { - if ( rb_obj_is_kind_of( v, rb_cHash ) ) - { - VALUE dup = rb_funcall( v, s_dup, 0 ); - rb_funcall( dup, s_update, 1, obj ); - obj = dup; - skip_aset = 1; - } - else if ( rb_obj_is_kind_of( v, rb_cArray ) ) - { - VALUE end = rb_ary_pop( v ); - if ( rb_obj_is_kind_of( end, rb_cHash ) ) - { - VALUE dup = rb_funcall( end, s_dup, 0 ); - v = rb_ary_reverse( v ); - rb_ary_push( v, obj ); - rb_block_call( v, s_each, 0, 0, syck_merge_i, dup ); - obj = dup; - skip_aset = 1; - } - } - } - else if ( rb_obj_is_kind_of( k, cDefaultKey ) ) - { - rb_funcall( obj, s_default_set, 1, v ); - skip_aset = 1; - } - - if ( ! skip_aset ) - { - rb_hash_aset( obj, k, v ); - } - } - break; - } - - if ( n->type_id != NULL ) - { - obj = rb_funcall( self, s_transfer, 2, rb_str_new2( n->type_id ), obj ); - } - return obj; -} - -/* - * Set instance variables - */ -VALUE -syck_set_ivars(VALUE vars, VALUE obj) -{ - VALUE ivname = rb_ary_entry( vars, 0 ); - char *ivn; - StringValue( ivname ); - ivn = S_ALLOCA_N( char, RSTRING_LEN(ivname) + 2 ); - ivn[0] = '@'; - ivn[1] = '\0'; - strncat( ivn, RSTRING_PTR(ivname), RSTRING_LEN(ivname) ); - rb_iv_set( obj, ivn, rb_ary_entry( vars, 1 ) ); - return Qnil; -} - -/* - * YAML::Syck::Resolver#const_find - */ -VALUE -syck_const_find(VALUE const_name) -{ - VALUE tclass = rb_cObject; - VALUE tparts = rb_str_split( const_name, "::" ); - int i = 0; - for ( i = 0; i < RARRAY_LEN(tparts); i++ ) { - VALUE tpart = rb_to_id( rb_ary_entry( tparts, i ) ); - if ( !rb_const_defined( tclass, tpart ) ) return Qnil; - tclass = rb_const_get( tclass, tpart ); - } - return tclass; -} - -/* - * YAML::Syck::Resolver#transfer - */ -VALUE -syck_resolver_transfer(VALUE self, VALUE type, VALUE val) -{ - if (NIL_P(type) || RSTRING_LEN(StringValue(type)) == 0) - { - type = rb_funcall( self, s_detect_implicit, 1, val ); - } - - if ( ! (NIL_P(type) || RSTRING_LEN(StringValue(type)) == 0) ) - { - VALUE str_xprivate = rb_str_new2( "x-private" ); - VALUE colon = rb_str_new2( ":" ); - VALUE tags = rb_attr_get(self, s_tags); - VALUE target_class = rb_hash_aref( tags, type ); - VALUE subclass = target_class; - VALUE obj = Qnil; - - /* - * Should no tag match exactly, check for subclass format - */ - if ( NIL_P( target_class ) ) - { - VALUE subclass_parts = rb_ary_new(); - VALUE parts = rb_str_split( type, ":" ); - - while ( RARRAY_LEN(parts) > 1 ) - { - VALUE partial; - rb_ary_unshift( subclass_parts, rb_ary_pop( parts ) ); - partial = rb_ary_join( parts, colon ); - target_class = rb_hash_aref( tags, partial ); - if ( NIL_P( target_class ) ) - { - rb_str_append( partial, colon ); - target_class = rb_hash_aref( tags, partial ); - } - - /* - * Possible subclass found, see if it supports subclassing - */ - if ( ! NIL_P( target_class ) ) - { - subclass = target_class; - if ( RARRAY_LEN(subclass_parts) > 0 && rb_respond_to( target_class, s_tag_subclasses ) && - RTEST( rb_funcall( target_class, s_tag_subclasses, 0 ) ) ) - { - VALUE subclass_v; - subclass = rb_ary_join( subclass_parts, colon ); - subclass = rb_funcall( target_class, s_tag_read_class, 1, subclass ); - subclass_v = syck_const_find( subclass ); - - if ( subclass_v != Qnil ) - { - subclass = subclass_v; - } - else if ( rb_cObject == target_class && subclass_v == Qnil ) - { - target_class = cYObject; - type = subclass; - subclass = cYObject; - } - else /* workaround for SEGV. real fix please */ - { - rb_raise( rb_eTypeError, "invalid subclass" ); - } - } - break; - } - } - } - - /* rb_raise(rb_eTypeError, "invalid typing scheme: %s given", - * scheme); - */ - - if ( rb_respond_to( target_class, s_call ) ) - { - obj = rb_funcall( target_class, s_call, 2, type, val ); - } - else - { - if ( rb_respond_to( target_class, s_yaml_new ) ) - { - obj = rb_funcall( target_class, s_yaml_new, 3, subclass, type, val ); - } - else if ( !NIL_P( target_class ) ) - { - if ( subclass == rb_cBignum ) - { - obj = rb_str2inum( val, 10 ); /* for yaml dumped by 1.8.3 [ruby-core:6159] */ - } - else - { - obj = rb_obj_alloc( subclass ); - } - - if ( rb_respond_to( obj, s_yaml_initialize ) ) - { - rb_funcall( obj, s_yaml_initialize, 2, type, val ); - } - else if ( !NIL_P( obj ) && rb_obj_is_instance_of( val, rb_cHash ) ) - { - rb_block_call( val, s_each, 0, 0, syck_set_ivars, obj ); - } - } - else - { - VALUE parts = rb_str_split( type, ":" ); - VALUE scheme = rb_ary_shift( parts ); - if ( rb_str_cmp( scheme, str_xprivate ) == 0 ) - { - VALUE name = rb_ary_join( parts, colon ); - obj = rb_funcall( cPrivateType, s_new, 2, name, val ); - } - else - { - VALUE domain = rb_ary_shift( parts ); - VALUE name = rb_ary_join( parts, colon ); - obj = rb_funcall( cDomainType, s_new, 3, domain, name, val ); - } - } - } - val = obj; - } - - return val; -} - -/* - * YAML::Syck::Resolver#tagurize - */ -VALUE -syck_resolver_tagurize(VALUE self, VALUE val) -{ - VALUE tmp = rb_check_string_type(val); - - if ( !NIL_P(tmp) ) - { - char *taguri = syck_type_id_to_uri( RSTRING_PTR(tmp) ); - val = rb_str_new2( taguri ); - S_FREE( taguri ); - } - - return val; -} - -/* - * YAML::Syck::DefaultResolver#detect_implicit - */ -VALUE -syck_defaultresolver_detect_implicit(VALUE self, VALUE val) -{ - const char *type_id; - VALUE tmp = rb_check_string_type(val); - - if ( !NIL_P(tmp) ) - { - val = tmp; - type_id = syck_match_implicit( RSTRING_PTR(val), RSTRING_LEN(val) ); - return rb_str_new2( type_id ); - } - - return rb_str_new2( "" ); -} - -/* - * YAML::Syck::DefaultResolver#node_import - */ -VALUE -syck_defaultresolver_node_import(VALUE self, VALUE node) -{ - SyckNode *n; - VALUE obj; - Data_Get_Struct( node, SyckNode, n ); - if ( !yaml_org_handler( n, &obj ) ) - { - obj = rb_funcall( self, s_transfer, 2, rb_str_new2( n->type_id ), obj ); - } - return obj; -} - -/* - * YAML::Syck::GenericResolver#node_import - */ -VALUE -syck_genericresolver_node_import(VALUE self, VALUE node) -{ - SyckNode *n; - int i = 0; - VALUE t = Qnil, obj = Qnil, v = Qnil, style = Qnil; - Data_Get_Struct(node, SyckNode, n); - - if ( n->type_id != NULL ) - { - t = rb_str_new2(n->type_id); - } - - switch (n->kind) - { - case syck_str_kind: - { - v = rb_str_new( n->data.str->ptr, n->data.str->len ); - rb_enc_associate(v, rb_utf8_encoding()); - if ( n->data.str->style == scalar_1quote ) - { - style = sym_1quote; - } - else if ( n->data.str->style == scalar_2quote ) - { - style = sym_2quote; - } - else if ( n->data.str->style == scalar_fold ) - { - style = sym_fold; - } - else if ( n->data.str->style == scalar_literal ) - { - style = sym_literal; - } - else if ( n->data.str->style == scalar_plain ) - { - style = sym_plain; - } - obj = rb_funcall( cScalar, s_new, 3, t, v, style ); - } - break; - - case syck_seq_kind: - v = rb_ary_new2( syck_seq_count( n ) ); - for ( i = 0; i < syck_seq_count( n ); i++ ) - { - rb_ary_store( v, i, syck_seq_read( n, i ) ); - } - if ( n->data.list->style == seq_inline ) - { - style = sym_inline; - } - obj = rb_funcall( cSeq, s_new, 3, t, v, style ); - rb_iv_set(obj, "@kind", sym_seq); - break; - - case syck_map_kind: - v = rb_hash_new(); - for ( i = 0; i < syck_map_count( n ); i++ ) - { - rb_hash_aset( v, syck_map_read( n, map_key, i ), syck_map_read( n, map_value, i ) ); - } - if ( n->data.pairs->style == map_inline ) - { - style = sym_inline; - } - obj = rb_funcall( cMap, s_new, 3, t, v, style ); - rb_iv_set(obj, "@kind", sym_map); - break; - } - - return obj; -} - -/* - * YAML::Syck::BadAlias.initialize - */ -VALUE -syck_badalias_initialize(VALUE self, VALUE val) -{ - rb_iv_set( self, "@name", val ); - return self; -} - -/* - * YAML::Syck::BadAlias.<=> - */ -VALUE -syck_badalias_cmp(VALUE alias1, VALUE alias2) -{ - VALUE str1 = rb_ivar_get( alias1, s_name ); - VALUE str2 = rb_ivar_get( alias2, s_name ); - VALUE val = rb_funcall( str1, s_cmp, 1, str2 ); - return val; -} - -/* - * YAML::DomainType.initialize - */ -VALUE -syck_domaintype_initialize(VALUE self, VALUE domain, VALUE type_id, VALUE val) -{ - rb_iv_set( self, "@domain", domain ); - rb_iv_set( self, "@type_id", type_id ); - rb_iv_set( self, "@value", val ); - return self; -} - -/* - * YAML::Object.initialize - */ -VALUE -syck_yobject_initialize(VALUE self, VALUE klass, VALUE ivars) -{ - rb_iv_set( self, "@class", klass ); - rb_iv_set( self, "@ivars", ivars ); - return self; -} - -/* - * YAML::PrivateType.initialize - */ -VALUE -syck_privatetype_initialize(VALUE self, VALUE type_id, VALUE val) -{ - rb_iv_set( self, "@type_id", type_id ); - rb_iv_set( self, "@value", val ); - return self; -} - -/* - * Mark node contents. - */ -static void -syck_node_mark(SyckNode *n) -{ - int i; - rb_gc_mark_maybe( n->id ); - switch ( n->kind ) - { - case syck_seq_kind: - for ( i = 0; i < n->data.list->idx; i++ ) - { - rb_gc_mark( syck_seq_read( n, i ) ); - } - break; - - case syck_map_kind: - for ( i = 0; i < n->data.pairs->idx; i++ ) - { - rb_gc_mark( syck_map_read( n, map_key, i ) ); - rb_gc_mark( syck_map_read( n, map_value, i ) ); - } - break; - - case syck_str_kind: - default: - /* nothing */ - break; - } -#if 0 /* maybe needed */ - if ( n->shortcut ) syck_node_mark( n->shortcut ); /* caution: maybe cyclic */ -#endif -} - -/* - * YAML::Syck::Scalar.allocate - */ -VALUE -syck_scalar_alloc(VALUE class) -{ - SyckNode *node = syck_alloc_str(); - VALUE obj = Data_Wrap_Struct( class, syck_node_mark, syck_free_node, node ); - node->id = obj; - return obj; -} - -/* - * YAML::Syck::Scalar.initialize - */ -VALUE -syck_scalar_initialize(VALUE self, VALUE type_id, VALUE val, VALUE style) -{ - rb_iv_set( self, "@kind", sym_scalar ); - rb_funcall( self, s_type_id_set, 1, type_id ); - rb_funcall( self, s_value_set, 1, val ); - rb_funcall( self, s_style_set, 1, style ); - return self; -} - -/* - * YAML::Syck::Scalar.style= - */ -VALUE -syck_scalar_style_set(VALUE self, VALUE style) -{ - SyckNode *node; - Data_Get_Struct( self, SyckNode, node ); - - if ( NIL_P( style ) ) - { - node->data.str->style = scalar_none; - } - else if ( style == sym_1quote ) - { - node->data.str->style = scalar_1quote; - } - else if ( style == sym_2quote ) - { - node->data.str->style = scalar_2quote; - } - else if ( style == sym_fold ) - { - node->data.str->style = scalar_fold; - } - else if ( style == sym_literal ) - { - node->data.str->style = scalar_literal; - } - else if ( style == sym_plain ) - { - node->data.str->style = scalar_plain; - } - - rb_iv_set( self, "@style", style ); - return self; -} - -/* - * YAML::Syck::Scalar.value= - */ -VALUE -syck_scalar_value_set(VALUE self, VALUE val) -{ - SyckNode *node; - Data_Get_Struct( self, SyckNode, node ); - - StringValue( val ); - node->data.str->ptr = syck_strndup( RSTRING_PTR(val), RSTRING_LEN(val) ); - node->data.str->len = RSTRING_LEN(val); - node->data.str->style = scalar_none; - - rb_iv_set( self, "@value", val ); - return val; -} - -/* - * YAML::Syck::Seq.allocate - */ -VALUE -syck_seq_alloc(VALUE class) -{ - SyckNode *node; - VALUE obj; - node = syck_alloc_seq(); - obj = Data_Wrap_Struct( class, syck_node_mark, syck_free_node, node ); - node->id = obj; - return obj; -} - -/* - * YAML::Syck::Seq.initialize - */ -VALUE -syck_seq_initialize(VALUE self, VALUE type_id, VALUE val, VALUE style) -{ - SyckNode *node; - Data_Get_Struct( self, SyckNode, node ); - - rb_iv_set( self, "@kind", sym_seq ); - rb_funcall( self, s_type_id_set, 1, type_id ); - rb_funcall( self, s_value_set, 1, val ); - rb_funcall( self, s_style_set, 1, style ); - return self; -} - -/* - * YAML::Syck::Seq.value= - */ -VALUE -syck_seq_value_set(VALUE self, VALUE val) -{ - SyckNode *node; - Data_Get_Struct( self, SyckNode, node ); - - val = rb_check_array_type( val ); - if ( !NIL_P( val ) ) { - int i; - syck_seq_empty( node ); - for ( i = 0; i < RARRAY_LEN( val ); i++ ) - { - syck_seq_add( node, rb_ary_entry(val, i) ); - } - } - - rb_iv_set( self, "@value", val ); - return val; -} - -/* - * YAML::Syck::Seq.add - */ -VALUE -syck_seq_add_m(VALUE self, VALUE val) -{ - SyckNode *node; - VALUE emitter = rb_ivar_get( self, s_emitter ); - Data_Get_Struct( self, SyckNode, node ); - - if ( rb_respond_to( emitter, s_node_export ) ) { - val = rb_funcall( emitter, s_node_export, 1, val ); - } - syck_seq_add( node, val ); - rb_ary_push( rb_ivar_get( self, s_value ), val ); - - return self; -} - -/* - * YAML::Syck::Seq.style= - */ -VALUE -syck_seq_style_set(VALUE self, VALUE style) -{ - SyckNode *node; - Data_Get_Struct( self, SyckNode, node ); - - if ( style == sym_inline ) - { - node->data.list->style = seq_inline; - } - else - { - node->data.list->style = seq_none; - } - - rb_iv_set( self, "@style", style ); - return self; -} - -/* - * YAML::Syck::Map.allocate - */ -VALUE -syck_map_alloc(VALUE class) -{ - SyckNode *node; - VALUE obj; - node = syck_alloc_map(); - obj = Data_Wrap_Struct( class, syck_node_mark, syck_free_node, node ); - node->id = obj; - return obj; -} - -/* - * YAML::Syck::Map.initialize - */ -VALUE -syck_map_initialize(VALUE self, VALUE type_id, VALUE val, VALUE style) -{ - SyckNode *node; - Data_Get_Struct( self, SyckNode, node ); - - if ( !NIL_P( val ) ) - { - VALUE hsh = rb_check_convert_type(val, T_HASH, "Hash", "to_hash"); - VALUE keys; - int i; - if ( NIL_P(hsh) ) - { - rb_raise( rb_eTypeError, "wrong argument type" ); - } - - keys = rb_funcall( hsh, s_keys, 0 ); - for ( i = 0; i < RARRAY_LEN(keys); i++ ) - { - VALUE key = rb_ary_entry(keys, i); - syck_map_add( node, key, rb_hash_aref(hsh, key) ); - } - } - - rb_iv_set( self, "@kind", sym_seq ); - rb_funcall( self, s_type_id_set, 1, type_id ); - rb_funcall( self, s_value_set, 1, val ); - rb_funcall( self, s_style_set, 1, style ); - return self; -} - -/* - * YAML::Syck::Map.value= - */ -VALUE -syck_map_value_set(VALUE self, VALUE val) -{ - SyckNode *node; - Data_Get_Struct( self, SyckNode, node ); - - if ( !NIL_P( val ) ) - { - VALUE hsh = rb_check_convert_type(val, T_HASH, "Hash", "to_hash"); - VALUE keys; - int i; - if ( NIL_P(hsh) ) - { - rb_raise( rb_eTypeError, "wrong argument type" ); - } - - syck_map_empty( node ); - keys = rb_funcall( hsh, s_keys, 0 ); - for ( i = 0; i < RARRAY_LEN(keys); i++ ) - { - VALUE key = rb_ary_entry(keys, i); - syck_map_add( node, key, rb_hash_aref(hsh, key) ); - } - } - - rb_iv_set( self, "@value", val ); - return val; -} - -/* - * YAML::Syck::Map.add - */ -VALUE -syck_map_add_m(VALUE self, VALUE key, VALUE val) -{ - SyckNode *node; - VALUE emitter = rb_ivar_get( self, s_emitter ); - Data_Get_Struct( self, SyckNode, node ); - - if ( rb_respond_to( emitter, s_node_export ) ) { - key = rb_funcall( emitter, s_node_export, 1, key ); - val = rb_funcall( emitter, s_node_export, 1, val ); - } - syck_map_add( node, key, val ); - rb_hash_aset( rb_ivar_get( self, s_value ), key, val ); - - return self; -} - -/* - * YAML::Syck::Map.style= - */ -VALUE -syck_map_style_set(VALUE self, VALUE style) -{ - SyckNode *node; - Data_Get_Struct( self, SyckNode, node ); - - if ( style == sym_inline ) - { - node->data.pairs->style = map_inline; - } - else - { - node->data.pairs->style = map_none; - } - - rb_iv_set( self, "@style", style ); - return self; -} - -#if 0 -/* - * Cloning method for all node types - */ -VALUE -syck_node_init_copy(VALUE copy, VALUE orig) -{ - SyckNode *copy_n; - SyckNode *orig_n; - - if ( copy == orig ) - return copy; - - if ( TYPE( orig ) != T_DATA ) - { - rb_raise( rb_eTypeError, "wrong argument type" ); - } - - Data_Get_Struct( orig, SyckNode, orig_n ); - Data_Get_Struct( copy, SyckNode, copy_n ); - MEMCPY( copy_n, orig_n, SyckNode, 1 ); - return copy; -} -#endif - -/* - * YAML::Syck::Node#type_id= - */ -VALUE -syck_node_type_id_set(VALUE self, VALUE type_id) -{ - SyckNode *node; - Data_Get_Struct( self, SyckNode, node ); - - S_FREE( node->type_id ); - - if ( !NIL_P( type_id ) ) { - StringValue( type_id ); - node->type_id = syck_strndup( RSTRING_PTR(type_id), RSTRING_LEN(type_id) ); - } - - rb_iv_set( self, "@type_id", type_id ); - return type_id; -} - -/* - * YAML::Syck::Node.transform - */ -VALUE -syck_node_transform(VALUE self) -{ - VALUE t; - SyckNode *n = NULL; - SyckNode *orig_n; - Data_Get_Struct(self, SyckNode, orig_n); - t = Data_Wrap_Struct( cNode, syck_node_mark, syck_free_node, 0 ); - - switch (orig_n->kind) - { - case syck_map_kind: - { - int i; - DATA_PTR(t) = n = syck_alloc_map(); - for ( i = 0; i < orig_n->data.pairs->idx; i++ ) - { - syck_map_add( n, rb_funcall( syck_map_read( orig_n, map_key, i ), s_transform, 0 ), - rb_funcall( syck_map_read( orig_n, map_value, i ), s_transform, 0 ) ); - } - } - break; - - case syck_seq_kind: - { - int i; - DATA_PTR(t) = n = syck_alloc_seq(); - for ( i = 0; i < orig_n->data.list->idx; i++ ) - { - syck_seq_add( n, rb_funcall( syck_seq_read( orig_n, i ), s_transform, 0 ) ); - } - } - break; - - case syck_str_kind: - DATA_PTR(t) = n = syck_new_str2( orig_n->data.str->ptr, orig_n->data.str->len, orig_n->data.str->style ); - break; - } - - if ( orig_n->type_id != NULL ) - { - n->type_id = syck_strndup( orig_n->type_id, strlen( orig_n->type_id ) ); - } - if ( orig_n->anchor != NULL ) - { - n->anchor = syck_strndup( orig_n->anchor, strlen( orig_n->anchor ) ); - } - n->id = t; - return rb_funcall( oDefaultResolver, s_node_import, 1, t ); -} - -/* - * Emitter callback: assembles YAML document events from - * Ruby symbols. This is a brilliant way to do it. - * No one could possibly object. - */ -void -rb_syck_emitter_handler(SyckEmitter *e, st_data_t data) -{ - SyckNode *n; - Data_Get_Struct((VALUE)data, SyckNode, n); - - switch (n->kind) - { - case syck_map_kind: - { - int i; - syck_emit_map( e, n->type_id, n->data.pairs->style ); - for ( i = 0; i < n->data.pairs->idx; i++ ) - { - syck_emit_item( e, syck_map_read( n, map_key, i ) ); - syck_emit_item( e, syck_map_read( n, map_value, i ) ); - } - syck_emit_end( e ); - } - break; - - case syck_seq_kind: - { - int i; - syck_emit_seq( e, n->type_id, n->data.list->style ); - for ( i = 0; i < n->data.list->idx; i++ ) - { - syck_emit_item( e, syck_seq_read( n, i ) ); - } - syck_emit_end( e ); - } - break; - - case syck_str_kind: - { - syck_emit_scalar( e, n->type_id, n->data.str->style, 0, 0, 0, n->data.str->ptr, n->data.str->len ); - } - break; - } -} - -/* - * Handle output from the emitter - */ -void -rb_syck_output_handler(SyckEmitter * emitter, char *str, long len) -{ - struct emitter_xtra *bonus = (struct emitter_xtra *)emitter->bonus; - VALUE dest = bonus->port; - if (TYPE(dest) == T_STRING) { - rb_str_cat( dest, str, len ); - } else { - rb_io_write( dest, rb_str_new( str, len ) ); - } -} - -/* - * Helper function for marking nodes in the anchor - * symbol table. - */ -void -syck_out_mark(VALUE emitter, VALUE node) -{ - SyckEmitter *emitterPtr; - struct emitter_xtra *bonus; - Data_Get_Struct(emitter, SyckEmitter, emitterPtr); - bonus = (struct emitter_xtra *)emitterPtr->bonus; - rb_ivar_set( node, s_emitter, emitter ); - /* syck_emitter_mark_node( emitterPtr, (st_data_t)node ); */ - if ( !NIL_P( bonus->oid ) ) { - rb_hash_aset( bonus->data, bonus->oid, node ); - } -} - -/* - * Mark emitter values. - */ -static void -syck_mark_emitter(SyckEmitter *emitter) -{ - struct emitter_xtra *bonus = (struct emitter_xtra *)emitter->bonus; - rb_gc_mark( bonus->oid ); - rb_gc_mark( bonus->data ); - rb_gc_mark( bonus->port ); -} - -/* - * Free the emitter and any bonus attachment. - */ -void -rb_syck_free_emitter(SyckEmitter *e) -{ - S_FREE( e->bonus ); - syck_free_emitter(e); -} - -/* - * YAML::Syck::Emitter.allocate - */ -VALUE syck_emitter_s_alloc _((VALUE)); -VALUE -syck_emitter_s_alloc(VALUE class) -{ - VALUE pobj; - SyckEmitter *emitter = syck_new_emitter(); - - emitter->bonus = S_ALLOC( struct emitter_xtra ); - S_MEMZERO( emitter->bonus, struct emitter_xtra, 1 ); - - pobj = Data_Wrap_Struct( class, syck_mark_emitter, rb_syck_free_emitter, emitter ); - syck_emitter_handler( emitter, rb_syck_emitter_handler ); - syck_output_handler( emitter, rb_syck_output_handler ); - - rb_ivar_set( pobj, s_out, rb_funcall( cOut, s_new, 1, pobj ) ); - return pobj; -} - -static VALUE -id_hash_new(void) -{ - VALUE hash; - hash = rb_hash_new(); - rb_funcall(hash, rb_intern("compare_by_identity"), 0); - return hash; -} - -/* - * YAML::Syck::Emitter.reset( options ) - */ -VALUE -syck_emitter_reset(int argc, VALUE *argv, VALUE self) -{ - VALUE options, tmp; - SyckEmitter *emitter; - struct emitter_xtra *bonus; - - Data_Get_Struct(self, SyckEmitter, emitter); - bonus = (struct emitter_xtra *)emitter->bonus; - - bonus->oid = Qnil; - bonus->port = rb_str_new2( "" ); - bonus->data = id_hash_new(); - - if (rb_scan_args(argc, argv, "01", &options) == 0) - { - options = rb_hash_new(); - rb_ivar_set(self, s_options, options); - } - else if ( !NIL_P(tmp = rb_check_string_type(options)) ) - { - bonus->port = tmp; - } - else if ( rb_respond_to( options, s_write ) ) - { - bonus->port = options; - } - else - { - Check_Type(options, T_HASH); - rb_ivar_set(self, s_options, options); - } - - emitter->headless = 0; - rb_ivar_set(self, s_level, INT2FIX(0)); - rb_ivar_set(self, s_resolver, Qnil); - return self; -} - -/* - * YAML::Syck::Emitter.emit( object_id ) { |out| ... } - */ -VALUE -syck_emitter_emit(int argc, VALUE *argv, VALUE self) -{ - VALUE oid, proc; - SyckEmitter *emitter; - struct emitter_xtra *bonus; - SYMID symple; - int level = FIX2INT(rb_ivar_get(self, s_level)) + 1; - rb_ivar_set(self, s_level, INT2FIX(level)); - - rb_scan_args(argc, argv, "1&", &oid, &proc); - Data_Get_Struct(self, SyckEmitter, emitter); - bonus = (struct emitter_xtra *)emitter->bonus; - - /* Calculate anchors, normalize nodes, build a simpler symbol table */ - bonus->oid = oid; - if ( !NIL_P( oid ) && RTEST( rb_funcall( bonus->data, s_haskey, 1, oid ) ) ) { - symple = rb_hash_aref( bonus->data, oid ); - } else { - symple = rb_funcall( proc, s_call, 1, rb_ivar_get( self, s_out ) ); - } - syck_emitter_mark_node( emitter, (st_data_t)symple ); - - /* Second pass, build emitted string */ - level -= 1; - rb_ivar_set(self, s_level, INT2FIX(level)); - if ( level == 0 ) - { - syck_emit(emitter, (st_data_t)symple); - syck_emitter_flush(emitter, 0); - - return bonus->port; - } - - return symple; -} - -/* - * YAML::Syck::Emitter#node_export - */ -VALUE -syck_emitter_node_export(VALUE self, VALUE node) -{ - return rb_funcall( node, s_to_yaml, 1, self ); -} - -/* - * YAML::Syck::Emitter#set_resolver - */ -VALUE -syck_emitter_set_resolver(VALUE self, VALUE resolver) -{ - rb_ivar_set( self, s_resolver, resolver ); - return self; -} - -/* - * YAML::Syck::Out::initialize - */ -VALUE -syck_out_initialize(VALUE self, VALUE emitter) -{ - rb_ivar_set( self, s_emitter, emitter ); - return self; -} - -/* - * YAML::Syck::Out::map - */ -VALUE -syck_out_map(int argc, VALUE *argv, VALUE self) -{ - VALUE type_id, style, map; - if (rb_scan_args(argc, argv, "11", &type_id, &style) == 1) { - style = Qnil; - } - map = rb_funcall( cMap, s_new, 3, type_id, rb_hash_new(), style ); - syck_out_mark( rb_ivar_get( self, s_emitter ), map ); - rb_yield( map ); - return map; -} - -/* - * YAML::Syck::Out::seq - */ -VALUE -syck_out_seq(int argc, VALUE *argv, VALUE self) -{ - VALUE type_id, style, seq; - if (rb_scan_args(argc, argv, "11", &type_id, &style) == 1) { - style = Qnil; - } - seq = rb_funcall( cSeq, s_new, 3, type_id, rb_ary_new(), style ); - syck_out_mark( rb_ivar_get( self, s_emitter ), seq ); - rb_yield( seq ); - return seq; -} - -/* - * YAML::Syck::Out::scalar -syck_out_scalar( self, type_id, str, style ) - VALUE self, type_id, str, style; - */ -VALUE -syck_out_scalar(int argc, VALUE *argv, VALUE self) -{ - VALUE type_id, str, style, scalar; - rb_scan_args(argc, argv, "21", &type_id, &str, &style); - scalar = rb_funcall( cScalar, s_new, 3, type_id, str, style ); - syck_out_mark( rb_ivar_get( self, s_emitter ), scalar ); - return scalar; -} - -/* - * Initialize Syck extension - */ -void -Init_syck() -{ - VALUE rb_syck = rb_define_module_under( rb_cObject, "Syck" ); - rb_define_module_function( rb_syck, "compile", rb_syck_compile, 1 ); - - /* - * Global symbols - */ - s_new = rb_intern("new"); - s_utc = rb_intern("utc"); - s_at = rb_intern("at"); - s_to_f = rb_intern("to_f"); - s_to_i = rb_intern("to_i"); - s_read = rb_intern("read"); - s_binmode = rb_intern("binmode"); - s_transfer = rb_intern("transfer"); - s_call = rb_intern("call"); - s_cmp = rb_intern("<=>"); - s_intern = rb_intern("intern"); - s_update = rb_intern("update"); - s_detect_implicit = rb_intern("detect_implicit"); - s_dup = rb_intern("dup"); - s_default_set = rb_intern("default="); - s_match = rb_intern("match"); - s_push = rb_intern("push"); - s_haskey = rb_intern("has_key?"); - s_keys = rb_intern("keys"); - s_node_import = rb_intern("node_import"); - s_tr_bang = rb_intern("tr!"); - s_unpack = rb_intern("unpack"); - s_write = rb_intern("write"); - s_tag_read_class = rb_intern( "yaml_tag_read_class" ); - s_tag_subclasses = rb_intern( "yaml_tag_subclasses?" ); - s_emitter = rb_intern( "emitter" ); - s_set_resolver = rb_intern( "set_resolver" ); - s_node_export = rb_intern( "node_export" ); - s_to_yaml = rb_intern( "to_yaml" ); - s_transform = rb_intern( "transform" ); - s_yaml_new = rb_intern("yaml_new"); - s_yaml_initialize = rb_intern("yaml_initialize"); - s_each = rb_intern("each"); - s_parse = rb_intern("parse"); - - s_tags = rb_intern("@tags"); - s_name = rb_intern("@name"); - s_options = rb_intern("@options"); - s_kind = rb_intern("@kind"); - s_type_id = rb_intern("@type_id"); - s_type_id_set = rb_intern("type_id="); - s_resolver = rb_intern("@resolver"); - s_level = rb_intern( "@level" ); - s_style = rb_intern("@style"); - s_style_set = rb_intern("style="); - s_value = rb_intern("@value"); - s_value_set = rb_intern("value="); - s_out = rb_intern("@out"); - s_input = rb_intern("@input"); - - sym_model = ID2SYM(rb_intern("Model")); - sym_generic = ID2SYM(rb_intern("Generic")); - sym_bytecode = ID2SYM(rb_intern("bytecode")); - sym_map = ID2SYM(rb_intern("map")); - sym_scalar = ID2SYM(rb_intern("scalar")); - sym_seq = ID2SYM(rb_intern("seq")); - sym_1quote = ID2SYM(rb_intern("quote1")); - sym_2quote = ID2SYM(rb_intern("quote2")); - sym_fold = ID2SYM(rb_intern("fold")); - sym_literal = ID2SYM(rb_intern("literal")); - sym_plain = ID2SYM(rb_intern("plain")); - sym_inline = ID2SYM(rb_intern("inline")); - - /* - * Define YAML::Syck::Resolver class - */ - cResolver = rb_define_class_under( rb_syck, "Resolver", rb_cObject ); - rb_define_attr( cResolver, "tags", 1, 1 ); - rb_define_method( cResolver, "initialize", syck_resolver_initialize, 0 ); - rb_define_method( cResolver, "add_type", syck_resolver_add_type, 2 ); - rb_define_method( cResolver, "use_types_at", syck_resolver_use_types_at, 1 ); - rb_define_method( cResolver, "detect_implicit", syck_resolver_detect_implicit, 1 ); - rb_define_method( cResolver, "transfer", syck_resolver_transfer, 2 ); - rb_define_method( cResolver, "node_import", syck_resolver_node_import, 1 ); - rb_define_method( cResolver, "tagurize", syck_resolver_tagurize, 1 ); - - rb_global_variable( &oDefaultResolver ); - oDefaultResolver = rb_funcall( cResolver, rb_intern( "new" ), 0 ); - rb_define_singleton_method( oDefaultResolver, "node_import", syck_defaultresolver_node_import, 1 ); - rb_define_singleton_method( oDefaultResolver, "detect_implicit", syck_defaultresolver_detect_implicit, 1 ); - rb_define_const( rb_syck, "DefaultResolver", oDefaultResolver ); - rb_global_variable( &oGenericResolver ); - oGenericResolver = rb_funcall( cResolver, rb_intern( "new" ), 0 ); - rb_define_singleton_method( oGenericResolver, "node_import", syck_genericresolver_node_import, 1 ); - rb_define_const( rb_syck, "GenericResolver", oGenericResolver ); - - /* - * Define YAML::Syck::Parser class - */ - cParser = rb_define_class_under( rb_syck, "Parser", rb_cObject ); - rb_define_attr( cParser, "options", 1, 1 ); - rb_define_attr( cParser, "resolver", 1, 1 ); - rb_define_attr( cParser, "input", 1, 1 ); - rb_define_alloc_func( cParser, syck_parser_s_alloc ); - rb_define_method(cParser, "initialize", syck_parser_initialize, -1 ); - rb_define_method(cParser, "bufsize=", syck_parser_bufsize_set, 1 ); - rb_define_method(cParser, "bufsize", syck_parser_bufsize_get, 0 ); - rb_define_method(cParser, "load", syck_parser_load, -1); - rb_define_method(cParser, "load_documents", syck_parser_load_documents, -1); - rb_define_method(cParser, "set_resolver", syck_parser_set_resolver, 1); - - /* - * Define YAML::Syck::Node class - */ - cNode = rb_define_class_under( rb_syck, "Node", rb_cObject ); - rb_undef( cNode, rb_intern("initialize_copy") ); - rb_define_attr( cNode, "emitter", 1, 1 ); - rb_define_attr( cNode, "resolver", 1, 1 ); - rb_define_attr( cNode, "kind", 1, 0 ); - rb_define_attr( cNode, "type_id", 1, 0 ); - rb_define_attr( cNode, "value", 1, 0 ); - rb_define_method( cNode, "type_id=", syck_node_type_id_set, 1 ); - rb_define_method( cNode, "transform", syck_node_transform, 0); - - /* - * Define YAML::Syck::Scalar, YAML::Syck::Seq, YAML::Syck::Map -- - * all are the publicly usable variants of YAML::Syck::Node - */ - cScalar = rb_define_class_under( rb_syck, "Scalar", cNode ); - rb_define_alloc_func( cScalar, syck_scalar_alloc ); - rb_define_method( cScalar, "initialize", syck_scalar_initialize, 3 ); - rb_define_method( cScalar, "value=", syck_scalar_value_set, 1 ); - rb_define_method( cScalar, "style=", syck_scalar_style_set, 1 ); - cSeq = rb_define_class_under( rb_syck, "Seq", cNode ); - rb_define_alloc_func( cSeq, syck_seq_alloc ); - rb_define_method( cSeq, "initialize", syck_seq_initialize, 3 ); - rb_define_method( cSeq, "value=", syck_seq_value_set, 1 ); - rb_define_method( cSeq, "add", syck_seq_add_m, 1 ); - rb_define_method( cSeq, "style=", syck_seq_style_set, 1 ); - cMap = rb_define_class_under( rb_syck, "Map", cNode ); - rb_define_alloc_func( cMap, syck_map_alloc ); - rb_define_method( cMap, "initialize", syck_map_initialize, 3 ); - rb_define_method( cMap, "value=", syck_map_value_set, 1 ); - rb_define_method( cMap, "add", syck_map_add_m, 2 ); - rb_define_method( cMap, "style=", syck_map_style_set, 1 ); - - /* - * Define YAML::PrivateType class - */ - cPrivateType = rb_define_class_under( rb_syck, "PrivateType", rb_cObject ); - rb_define_attr( cPrivateType, "type_id", 1, 1 ); - rb_define_attr( cPrivateType, "value", 1, 1 ); - rb_define_method( cPrivateType, "initialize", syck_privatetype_initialize, 2); - - /* - * Define YAML::DomainType class - */ - cDomainType = rb_define_class_under( rb_syck, "DomainType", rb_cObject ); - rb_define_attr( cDomainType, "domain", 1, 1 ); - rb_define_attr( cDomainType, "type_id", 1, 1 ); - rb_define_attr( cDomainType, "value", 1, 1 ); - rb_define_method( cDomainType, "initialize", syck_domaintype_initialize, 3); - - /* - * Define YAML::Object class - */ - cYObject = rb_define_class_under( rb_syck, "Object", rb_cObject ); - rb_define_attr( cYObject, "class", 1, 1 ); - rb_define_attr( cYObject, "ivars", 1, 1 ); - rb_define_method( cYObject, "initialize", syck_yobject_initialize, 2); - rb_define_method( cYObject, "yaml_initialize", syck_yobject_initialize, 2); - - /* - * Define YAML::Syck::BadAlias class - */ - cBadAlias = rb_define_class_under( rb_syck, "BadAlias", rb_cObject ); - rb_define_attr( cBadAlias, "name", 1, 1 ); - rb_define_method( cBadAlias, "initialize", syck_badalias_initialize, 1); - rb_define_method( cBadAlias, "<=>", syck_badalias_cmp, 1); - rb_include_module( cBadAlias, rb_const_get( rb_cObject, rb_intern("Comparable") ) ); - - /* - * Define YAML::Syck::MergeKey class - */ - cMergeKey = rb_define_class_under( rb_syck, "MergeKey", rb_cObject ); - - /* - * Define YAML::Syck::DefaultKey class - */ - cDefaultKey = rb_define_class_under( rb_syck, "DefaultKey", rb_cObject ); - - /* - * Define YAML::Syck::Out classes - */ - cOut = rb_define_class_under( rb_syck, "Out", rb_cObject ); - rb_define_attr( cOut, "emitter", 1, 1 ); - rb_define_method( cOut, "initialize", syck_out_initialize, 1 ); - rb_define_method( cOut, "map", syck_out_map, -1 ); - rb_define_method( cOut, "seq", syck_out_seq, -1 ); - rb_define_method( cOut, "scalar", syck_out_scalar, -1 ); - - /* - * Define YAML::Syck::Emitter class - */ - cEmitter = rb_define_class_under( rb_syck, "Emitter", rb_cObject ); - rb_define_attr( cEmitter, "level", 1, 1 ); - rb_define_alloc_func( cEmitter, syck_emitter_s_alloc ); - rb_define_method( cEmitter, "initialize", syck_emitter_reset, -1 ); - rb_define_method( cEmitter, "reset", syck_emitter_reset, -1 ); - rb_define_method( cEmitter, "emit", syck_emitter_emit, -1 ); - rb_define_method( cEmitter, "set_resolver", syck_emitter_set_resolver, 1); - rb_define_method( cEmitter, "node_export", syck_emitter_node_export, 1); -} - diff --git a/ext/syck/syck.c b/ext/syck/syck.c deleted file mode 100644 index 94e3992d3f..0000000000 --- a/ext/syck/syck.c +++ /dev/null @@ -1,524 +0,0 @@ -/* - * syck.c - * - * $Author$ - * - * Copyright (C) 2003 why the lucky stiff - */ -#include "ruby/ruby.h" - -#include -#include - -#include "syck.h" - -void syck_parser_pop_level( SyckParser * ); - -/* - * Custom assert - */ -void -syck_assert( const char *file_name, unsigned line_num, const char *expr ) -{ - fflush( NULL ); - fprintf( stderr, "\nAssertion failed: %s, line %u: %s\n", - file_name, line_num, expr ); - fflush( stderr ); - abort(); -} - -/* - * Allocates and copies a string - */ -char * -syck_strndup( const char *buf, long len ) -{ - char *new = S_ALLOC_N( char, len + 1 ); - S_MEMZERO( new, char, len + 1 ); - S_MEMCPY( new, buf, char, len ); - return new; -} - -/* - * Default FILE IO function - */ -long -syck_io_file_read( char *buf, SyckIoFile *file, long max_size, long skip ) -{ - long len = 0; - - ASSERT( file != NULL ); - - max_size -= skip; - len = fread( buf + skip, sizeof( char ), max_size, file->ptr ); - len += skip; - buf[len] = '\0'; - - return len; -} - -/* - * Default string IO function - */ -long -syck_io_str_read( char *buf, SyckIoStr *str, long max_size, long skip ) -{ - char *beg; - long len = 0; - - ASSERT( str != NULL ); - beg = str->ptr; - if ( max_size >= 0 ) - { - max_size -= skip; - if ( max_size <= 0 ) max_size = 0; - else str->ptr += max_size; - - if ( str->ptr > str->end ) - { - str->ptr = str->end; - } - } - else - { - /* Use exact string length */ - while ( str->ptr < str->end ) { - if (*(str->ptr++) == '\n') break; - } - } - if ( beg < str->ptr ) - { - len = ( str->ptr - beg ); - S_MEMCPY( buf + skip, beg, char, len ); - } - len += skip; - buf[len] = '\0'; - - return len; -} - -void -syck_parser_reset_levels( SyckParser *p ) -{ - while ( p->lvl_idx > 1 ) - { - syck_parser_pop_level( p ); - } - - if ( p->lvl_idx < 1 ) - { - p->lvl_idx = 1; - p->levels[0].spaces = -1; - p->levels[0].ncount = 0; - p->levels[0].domain = syck_strndup( "", 0 ); - } - p->levels[0].status = syck_lvl_header; -} - -void -syck_parser_reset_cursor( SyckParser *p ) -{ - if ( p->buffer == NULL ) - { - p->buffer = S_ALLOC_N( char, p->bufsize ); - S_MEMZERO( p->buffer, char, p->bufsize ); - } - p->buffer[0] = '\0'; - - p->cursor = NULL; - p->lineptr = NULL; - p->linectptr = NULL; - p->token = NULL; - p->toktmp = NULL; - p->marker = NULL; - p->limit = NULL; - - p->root = 0; - p->root_on_error = 0; - p->linect = 0; - p->eof = 0; - p->last_token = 0; - p->force_token = 0; -} - -/* - * Value to return on a parse error - */ -void -syck_parser_set_root_on_error( SyckParser *p, SYMID roer ) -{ - p->root_on_error = roer; -} - -/* - * Allocate the parser - */ -SyckParser * -syck_new_parser(void) -{ - SyckParser *p; - p = S_ALLOC( SyckParser ); - S_MEMZERO( p, SyckParser, 1 ); - p->lvl_capa = ALLOC_CT; - p->levels = S_ALLOC_N( SyckLevel, p->lvl_capa ); - p->input_type = syck_yaml_utf8; - p->io_type = syck_io_str; - p->io.str = NULL; - p->syms = NULL; - p->anchors = NULL; - p->bad_anchors = NULL; - p->implicit_typing = 1; - p->taguri_expansion = 0; - p->bufsize = SYCK_BUFFERSIZE; - p->buffer = NULL; - p->lvl_idx = 0; - syck_parser_reset_levels( p ); - return p; -} - -int -syck_add_sym( SyckParser *p, void *data ) -{ - SYMID id = 0; - if ( p->syms == NULL ) - { - p->syms = st_init_numtable(); - } - id = p->syms->num_entries + 1; - st_insert( p->syms, id, (st_data_t)data ); - return (int)id; -} - -int -syck_lookup_sym( SyckParser *p, SYMID id, void **datap ) -{ - st_data_t data; - int ret; - if ( p->syms == NULL ) return 0; - ret = st_lookup( p->syms, id, &data ); - if(ret) *datap = (void *)data; - return ret; -} - -int -syck_st_free_nodes( char *key, SyckNode *n, char *arg ) -{ - if ( n != (void *)1 ) syck_free_node( n ); - n = NULL; - return ST_CONTINUE; -} - -void -syck_st_free( SyckParser *p ) -{ - /* - * Free the anchor tables - */ - if ( p->anchors != NULL ) - { - st_foreach( p->anchors, syck_st_free_nodes, 0 ); - st_free_table( p->anchors ); - p->anchors = NULL; - } - - if ( p->bad_anchors != NULL ) - { - st_foreach( p->bad_anchors, syck_st_free_nodes, 0 ); - st_free_table( p->bad_anchors ); - p->bad_anchors = NULL; - } -} - -typedef struct { - long hash; - char *buffer; - long length; - long remaining; - int printed; -} bytestring_t; - -int -syck_st_free_syms( void *key, bytestring_t *sav, void *dummy ) -{ - S_FREE(sav->buffer); - S_FREE(sav); - return ST_CONTINUE; -} - -void -syck_free_parser( SyckParser *p ) -{ - /* - * Free the adhoc symbol table - */ - if ( p->syms != NULL ) - { - st_foreach( p->syms, syck_st_free_syms, 0 ); - st_free_table( p->syms ); - p->syms = NULL; - } - - /* - * Free tables, levels - */ - syck_st_free( p ); - syck_parser_reset_levels( p ); - S_FREE( p->levels[0].domain ); - S_FREE( p->levels ); - - if ( p->buffer != NULL ) - { - S_FREE( p->buffer ); - } - free_any_io( p ); - S_FREE( p ); -} - -void -syck_parser_handler( SyckParser *p, SyckNodeHandler hdlr ) -{ - ASSERT( p != NULL ); - p->handler = hdlr; -} - -void -syck_parser_implicit_typing( SyckParser *p, int flag ) -{ - p->implicit_typing = ( flag == 0 ? 0 : 1 ); -} - -void -syck_parser_taguri_expansion( SyckParser *p, int flag ) -{ - p->taguri_expansion = ( flag == 0 ? 0 : 1 ); -} - -void -syck_parser_error_handler( SyckParser *p, SyckErrorHandler hdlr ) -{ - ASSERT( p != NULL ); - p->error_handler = hdlr; -} - -void -syck_parser_bad_anchor_handler( SyckParser *p, SyckBadAnchorHandler hdlr ) -{ - ASSERT( p != NULL ); - p->bad_anchor_handler = hdlr; -} - -void -syck_parser_set_input_type( SyckParser *p, enum syck_parser_input input_type ) -{ - ASSERT( p != NULL ); - p->input_type = input_type; -} - -void -syck_parser_file( SyckParser *p, FILE *fp, SyckIoFileRead read ) -{ - ASSERT( p != NULL ); - free_any_io( p ); - syck_parser_reset_cursor( p ); - p->io_type = syck_io_file; - p->io.file = S_ALLOC( SyckIoFile ); - p->io.file->ptr = fp; - if ( read != NULL ) - { - p->io.file->read = read; - } - else - { - p->io.file->read = syck_io_file_read; - } -} - -void -syck_parser_str( SyckParser *p, char *ptr, long len, SyckIoStrRead read ) -{ - ASSERT( p != NULL ); - free_any_io( p ); - syck_parser_reset_cursor( p ); - p->io_type = syck_io_str; - p->io.str = S_ALLOC( SyckIoStr ); - p->io.str->beg = ptr; - p->io.str->ptr = ptr; - p->io.str->end = ptr + len; - if ( read != NULL ) - { - p->io.str->read = read; - } - else - { - p->io.str->read = syck_io_str_read; - } -} - -void -syck_parser_str_auto( SyckParser *p, char *ptr, SyckIoStrRead read ) -{ - syck_parser_str( p, ptr, strlen( ptr ), read ); -} - -SyckLevel * -syck_parser_current_level( SyckParser *p ) -{ - return &p->levels[p->lvl_idx-1]; -} - -void -syck_parser_pop_level( SyckParser *p ) -{ - ASSERT( p != NULL ); - - /* The root level should never be popped */ - if ( p->lvl_idx <= 1 ) return; - - p->lvl_idx -= 1; - free( p->levels[p->lvl_idx].domain ); -} - -void -syck_parser_add_level( SyckParser *p, int len, enum syck_level_status status ) -{ - ASSERT( p != NULL ); - if ( p->lvl_idx + 1 > p->lvl_capa ) - { - p->lvl_capa += ALLOC_CT; - S_REALLOC_N( p->levels, SyckLevel, p->lvl_capa ); - } - - ASSERT( len > p->levels[p->lvl_idx-1].spaces ); - p->levels[p->lvl_idx].spaces = len; - p->levels[p->lvl_idx].ncount = 0; - p->levels[p->lvl_idx].domain = syck_strndup( p->levels[p->lvl_idx-1].domain, strlen( p->levels[p->lvl_idx-1].domain ) ); - p->levels[p->lvl_idx].status = status; - p->lvl_idx += 1; -} - -void -free_any_io( SyckParser *p ) -{ - ASSERT( p != NULL ); - switch ( p->io_type ) - { - case syck_io_str: - if ( p->io.str != NULL ) - { - S_FREE( p->io.str ); - p->io.str = NULL; - } - break; - - case syck_io_file: - if ( p->io.file != NULL ) - { - S_FREE( p->io.file ); - p->io.file = NULL; - } - break; - } -} - -long -syck_move_tokens( SyckParser *p ) -{ - long count, skip; - ASSERT( p->buffer != NULL ); - - if ( p->token == NULL ) - return 0; - - skip = p->limit - p->token; - if ( ( count = p->token - p->buffer ) ) - { - if (skip > 0) - S_MEMMOVE( p->buffer, p->token, char, skip ); - p->token = p->buffer; - p->marker -= count; - p->cursor -= count; - p->toktmp -= count; - p->limit -= count; - p->lineptr -= count; - p->linectptr -= count; - } - return skip; -} - -void -syck_check_limit( SyckParser *p, long len ) -{ - if ( p->cursor == NULL ) - { - p->cursor = p->buffer; - p->lineptr = p->buffer; - p->linectptr = p->buffer; - p->marker = p->buffer; - } - p->limit = p->buffer + len; -} - -long -syck_parser_read( SyckParser *p ) -{ - long len = 0; - long skip = 0; - ASSERT( p != NULL ); - switch ( p->io_type ) - { - case syck_io_str: - skip = syck_move_tokens( p ); - len = (p->io.str->read)( p->buffer, p->io.str, SYCK_BUFFERSIZE - 1, skip ); - break; - - case syck_io_file: - skip = syck_move_tokens( p ); - len = (p->io.file->read)( p->buffer, p->io.file, SYCK_BUFFERSIZE - 1, skip ); - break; - } - syck_check_limit( p, len ); - return len; -} - -long -syck_parser_readlen( SyckParser *p, long max_size ) -{ - long len = 0; - long skip = 0; - ASSERT( p != NULL ); - switch ( p->io_type ) - { - case syck_io_str: - skip = syck_move_tokens( p ); - len = (p->io.str->read)( p->buffer, p->io.str, max_size, skip ); - break; - - case syck_io_file: - skip = syck_move_tokens( p ); - len = (p->io.file->read)( p->buffer, p->io.file, max_size, skip ); - break; - } - syck_check_limit( p, len ); - return len; -} - -SYMID -syck_parse( SyckParser *p ) -{ - ASSERT( p != NULL ); - - syck_st_free( p ); - syck_parser_reset_levels( p ); - syckparse( p ); - return p->root; -} - -void -syck_default_error_handler( SyckParser *p, const char *msg ) -{ - printf( "Error at [Line %d, Col %"PRIdPTRDIFF"]: %s\n", - p->linect, - p->cursor - p->lineptr, - msg ); -} - diff --git a/ext/syck/syck.h b/ext/syck/syck.h deleted file mode 100644 index 8885b000de..0000000000 --- a/ext/syck/syck.h +++ /dev/null @@ -1,453 +0,0 @@ -/* - * syck.h - * - * $Author$ - * - * Copyright (C) 2003 why the lucky stiff - */ - -#ifndef SYCK_H -#define SYCK_H - -#define SYCK_YAML_MAJOR 1 -#define SYCK_YAML_MINOR 0 - -#define YAML_DOMAIN "yaml.org,2002" - -#include -#include -#include -#include "ruby/st.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/* - * Memory Allocation - */ -#if defined(HAVE_ALLOCA_H) && !defined(__GNUC__) -#include -#endif - -#ifdef DEBUG -void syck_assert( const char *, unsigned, const char * ); -# define ASSERT(f) \ - (( f ) ? (void)0 : syck_assert( __FILE__, __LINE__, #f )) -#else -# define ASSERT(f) ((void)0) -#endif - -#ifndef NULL -# define NULL (void *)0 -#endif - -#define ALLOC_CT 8 -#define SYCK_BUFFERSIZE 4096 -#define S_ALLOC_N(type,n) (type*)malloc(sizeof(type)*(n)) -#define S_ALLOC(type) (type*)malloc(sizeof(type)) -#define S_REALLOC_N(var,type,n) (var)=(type*)realloc((char*)(var),sizeof(type)*(n)) -#define S_FREE(n) if (n) { free(n); n = NULL; } - -#define S_ALLOCA_N(type,n) (type*)alloca(sizeof(type)*(n)) - -#define S_MEMZERO(p,type,n) memset((p), 0, sizeof(type)*(n)) -#define S_MEMCPY(p1,p2,type,n) memcpy((p1), (p2), sizeof(type)*(n)) -#define S_MEMMOVE(p1,p2,type,n) memmove((p1), (p2), sizeof(type)*(n)) -#define S_MEMCMP(p1,p2,type,n) memcmp((p1), (p2), sizeof(type)*(n)) - -#define BLOCK_FOLD 10 -#define BLOCK_LIT 20 -#define BLOCK_PLAIN 30 -#define NL_CHOMP 40 -#define NL_KEEP 50 - -/* - * Node definitions - */ -#ifndef ST_DATA_T_DEFINED -typedef long st_data_t; -#endif - -#define SYMID st_data_t - -typedef struct _syck_node SyckNode; - -enum syck_kind_tag { - syck_map_kind, - syck_seq_kind, - syck_str_kind -}; - -enum map_part { - map_key, - map_value -}; - -enum map_style { - map_none, - map_inline -}; - -enum seq_style { - seq_none, - seq_inline -}; - -enum scalar_style { - scalar_none, - scalar_1quote, - scalar_2quote, - scalar_fold, - scalar_literal, - scalar_plain -}; - -/* - * Node metadata struct - */ -struct _syck_node { - /* Symbol table ID */ - SYMID id; - /* Underlying kind */ - enum syck_kind_tag kind; - /* Fully qualified tag-uri for type */ - char *type_id; - /* Anchor name */ - char *anchor; - union { - /* Storage for map data */ - struct SyckMap { - enum map_style style; - SYMID *keys; - SYMID *values; - long capa; - long idx; - } *pairs; - /* Storage for sequence data */ - struct SyckSeq { - enum seq_style style; - SYMID *items; - long capa; - long idx; - } *list; - /* Storage for string data */ - struct SyckStr { - enum scalar_style style; - char *ptr; - long len; - } *str; - } data; - /* Shortcut node */ - void *shortcut; -}; - -/* - * Parser definitions - */ -typedef struct _syck_parser SyckParser; -typedef struct _syck_file SyckIoFile; -typedef struct _syck_str SyckIoStr; -typedef struct _syck_level SyckLevel; - -typedef SYMID (*SyckNodeHandler)(SyckParser *, SyckNode *); -typedef void (*SyckErrorHandler)(SyckParser *, const char *); -typedef SyckNode * (*SyckBadAnchorHandler)(SyckParser *, char *); -typedef long (*SyckIoFileRead)(char *, SyckIoFile *, long, long); -typedef long (*SyckIoStrRead)(char *, SyckIoStr *, long, long); - -enum syck_io_type { - syck_io_str, - syck_io_file -}; - -enum syck_parser_input { - syck_yaml_utf8, - syck_yaml_utf16, - syck_yaml_utf32, - syck_bytecode_utf8 -}; - -enum syck_level_status { - syck_lvl_header, - syck_lvl_doc, - syck_lvl_open, - syck_lvl_seq, - syck_lvl_map, - syck_lvl_block, - syck_lvl_str, - syck_lvl_iseq, - syck_lvl_imap, - syck_lvl_end, - syck_lvl_pause, - syck_lvl_anctag, - syck_lvl_mapx, - syck_lvl_seqx -}; - -/* - * Parser structs - */ -struct _syck_file { - /* File pointer */ - FILE *ptr; - /* Function which FILE -> buffer */ - SyckIoFileRead read; -}; - -struct _syck_str { - /* String buffer pointers */ - char *beg, *ptr, *end; - /* Function which string -> buffer */ - SyckIoStrRead read; -}; - -struct _syck_level { - /* Indent */ - int spaces; - /* Counts nodes emitted at this level, useful for parsing - * keys and pairs in bytecode */ - int ncount; - /* Does node have anchors or tags? */ - int anctag; - /* Domain prefixing at the given level */ - char *domain; - /* Keeps a node status */ - enum syck_level_status status; -}; - -struct _syck_parser { - /* Root node */ - SYMID root, root_on_error; - /* Implicit typing flag */ - int implicit_typing, taguri_expansion; - /* Scripting language function to handle nodes */ - SyckNodeHandler handler; - /* Error handler */ - SyckErrorHandler error_handler; - /* InvalidAnchor handler */ - SyckBadAnchorHandler bad_anchor_handler; - /* Parser input type */ - enum syck_parser_input input_type; - /* IO type */ - enum syck_io_type io_type; - /* Custom buffer size */ - size_t bufsize; - /* Buffer pointers */ - char *buffer, *linectptr, *lineptr, *toktmp, *token, *cursor, *marker, *limit; - /* Line counter */ - int linect; - /* Last token from yylex() */ - int last_token; - /* Force a token upon next call to yylex() */ - int force_token; - /* EOF flag */ - int eof; - union { - SyckIoFile *file; - SyckIoStr *str; - } io; - /* Symbol table for anchors */ - st_table *anchors, *bad_anchors; - /* Optional symbol table for SYMIDs */ - st_table *syms; - /* Levels of indentation */ - SyckLevel *levels; - int lvl_idx; - int lvl_capa; - /* Pointer for extension's use */ - void *bonus; -}; - -/* - * Emitter definitions - */ -typedef struct _syck_emitter SyckEmitter; -typedef struct _syck_emitter_node SyckEmitterNode; - -typedef void (*SyckOutputHandler)(SyckEmitter *, char *, long); -typedef void (*SyckEmitterHandler)(SyckEmitter *, st_data_t); - -enum doc_stage { - doc_open, - doc_processing -}; - -/* - * Emitter struct - */ -struct _syck_emitter { - /* Headerless doc flag */ - int headless; - /* Force header? */ - int use_header; - /* Force version? */ - int use_version; - /* Sort hash keys */ - int sort_keys; - /* Anchor format */ - char *anchor_format; - /* Explicit typing on all collections? */ - int explicit_typing; - /* Best width on folded scalars */ - int best_width; - /* Use literal[1] or folded[2] blocks on all text? */ - enum scalar_style style; - /* Stage of written document */ - enum doc_stage stage; - /* Level counter */ - int level; - /* Default indentation */ - int indent; - /* Object ignore ID */ - SYMID ignore_id; - /* Symbol table for anchors */ - st_table *markers, *anchors, *anchored; - /* Custom buffer size */ - size_t bufsize; - /* Buffer */ - char *buffer, *marker; - /* Absolute position of the buffer */ - long bufpos; - /* Handler for emitter nodes */ - SyckEmitterHandler emitter_handler; - /* Handler for output */ - SyckOutputHandler output_handler; - /* Levels of indentation */ - SyckLevel *levels; - int lvl_idx; - int lvl_capa; - /* Pointer for extension's use */ - void *bonus; -}; - -/* - * Emitter node metadata struct - */ -struct _syck_emitter_node { - /* Node buffer position */ - long pos; - /* Current indent */ - long indent; - /* Collection? */ - int is_shortcut; -}; - -/* - * Handler prototypes - */ -SYMID syck_hdlr_add_node( SyckParser *, SyckNode * ); -SyckNode *syck_hdlr_add_anchor( SyckParser *, char *, SyckNode * ); -void syck_hdlr_remove_anchor( SyckParser *, char * ); -SyckNode *syck_hdlr_get_anchor( SyckParser *, char * ); -void syck_add_transfer( char *, SyckNode *, int ); -char *syck_xprivate( const char *, int ); -char *syck_taguri( const char *, const char *, int ); -int syck_tagcmp( const char *, const char * ); -int syck_add_sym( SyckParser *, void * ); -int syck_lookup_sym( SyckParser *, SYMID, void ** ); -int syck_try_implicit( SyckNode * ); -char *syck_type_id_to_uri( const char * ); -void try_tag_implicit( SyckNode *, int ); -const char *syck_match_implicit( const char *, size_t ); - -/* - * API prototypes - */ -char *syck_strndup( const char *, long ); -long syck_io_file_read( char *, SyckIoFile *, long, long ); -long syck_io_str_read( char *, SyckIoStr *, long, long ); -char *syck_base64enc( char *, long ); -char *syck_base64dec( char *, long ); -SyckEmitter *syck_new_emitter(void); -SYMID syck_emitter_mark_node( SyckEmitter *, st_data_t ); -void syck_emitter_ignore_id( SyckEmitter *, SYMID ); -void syck_output_handler( SyckEmitter *, SyckOutputHandler ); -void syck_emitter_handler( SyckEmitter *, SyckEmitterHandler ); -void syck_free_emitter( SyckEmitter * ); -void syck_emitter_clear( SyckEmitter * ); -void syck_emitter_write( SyckEmitter *, const char *, long ); -void syck_emitter_escape( SyckEmitter *, const char *, long ); -void syck_emitter_flush( SyckEmitter *, long ); -void syck_emit( SyckEmitter *, st_data_t ); -void syck_emit_scalar( SyckEmitter *, const char *, enum scalar_style, int, int, char, const char *, long ); -void syck_emit_1quoted( SyckEmitter *, int, const char *, long ); -void syck_emit_2quoted( SyckEmitter *, int, const char *, long ); -void syck_emit_folded( SyckEmitter *, int, char, const char *, long ); -void syck_emit_literal( SyckEmitter *, char, const char *, long ); -void syck_emit_seq( SyckEmitter *, const char *, enum seq_style ); -void syck_emit_item( SyckEmitter *, st_data_t ); -void syck_emit_map( SyckEmitter *, const char *, enum map_style ); -void syck_emit_end( SyckEmitter * ); -void syck_emit_tag( SyckEmitter *, const char *, const char * ); -void syck_emit_indent( SyckEmitter * ); -SyckLevel *syck_emitter_current_level( SyckEmitter * ); -SyckLevel *syck_emitter_parent_level( SyckEmitter * ); -void syck_emitter_pop_level( SyckEmitter * ); -void syck_emitter_add_level( SyckEmitter *, int, enum syck_level_status ); -void syck_emitter_reset_levels( SyckEmitter * ); -SyckParser *syck_new_parser(void); -void syck_free_parser( SyckParser * ); -void syck_parser_set_root_on_error( SyckParser *, SYMID ); -void syck_parser_implicit_typing( SyckParser *, int ); -void syck_parser_taguri_expansion( SyckParser *, int ); -int syck_scan_scalar( int, const char *, long ); -void syck_parser_handler( SyckParser *, SyckNodeHandler ); -void syck_parser_error_handler( SyckParser *, SyckErrorHandler ); -void syck_parser_bad_anchor_handler( SyckParser *, SyckBadAnchorHandler ); -void syck_parser_set_input_type( SyckParser *, enum syck_parser_input ); -void syck_parser_file( SyckParser *, FILE *, SyckIoFileRead ); -void syck_parser_str( SyckParser *, char *, long, SyckIoStrRead ); -void syck_parser_str_auto( SyckParser *, char *, SyckIoStrRead ); -SyckLevel *syck_parser_current_level( SyckParser * ); -void syck_parser_add_level( SyckParser *, int, enum syck_level_status ); -void syck_parser_pop_level( SyckParser * ); -void free_any_io( SyckParser * ); -long syck_parser_read( SyckParser * ); -long syck_parser_readlen( SyckParser *, long ); -SYMID syck_parse( SyckParser * ); -void syck_default_error_handler( SyckParser *, const char * ); -SYMID syck_yaml2byte_handler( SyckParser *, SyckNode * ); -char *syck_yaml2byte( char * ); - -/* - * Allocation prototypes - */ -SyckNode *syck_alloc_map(void); -SyckNode *syck_alloc_seq(void); -SyckNode *syck_alloc_str(void); -void syck_free_node( SyckNode * ); -void syck_free_members( SyckNode * ); -SyckNode *syck_new_str( const char *, enum scalar_style ); -SyckNode *syck_new_str2( const char *, long, enum scalar_style ); -void syck_replace_str( SyckNode *, char *, enum scalar_style ); -void syck_replace_str2( SyckNode *, char *, long, enum scalar_style ); -void syck_str_blow_away_commas( SyckNode * ); -char *syck_str_read( SyckNode * ); -SyckNode *syck_new_map( SYMID, SYMID ); -void syck_map_empty( SyckNode * ); -void syck_map_add( SyckNode *, SYMID, SYMID ); -SYMID syck_map_read( SyckNode *, enum map_part, long ); -void syck_map_assign( SyckNode *, enum map_part, long, SYMID ); -long syck_map_count( SyckNode * ); -void syck_map_update( SyckNode *, SyckNode * ); -SyckNode *syck_new_seq( SYMID ); -void syck_seq_empty( SyckNode * ); -void syck_seq_add( SyckNode *, SYMID ); -void syck_seq_assign( SyckNode *, long, SYMID ); -SYMID syck_seq_read( SyckNode *, long ); -long syck_seq_count( SyckNode * ); - -/* - * Lexer prototypes - */ -void syckerror( const char * ); -int syckparse( void * ); -union YYSTYPE; -int sycklex( union YYSTYPE *, SyckParser * ); - -#if defined(__cplusplus) -} /* extern "C" { */ -#endif - -#endif /* ifndef SYCK_H */ diff --git a/ext/syck/token.c b/ext/syck/token.c deleted file mode 100644 index 3d05527e65..0000000000 --- a/ext/syck/token.c +++ /dev/null @@ -1,2724 +0,0 @@ -/* Generated by re2c 0.9.10 on Tue Sep 20 17:46:17 2005 */ -#line 1 "token.re" -/* - * token.re - * - * $Author$ - * - * 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 = (int)(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 "" -{ - 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 "" -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 "" -yy7: ++YYCURSOR; - goto yy8; -yy8: -#line 360 "token.re" -{ SyckLevel *lvl = CURRENT_LEVEL(); - ENSURE_YAML_IEND(lvl, -1); - YYPOS(0); - return 0; - } -#line 361 "" -yy9: yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - goto yy18; -yy10: -#line 366 "token.re" -{ GOBBLE_UP_YAML_INDENT( doc_level, YYTOKEN ); - goto Header; - } -#line 370 "" -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 = (int)(YYCURSOR - YYLINEPTR); - goto Header; - } -#line 384 "" -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 "" -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 "" -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 "" -{ - 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 "" -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 "" -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 "" -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 "" -yy45: ++YYCURSOR; - goto yy46; -yy46: -#line 432 "token.re" -{ POP_LEVEL(); - return YYTOKEN[0]; - } -#line 617 "" -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 "" -yy53: ++YYCURSOR; - goto yy54; -yy54: -#line 473 "token.re" -{ ENSURE_YAML_IOPEN(lvl, doc_level, 1); - goto SingleQuote; } -#line 774 "" -yy55: ++YYCURSOR; - goto yy56; -yy56: -#line 476 "token.re" -{ ENSURE_YAML_IOPEN(lvl, doc_level, 1); - goto DoubleQuote; } -#line 781 "" -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 "" -yy60: ++YYCURSOR; - yych = *YYCURSOR; - goto yy66; -yy61: -#line 490 "token.re" -{ goto Document; } -#line 814 "" -yy62: ++YYCURSOR; - goto yy63; -yy63: -#line 492 "token.re" -{ ENSURE_YAML_IEND(lvl, -1); - YYPOS(0); - return 0; - } -#line 823 "" -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 "" -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 "" -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 "" -yy81: ++YYCURSOR; - goto yy82; -yy82: -#line 441 "token.re" -{ ENSURE_YAML_IOPEN(lvl, (int)(YYTOKEN - YYLINEPTR), 1); - FORCE_NEXT_TOKEN(YAML_IOPEN); - if ( *YYCURSOR == '#' || is_newline( YYCURSOR ) || is_newline( YYCURSOR - 1 ) ) - { - YYCURSOR--; - ADD_LEVEL((int)((YYTOKEN + 1) - YYLINEPTR), syck_lvl_seq); - } - else /* spaces followed by content uses the space as indentation */ - { - ADD_LEVEL((int)(YYCURSOR - YYLINEPTR), syck_lvl_seq); - } - return YYTOKEN[0]; - } -#line 1054 "" -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 "" -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 "" -{ - 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 "" -yy99: ++YYCURSOR; - yych = *YYCURSOR; - goto yy103; -yy100: -#line 512 "token.re" -{ goto Directive; } -#line 1228 "" -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 "" -} -#line 517 "token.re" - - - } - -Plain: - { - ptrdiff_t qidx = 0; - ptrdiff_t 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 "" -{ - 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 "" -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 "" -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 "" -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 "" -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 "" -yy124: ++YYCURSOR; - goto yy125; -yy125: -#line 615 "token.re" -{ RETURN_IMPLICIT(); } -#line 1650 "" -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 "" -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 "" -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 "" -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 "" -{ - 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 "" -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 "" -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 "" -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 "" -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 "" -{ - 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 "" -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 "" -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 "" -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 "" -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 "" -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 "" -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 "" -{ - 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 "" -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 "" -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 "" -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 "" -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( (unsigned char)*yyt ) ) - { - forceIndent = rb_long2int(strtol( yyt, NULL, 10 )); - } - } - - qstr[0] = '\0'; - YYTOKEN = YYCURSOR; - -ScalarBlock2: - YYTOKEN = YYCURSOR; - - -#line 2378 "" -{ - 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 "" -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 "" -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 "" -yy213: ++YYCURSOR; - goto yy214; -yy214: -#line 1046 "token.re" -{ YYCURSOR--; - POP_LEVEL(); - RETURN_YAML_BLOCK(); - } -#line 2511 "" -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 "" -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 "" -{ - 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 "" -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 "" -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); -} - diff --git a/ext/syck/yaml2byte.c b/ext/syck/yaml2byte.c deleted file mode 100644 index e5cc4e0779..0000000000 --- a/ext/syck/yaml2byte.c +++ /dev/null @@ -1,259 +0,0 @@ -/* - * yaml2byte.c - * - * $Author$ - * - * Copyright (C) 2003 why the lucky stiff, clark evans - * - * WARNING WARNING WARNING --- THIS IS *NOT JUST* PLAYING - * ANYMORE! -- WHY HAS EMBRACED THIS AS THE REAL THING! - */ -#include "ruby/ruby.h" -#include -#include -#define YAMLBYTE_UTF8 -#include "yamlbyte.h" - -#include -#define TRACE0(a) \ - do { printf(a); printf("\n"); fflush(stdout); } while(0) -#define TRACE1(a,b) \ - do { printf(a,b); printf("\n"); fflush(stdout); } while(0) -#define TRACE2(a,b,c) \ - do { printf(a,b,c); printf("\n"); fflush(stdout); } while(0) -#define TRACE3(a,b,c,d) \ - do { printf(a,b,c,d); printf("\n"); fflush(stdout); } while(0) - -/* Reinvent the wheel... */ -#define CHUNKSIZE 64 -#define HASH ((long)0xCAFECAFE) -typedef struct { - long hash; - char *buffer; - long length; - long remaining; - int printed; -} bytestring_t; -bytestring_t *bytestring_alloc(void) { - bytestring_t *ret; - /*TRACE0("bytestring_alloc()");*/ - ret = S_ALLOC(bytestring_t); - ret->hash = HASH; - ret->length = CHUNKSIZE; - ret->remaining = ret->length; - ret->buffer = S_ALLOC_N(char, ret->length + 1 ); - ret->buffer[0] = 0; - ret->printed = 0; - return ret; -} -void bytestring_append(bytestring_t *str, char code, - char *start, char *finish) -{ - long grow; - long length = 2; /* CODE + LF */ - char *curr; - assert(str && HASH == str->hash); - /*TRACE0("bytestring_append()");*/ - if(start) { - if(!finish) - finish = start + strlen(start); - length += (finish-start); - } - if(length > str->remaining) { - grow = (length - str->remaining) + CHUNKSIZE; - str->remaining += grow; - str->length += grow; - S_REALLOC_N( str->buffer, char, str->length + 1 ); - assert(str->buffer); - } - curr = str->buffer + (str->length - str->remaining); - *curr = code; - curr += 1; - if(start) - while(start < finish) - *curr ++ = *start ++; - *curr = '\n'; - curr += 1; - *curr = 0; - str->remaining = str->remaining - length; - assert( (str->buffer + str->length) - str->remaining ); -} -void bytestring_extend(bytestring_t *str, bytestring_t *ext) -{ - char *from; - char *curr; - char *stop; - long grow; - long length; - assert(str && HASH == str->hash); - assert(ext && HASH == ext->hash); - if(ext->printed) { - assert(ext->buffer[0] ==YAMLBYTE_ANCHOR); - curr = ext->buffer; - while( '\n' != *curr) - curr++; - bytestring_append(str, YAMLBYTE_ALIAS, ext->buffer + 1, curr); - } else { - ext->printed = 1; - length = (ext->length - ext->remaining); - if(length > str->remaining) { - grow = (length - str->remaining) + CHUNKSIZE; - str->remaining += grow; - str->length += grow; - S_REALLOC_N( str->buffer, char, str->length + 1 ); - } - curr = str->buffer + (str->length - str->remaining); - from = ext->buffer; - stop = ext->buffer + length; - while( from < stop ) - *curr ++ = *from ++; - *curr = 0; - str->remaining = str->remaining - length; - assert( (str->buffer + str->length) - str->remaining ); - } -} - -/* convert SyckNode into yamlbyte_buffer_t objects */ -SYMID -syck_yaml2byte_handler(p, n) - SyckParser *p; - SyckNode *n; -{ - SYMID oid; - long i; - char ch; - char nextcode; - char *start; - char *current; - char *finish; - bytestring_t *val = NULL; - bytestring_t *sav = NULL; - void *data; - /*TRACE0("syck_yaml2byte_handler()");*/ - val = bytestring_alloc(); - if(n->anchor) bytestring_append(val,YAMLBYTE_ANCHOR, n->anchor, NULL); - if ( n->type_id ) - { - if ( p->taguri_expansion ) - { - bytestring_append(val,YAMLBYTE_TRANSFER, n->type_id, NULL); - } - else - { - char *type_tag = S_ALLOC_N( char, strlen( n->type_id ) + 1 ); - type_tag[0] = '\0'; - strcat( type_tag, "!" ); - strcat( type_tag, n->type_id ); - bytestring_append( val, YAMLBYTE_TRANSFER, type_tag, NULL); - S_FREE(type_tag); - } - } - switch (n->kind) - { - case syck_str_kind: - nextcode = YAMLBYTE_SCALAR; - start = n->data.str->ptr; - finish = start + n->data.str->len - 1; - current = start; - /*TRACE2("SCALAR: %s %d", start, n->data.str->len); */ - while(1) { - ch = *current; - if('\n' == ch || 0 == ch || current > finish) { - if(current >= start) { - bytestring_append(val, nextcode, start, current); - nextcode = YAMLBYTE_CONTINUE; - } - start = current + 1; - if(current > finish) - { - break; - } - else if('\n' == ch ) - { - bytestring_append(val,YAMLBYTE_NEWLINE,NULL,NULL); - } - else if(0 == ch) - { - bytestring_append(val,YAMLBYTE_NULLCHAR,NULL,NULL); - } - else - { - assert("oops"); - } - } - current += 1; - } - break; - case syck_seq_kind: - bytestring_append(val,YAMLBYTE_SEQUENCE,NULL,NULL); - for ( i = 0; i < n->data.list->idx; i++ ) - { - oid = syck_seq_read( n, i ); - if (syck_lookup_sym( p, oid, &data )) sav = data; - bytestring_extend(val, sav); - } - bytestring_append(val,YAMLBYTE_END_BRANCH,NULL,NULL); - break; - case syck_map_kind: - bytestring_append(val,YAMLBYTE_MAPPING,NULL,NULL); - for ( i = 0; i < n->data.pairs->idx; i++ ) - { - oid = syck_map_read( n, map_key, i ); - if (syck_lookup_sym( p, oid, &data )) sav = data; - bytestring_extend(val, sav); - oid = syck_map_read( n, map_value, i ); - if (syck_lookup_sym( p, oid, &data )) sav = data; - bytestring_extend(val, sav); - } - bytestring_append(val,YAMLBYTE_END_BRANCH,NULL,NULL); - break; - } - oid = syck_add_sym( p, (char *) val ); - /*TRACE1("Saving: %s", val->buffer );*/ - return oid; -} - -char * -syck_yaml2byte(char *yamlstr) -{ - SYMID oid; - char *ret; - bytestring_t *sav; - void *data; - - SyckParser *parser = syck_new_parser(); - syck_parser_str_auto( parser, yamlstr, NULL ); - syck_parser_handler( parser, syck_yaml2byte_handler ); - syck_parser_error_handler( parser, NULL ); - syck_parser_implicit_typing( parser, 1 ); - syck_parser_taguri_expansion( parser, 1 ); - oid = syck_parse( parser ); - - if ( syck_lookup_sym( parser, oid, &data ) ) { - sav = data; - ret = S_ALLOC_N( char, strlen( sav->buffer ) + 3 ); - ret[0] = '\0'; - strcat( ret, "D\n" ); - strcat( ret, sav->buffer ); - } - else - { - ret = NULL; - } - - syck_free_parser( parser ); - return ret; -} - -#ifdef TEST_YBEXT -#include -int main() { - char *yaml = "test: 1\nand: \"with new\\nline\\n\"\nalso: &3 three\nmore: *3"; - printf("--- # YAML \n"); - printf(yaml); - printf("\n...\n"); - printf(syck_yaml2byte(yaml)); - return 0; -} -#endif - diff --git a/ext/syck/yamlbyte.h b/ext/syck/yamlbyte.h deleted file mode 100644 index 16ca3d70de..0000000000 --- a/ext/syck/yamlbyte.h +++ /dev/null @@ -1,171 +0,0 @@ -/* yamlbyte.h - * - * The YAML bytecode "C" interface header file. See the YAML bytecode - * reference for bytecode sequence rules and for the meaning of each - * bytecode. - */ - -#ifndef YAMLBYTE_H -#define YAMLBYTE_H -#include - -/* define what a character is */ -typedef unsigned char yamlbyte_utf8_t; -typedef unsigned short yamlbyte_utf16_t; -#ifdef YAMLBYTE_UTF8 - #ifdef YAMLBYTE_UTF16 - #error Must only define YAMLBYTE_UTF8 or YAMLBYTE_UTF16 - #endif - typedef yamlbyte_utf8_t yamlbyte_char_t; -#else - #ifdef YAMLBYTE_UTF16 - typedef yamlbyte_utf16_t yamlbyte_char_t; - #else - #error Must define YAMLBYTE_UTF8 or YAMLBYTE_UTF16 - #endif -#endif - -/* specify list of bytecodes */ -#define YAMLBYTE_FINISH ((yamlbyte_char_t) 0) -#define YAMLBYTE_DOCUMENT ((yamlbyte_char_t)'D') -#define YAMLBYTE_DIRECTIVE ((yamlbyte_char_t)'V') -#define YAMLBYTE_PAUSE ((yamlbyte_char_t)'P') -#define YAMLBYTE_MAPPING ((yamlbyte_char_t)'M') -#define YAMLBYTE_SEQUENCE ((yamlbyte_char_t)'Q') -#define YAMLBYTE_END_BRANCH ((yamlbyte_char_t)'E') -#define YAMLBYTE_SCALAR ((yamlbyte_char_t)'S') -#define YAMLBYTE_CONTINUE ((yamlbyte_char_t)'C') -#define YAMLBYTE_NEWLINE ((yamlbyte_char_t)'N') -#define YAMLBYTE_NULLCHAR ((yamlbyte_char_t)'Z') -#define YAMLBYTE_ANCHOR ((yamlbyte_char_t)'A') -#define YAMLBYTE_ALIAS ((yamlbyte_char_t)'R') -#define YAMLBYTE_TRANSFER ((yamlbyte_char_t)'T') -/* formatting bytecodes */ -#define YAMLBYTE_COMMENT ((yamlbyte_char_t)'c') -#define YAMLBYTE_INDENT ((yamlbyte_char_t)'i') -#define YAMLBYTE_STYLE ((yamlbyte_char_t)'s') -/* other bytecodes */ -#define YAMLBYTE_LINE_NUMBER ((yamlbyte_char_t)'#') -#define YAMLBYTE_WHOLE_SCALAR ((yamlbyte_char_t)'<') -#define YAMLBYTE_NOTICE ((yamlbyte_char_t)'!') -#define YAMLBYTE_SPAN ((yamlbyte_char_t)')') -#define YAMLBYTE_ALLOC ((yamlbyte_char_t)'@') - -/* second level style bytecodes, ie "s>" */ -#define YAMLBYTE_FLOW ((yamlbyte_char_t)'>') -#define YAMLBYTE_LITERAL ((yamlbyte_char_t)'|') -#define YAMLBYTE_BLOCK ((yamlbyte_char_t)'b') -#define YAMLBYTE_PLAIN ((yamlbyte_char_t)'p') -#define YAMLBYTE_INLINE_MAPPING ((yamlbyte_char_t)'{') -#define YAMLBYTE_INLINE_SEQUENCE ((yamlbyte_char_t)'[') -#define YAMLBYTE_SINGLE_QUOTED ((yamlbyte_char_t)39) -#define YAMLBYTE_DOUBLE_QUOTED ((yamlbyte_char_t)'"') - -/* - * The "C" API has two variants, one based on instructions, - * with events delivered via pointers; and the other one - * is character based where one or more instructions are - * serialized into a buffer. - * - * Note: In the instruction based API, WHOLE_SCALAR does - * not have the ' 'b' }, 'foo'] - end - - def teardown - YAML::ENGINE.yamler = @current_engine - end - - def test_to_yaml - assert_equal @list, YAML.load(@list.to_yaml) - end - - def test_dump - assert_equal @list, YAML.load(YAML.dump(@list)) - end - end -end diff --git a/test/syck/test_boolean.rb b/test/syck/test_boolean.rb deleted file mode 100644 index 615b0b0c8f..0000000000 --- a/test/syck/test_boolean.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - ### - # Test booleans from YAML spec: - # http://yaml.org/type/bool.html - class TestBoolean < Test::Unit::TestCase - %w{ yes Yes YES true True TRUE on On ON }.each do |truth| - define_method(:"test_#{truth}") do - assert_equal true, YAML.load("--- #{truth}") - end - end - - %w{ no No NO false False FALSE off Off OFF }.each do |truth| - define_method(:"test_#{truth}") do - assert_equal false, YAML.load("--- #{truth}") - end - end - - ### - # YAML spec says "y" and "Y" may be used as true, but Syck treats them - # as literal strings - def test_y - assert_equal "y", YAML.load("--- y") - assert_equal "Y", YAML.load("--- Y") - end - - ### - # YAML spec says "n" and "N" may be used as false, but Syck treats them - # as literal strings - def test_n - assert_equal "n", YAML.load("--- n") - assert_equal "N", YAML.load("--- N") - end - end -end diff --git a/test/syck/test_class.rb b/test/syck/test_class.rb deleted file mode 100644 index 983cf4192c..0000000000 --- a/test/syck/test_class.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - class TestClass < Test::Unit::TestCase - def setup - @engine = YAML::ENGINE.yamler - YAML::ENGINE.yamler = 'syck' - end - - def teardown - YAML::ENGINE.yamler = @engine - end - - def test_to_yaml - assert_raises(::TypeError) do - TestClass.to_yaml - end - end - - def test_dump - assert_raises(::TypeError) do - YAML.dump TestClass - end - end - end -end diff --git a/test/syck/test_engine_manager.rb b/test/syck/test_engine_manager.rb deleted file mode 100644 index 529fc49d38..0000000000 --- a/test/syck/test_engine_manager.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'test/unit' -require 'yaml' - diff --git a/test/syck/test_exception.rb b/test/syck/test_exception.rb deleted file mode 100644 index b8ac14e293..0000000000 --- a/test/syck/test_exception.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - class TestException < Test::Unit::TestCase - class Wups < Exception - attr_reader :foo, :bar - def initialize *args - super - @foo = 1 - @bar = 2 - end - end - - def setup - @wups = Wups.new('test_message') - end - - def test_to_yaml - w = YAML.load(@wups.to_yaml) - assert_equal @wups, w - assert_equal 1, w.foo - assert_equal 2, w.bar - end - - def test_dump - w = YAML.load(@wups.to_yaml) - assert_equal @wups, w - assert_equal 1, w.foo - assert_equal 2, w.bar - end - - def test_to_yaml_properties - class << @wups - def to_yaml_properties - [:@foo] - end - end - - w = YAML.load(YAML.dump(@wups)) - assert_equal @wups, w - assert_equal 1, w.foo - assert_nil w.bar - end - end -end diff --git a/test/syck/test_hash.rb b/test/syck/test_hash.rb deleted file mode 100644 index 0690f77ec3..0000000000 --- a/test/syck/test_hash.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - class TestHash < Test::Unit::TestCase - def setup - @hash = { :a => 'b' } - end - - def test_to_yaml - assert_equal @hash, YAML.load(@hash.to_yaml) - end - - def test_dump - assert_equal @hash, YAML.load(YAML.dump(@hash)) - end - - def test_ref_append - hash = YAML.load(<<-eoyml) ---- -foo: &foo - hello: world -bar: - <<: *foo -eoyml - assert_equal({"foo"=>{"hello"=>"world"}, "bar"=>{"hello"=>"world"}}, hash) - end - end -end diff --git a/test/syck/test_null.rb b/test/syck/test_null.rb deleted file mode 100644 index 8bd710fe5e..0000000000 --- a/test/syck/test_null.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - ### - # Test null from YAML spec: - # http://yaml.org/type/null.html - class TestNull < Test::Unit::TestCase - def test_null_list - assert_equal [nil] * 5, YAML.load(<<-eoyml) ---- -- ~ -- null -- -- Null -- NULL - eoyml - end - end -end diff --git a/test/syck/test_omap.rb b/test/syck/test_omap.rb deleted file mode 100644 index 8a2d7075b6..0000000000 --- a/test/syck/test_omap.rb +++ /dev/null @@ -1,56 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - class TestOmap < Test::Unit::TestCase - def test_keys - map = YAML::Omap.new - map['foo'] = 'bar' - assert_equal 'bar', map['foo'] - end - - def test_order - map = YAML::Omap.new - map['a'] = 'b' - map['b'] = 'c' - assert_equal [%w{a b}, %w{b c}], map.to_a - end - - def test_square - list = [["a", "b"], ["b", "c"]] - map = YAML::Omap[*list.flatten] - assert_equal list, map.to_a - assert_equal 'b', map['a'] - assert_equal 'c', map['b'] - end - - def test_to_yaml - map = YAML::Omap['a', 'b', 'c', 'd'] - yaml = map.to_yaml - assert_match('!omap', yaml) - assert_match('- a: b', yaml) - assert_match('- c: d', yaml) - end - - def test_round_trip - list = [["a", "b"], ["b", "c"]] - map = YAML::Omap[*list.flatten] - loaded = YAML.load(YAML.dump(map)) - - assert_equal map, loaded - assert_equal list, loaded.to_a - end - - ### - # FIXME: Syck should also support !!omap as shorthand - def test_load - list = [["a", "b"], ["c", "d"]] - map = YAML.load(<<-eoyml) ---- !omap -- a: b -- c: d - eoyml - assert_equal list, map.to_a - end - end -end diff --git a/test/syck/test_set.rb b/test/syck/test_set.rb deleted file mode 100644 index d58f92e53f..0000000000 --- a/test/syck/test_set.rb +++ /dev/null @@ -1,31 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - class TestSet < Test::Unit::TestCase - def setup - @set = YAML::Set.new - @set['foo'] = 'bar' - @set['bar'] = 'baz' - end - - def test_to_yaml - assert_match(/!set/, @set.to_yaml) - end - - def test_roundtrip - assert_equal(@set, YAML.load(YAML.dump(@set))) - end - - ### - # FIXME: Syck should also support !!set as shorthand - def test_load_from_yaml - loaded = YAML.load(<<-eoyml) ---- !set -foo: bar -bar: baz - eoyml - assert_equal(@set, loaded) - end - end -end diff --git a/test/syck/test_string.rb b/test/syck/test_string.rb deleted file mode 100644 index adea4c51ce..0000000000 --- a/test/syck/test_string.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - class TestString < Test::Unit::TestCase - def test_binary_string_null - string = "\x00" - yml = YAML.dump string - assert_match(/binary/, yml) - assert_equal string, YAML.load(yml) - end - - def test_binary_string - string = binary_string - yml = YAML.dump string - assert_match(/binary/, yml) - assert_equal string, YAML.load(yml) - end - - def test_non_binary_string - string = binary_string(0.29) - yml = YAML.dump string - assert_not_match(/binary/, yml) - assert_equal string, YAML.load(yml) - end - - def test_string_with_ivars - food = "is delicious" - ivar = "on rock and roll" - food.instance_variable_set(:@we_built_this_city, ivar) - - str = YAML.load YAML.dump food - assert_equal ivar, food.instance_variable_get(:@we_built_this_city) - end - - def binary_string percentage = 0.31, length = 100 - string = '' - (percentage * length).to_i.times do |i| - string << "\b" - end - string << 'a' * (length - string.length) - string - end - end -end diff --git a/test/syck/test_struct.rb b/test/syck/test_struct.rb deleted file mode 100644 index 8d4c538d98..0000000000 --- a/test/syck/test_struct.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'test/unit' -require 'yaml' - -class StructWithIvar < Struct.new(:foo) - attr_reader :bar - def initialize *args - super - @bar = 'hello' - end -end - -module Syck - class TestStruct < MiniTest::Unit::TestCase - def setup - @current_engine = YAML::ENGINE.yamler - YAML::ENGINE.yamler = 'syck' - end - - def teardown - YAML::ENGINE.yamler = @current_engine - end - - def test_roundtrip - thing = StructWithIvar.new('bar') - struct = YAML.load(YAML.dump(thing)) - - assert_equal 'hello', struct.bar - assert_equal 'bar', struct.foo - end - - def test_load - obj = YAML.load(<<-eoyml) ---- !ruby/struct:StructWithIvar -foo: bar -@bar: hello -eoyml - - assert_equal 'hello', obj.bar - assert_equal 'bar', obj.foo - end - end -end diff --git a/test/syck/test_symbol.rb b/test/syck/test_symbol.rb deleted file mode 100644 index 39ffa8bb03..0000000000 --- a/test/syck/test_symbol.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - class TestSymbol < Test::Unit::TestCase - def test_to_yaml - assert_equal :a, YAML.load(:a.to_yaml) - end - - def test_dump - assert_equal :a, YAML.load(YAML.dump(:a)) - end - - def test_stringy - assert_equal :"1", YAML.load(YAML.dump(:"1")) - end - - def test_load_quoted - assert_equal :"1", YAML.load("--- :'1'\n") - end - end -end diff --git a/test/syck/test_time.rb b/test/syck/test_time.rb deleted file mode 100644 index e3d27121b0..0000000000 --- a/test/syck/test_time.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - class TestString < Test::Unit::TestCase - def test_usec_long - bug4571 = '[ruby-core:35713]' - assert_equal(34, YAML.load("2011-03-22t23:32:11.0000342222+01:00").usec, bug4571) - end - - def test_usec_very_long - t = "2011-03-22t23:32:11.0000342"+"0"*1000+"1+01:00" - assert_equal(34, YAML.load(t).usec) - end - - def test_usec_full - assert_equal(342222, YAML.load("2011-03-22t23:32:11.342222+01:00").usec) - end - - def test_usec_short - assert_equal(330000, YAML.load("2011-03-22t23:32:11.33+01:00").usec) - end - end -end diff --git a/test/syck/test_yaml.rb b/test/syck/test_yaml.rb deleted file mode 100644 index 132bc926c8..0000000000 --- a/test/syck/test_yaml.rb +++ /dev/null @@ -1,1414 +0,0 @@ -# -*- mode: ruby; ruby-indent-level: 4; tab-width: 4; indent-tabs-mode: t -*- -# vim:sw=4:ts=4 -# $Id$ -# -require 'test/unit' -require 'syck' -require 'yaml' -require 'syck/ypath' - -# [ruby-core:01946] -module YAML_Tests - StructTest = Struct::new( :c ) -end - -module Syck -class YAML_Unit_Tests < Test::Unit::TestCase - def setup - @current_engine = YAML::ENGINE.yamler - YAML::ENGINE.yamler = 'syck' - end - - def teardown - YAML::ENGINE.yamler = @current_engine - end - - # [ruby-core:34969] - def test_regexp_with_n - assert_cycle(Regexp.new('',0,'n')) - end - - # - # Convert between YAML and the object to verify correct parsing and - # emitting - # - def assert_to_yaml( obj, yaml, msg = nil ) - assert_equal( obj, YAML::load( yaml ), msg ) - assert_equal( obj, YAML::parse( yaml ).transform, msg ) - assert_equal( obj, YAML::load( obj.to_yaml ), msg ) - assert_equal( obj, YAML::parse( obj.to_yaml ).transform, msg ) - assert_equal( obj, YAML::load( - obj.to_yaml( :UseVersion => true, :UseHeader => true, :SortKeys => true ) - ), msg ) - end - - # - # Test parser only - # - def assert_parse_only( obj, yaml, msg = nil ) - assert_equal( obj, YAML::load( yaml ), msg ) - assert_equal( obj, YAML::parse( yaml ).transform, msg ) - end - - def assert_cycle( obj, msg = nil ) - assert_equal( obj, YAML::load( obj.to_yaml ), msg ) - end - - def assert_path_segments( path, segments, msg = nil ) - YAML::YPath.each_path( path ) { |choice| - assert_equal( choice.segments, segments.shift, msg ) - } - assert_equal( segments.length, 0, "Some segments leftover: #{ segments.inspect }" ) - end - - # - # Make a time with the time zone - # - def mktime( year, mon, day, hour, min, sec, usec, zone = "Z" ) - usec = Rational(usec.to_s) * 1000000 - val = Time::utc( year.to_i, mon.to_i, day.to_i, hour.to_i, min.to_i, sec.to_i, usec ) - if zone != "Z" - hour = zone[0,3].to_i * 3600 - min = zone[3,2].to_i * 60 - ofs = (hour + min) - val = Time.at( val.tv_sec - ofs, val.tv_nsec / 1000.0 ) - end - return val - end - - # - # Tests modified from 00basic.t in YAML.pm - # - def test_basic_map - # Simple map - assert_parse_only( - { 'one' => 'foo', 'three' => 'baz', 'two' => 'bar' }, < 'simple string', 2 => 42, 3 => '1 Single Quoted String', - 4 => 'YAML\'s Double "Quoted" String', 5 => "A block\n with several\n lines.\n", - 6 => "A \"chomped\" block", 7 => "A folded\n string\n", 8 => ": started string" }, - < - A - folded - string -8: ": started string" -EOY - ) - end - - # - # Test the specification examples - # - Many examples have been changes because of whitespace problems that - # caused the two to be inequivalent, or keys to be sorted wrong - # - - def test_spec_simple_implicit_sequence - # Simple implicit sequence - assert_to_yaml( - [ 'Mark McGwire', 'Sammy Sosa', 'Ken Griffey' ], < 65, 'avg' => 0.278, 'rbi' => 147 }, < - [ 'Boston Red Sox', 'Detroit Tigers', 'New York Yankees' ], - 'national' => - [ 'New York Mets', 'Chicago Cubs', 'Atlanta Braves' ] }, < 'Mark McGwire', 'hr' => 65, 'avg' => 0.278}, - {'name' => 'Sammy Sosa', 'hr' => 63, 'avg' => 0.288} - ], < - { 'hr' => 65, 'avg' => 0.278 }, - 'Sammy Sosa' => - { 'hr' => 63, 'avg' => 0.288 } - }, < [ 'Mark McGwire', 'Sammy Sosa' ], - 'rbi' => [ 'Sammy Sosa', 'Ken Griffey' ] }, < - [ 'Mark McGwire', 'Sammy Sosa' ], - 'rbi' => - [ 'Sammy Sosa', 'Ken Griffey' ] }, <"EDI", "departure"=>"LAX", "fareref"=>"DOGMA", "currency"=>"GBP"}, {"arrival"=>"MEL", "departure"=>"SYD", "fareref"=>"MADF", "currency"=>"AUD"}, {"arrival"=>"MCO", "departure"=>"JFK", "fareref"=>"DFSF", "currency"=>"USD"}], <["fareref", "currency", "departure", "arrival"], "FARES"=>[{"arrival"=>"EDI", "departure"=>"LAX", "fareref"=>"DOGMA", "currency"=>"GBP"}, {"arrival"=>"MEL", "departure"=>"SYD", "fareref"=>"MADF", "currency"=>"AUD"}, {"arrival"=>"MCO", "departure"=>"JFK", "fareref"=>"DFSF", "currency"=>"USD"}]}, < [ Date.new( 2001, 7, 23 ) ], - [ 'New York Yankees', 'Atlanta Braves' ] => [ Date.new( 2001, 7, 2 ), Date.new( 2001, 8, 12 ), Date.new( 2001, 8, 14 ) ] }, < - [ Date.new( 2001, 7, 2 ), Date.new( 2001, 8, 12 ), - Date.new( 2001, 8, 14 ) ], - [ 'Detroit Tigers', 'Chicago Cubs' ] => - [ Date.new( 2001, 7, 23 ) ] - }, < 34843, 'date' => Date.new( 2001, 1, 23 ), - 'bill-to' => 'Chris Dumars', 'product' => - [ { 'item' => 'Super Hoop', 'quantity' => 1 }, - { 'item' => 'Basketball', 'quantity' => 4 }, - { 'item' => 'Big Shoes', 'quantity' => 1 } ] }, < nil }, - [ { 'five' => [ 'six' ] } ], - [ 'seven' ] - ], - [ 'eight', 'nine' ] -], < - Mark McGwire\'s - year was crippled - by a knee injury. -EOY - ) - end - - def test_spec_preserve_indent - # Preserve indented spaces - assert_parse_only( - "Sammy Sosa completed another fine season with great stats.\n\n 63 Home Runs\n 0.288 Batting Average\n\nWhat a year!\n", < - Sammy Sosa completed another - fine season with great stats. - - 63 Home Runs - 0.288 Batting Average - - What a year! -EOY - ) - end - - def test_spec_indentation_determines_scope - assert_parse_only( - { 'name' => 'Mark McGwire', 'accomplishment' => "Mark set a major league home run record in 1998.\n", - 'stats' => "65 Home Runs\n0.278 Batting Average\n" }, < - Mark set a major league - home run record in 1998. -stats: | - 65 Home Runs - 0.278 Batting Average -EOY - ) - end - - # - # Reports from N.Easterly & J.Trupiano : Tests with patch from daz - # [ruby-core:23006] [Bug #1311] http://bugs.ruby-lang.org/issues/show/1311 - # - def test_scan_scalar_nl - bug1311 = '[ruby-core:23006]' - assert_cycle(< 'This unquoted scalar spans many lines.', - 'quoted' => "So does this quoted scalar.\n" }, < 12345, 'decimal' => 12345, 'octal' => '014'.oct, 'hexadecimal' => '0xC'.hex }, < 685230, 'decimal' => 685230, 'octal' => 02472256, 'hexadecimal' => 0x0A74AE, 'sexagesimal' => 685230 }, < 1230.15, 'exponential' => 1230.15, 'fixed' => 1230.15, - 'negative infinity' => -1.0/0.0 }, < nil, true => true, false => false, 'string' => '12345' }, < 'Chris', 'family' => 'Dumars', 'address' => - { 'lines' => "458 Walkman Dr.\nSuite #292\n", 'city' => 'Royal Oak', - 'state' => 'MI', 'postal' => 48046 } } - assert_parse_only( - { 'invoice' => 34843, 'date' => Date.new( 2001, 1, 23 ), - 'bill-to' => id001, 'ship-to' => id001, 'product' => - [ { 'sku' => 'BL394D', 'quantity' => 4, - 'description' => 'Basketball', 'price' => 450.00 }, - { 'sku' => 'BL4438H', 'quantity' => 1, - 'description' => 'Super Hoop', 'price' => 2392.00 } ], - 'tax' => 251.42, 'total' => 4443.52, - 'comments' => "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.\n" }, < - Late afternoon is best. - Backup contact is Nancy - Billsmer @ 338-4338. -EOY - ) - end - - def test_spec_log_file - doc_ct = 0 - YAML::load_documents( < - This is an error message - for the log file ---- -Time: 2001-11-23 15:02:31 -05:00 -User: ed -Warning: > - A slightly different error - message. ---- -Date: 2001-11-23 15:03:17 -05:00 -User: ed -Fatal: > - Unknown variable "bar" -Stack: - - file: TopClass.py - line: 23 - code: | - x = MoreObject("345\\n") - - file: MoreClass.py - line: 58 - code: |- - foo = bar -EOY - ) { |doc| - case doc_ct - when 0 - assert_equal( doc, { 'Time' => mktime( 2001, 11, 23, 15, 01, 42, 00, "-05:00" ), - 'User' => 'ed', 'Warning' => "This is an error message for the log file\n" } ) - when 1 - assert_equal( doc, { 'Time' => mktime( 2001, 11, 23, 15, 02, 31, 00, "-05:00" ), - 'User' => 'ed', 'Warning' => "A slightly different error message.\n" } ) - when 2 - assert_equal( doc, { 'Date' => mktime( 2001, 11, 23, 15, 03, 17, 00, "-05:00" ), - 'User' => 'ed', 'Fatal' => "Unknown variable \"bar\"\n", - 'Stack' => [ - { 'file' => 'TopClass.py', 'line' => 23, 'code' => "x = MoreObject(\"345\\n\")\n" }, - { 'file' => 'MoreClass.py', 'line' => 58, 'code' => "foo = bar" } ] } ) - end - doc_ct += 1 - } - assert_equal( doc_ct, 3 ) - end - - def test_spec_root_fold - y = YAML::load( < -This YAML stream contains a single text value. -The next stream is a log file - a sequence of -log entries. Adding an entry to the log is a -simple matter of appending it at the end. -EOY - ) - assert_equal( y, "This YAML stream contains a single text value. The next stream is a log file - a sequence of log entries. Adding an entry to the log is a simple matter of appending it at the end.\n" ) - end - - def test_spec_root_mapping - y = YAML::load( < 34843, 'date' => Date.new( 2001, 1, 23 ), 'total' => 4443.52 } ) - end - - def test_spec_oneline_docs - doc_ct = 0 - YAML::load_documents( < { "customers"=> [ { "given"=>"Chris", "type"=>"domain customer", "family"=>"Dumars" } ], "type"=>"domain invoice" } }, <"contains three lines of text.\nThe third one starts with a\n# character. This isn't a comment.\n"}, < 12, 'also int' => 12, 'string' => '12' }, < 8, 'color' => 'black' } ) - when 1 - assert_equal( doc['bearing'].type_id, 'x-private:ball' ) - assert_equal( doc['bearing'].transform.value, { 'material' => 'steel' } ) - end - doc_ct += 1 - } - assert_equal( doc_ct, 2 ) - end - - def test_spec_url_escaping - YAML.add_domain_type( "domain.tld,2002", "type0" ) { |type, val| - "ONE: #{val}" - } - YAML.add_domain_type( "domain.tld,2002", "type%30" ) { |type, val| - "TWO: #{val}" - } - assert_parse_only( - { 'same' => [ 'ONE: value', 'ONE: value' ], 'different' => [ 'TWO: value' ] }, < 'This scalar has an anchor.', 'override' => a001, 'alias' => a001 }, < - The alias node below is a - repeated use of this value. -alias : *A001 -EOY - ) - end - - def test_spec_explicit_families - YAML.add_domain_type( "somewhere.com,2002", 'type' ) { |type, val| - "SOMEWHERE: #{val}" - } - assert_parse_only( - { 'not-date' => '2002-04-28', 'picture' => "GIF89a\f\000\f\000\204\000\000\377\377\367\365\365\356\351\351\345fff\000\000\000\347\347\347^^^\363\363\355\216\216\216\340\340\340\237\237\237\223\223\223\247\247\247\236\236\236i^\020' \202\n\001\000;", 'hmm' => "SOMEWHERE: family above is short for\nhttp://somewhere.com/type\n" }, <7, "center"=>{"x"=>73, "y"=>129}, "TYPE"=>"Shape: graph/circle"}, {"finish"=>{"x"=>89, "y"=>102}, "TYPE"=>"Shape: graph/line", "start"=>{"x"=>73, "y"=>129}}, {"TYPE"=>"Shape: graph/text", "value"=>"Pretty vector drawing.", "start"=>{"x"=>73, "y"=>129}, "color"=>16772795}, "Shape Container"]], < [], 'in-line' => [ 'one', 'two', 'three', 'four', 'five' ], - 'nested' => [ 'First item in top sequence', [ 'Subordinate sequence entry' ], - "A multi-line sequence entry\n", 'Sixth item in top sequence' ] }, < - A multi-line - sequence entry - - Sixth item in top sequence -EOY - ) - end - - def test_spec_builtin_map - # Assortment of mappings - assert_parse_only( - { 'empty' => {}, 'in-line' => { 'one' => 1, 'two' => 2 }, - 'spanning' => { 'one' => 1, 'two' => 2 }, - 'nested' => { 'first' => 'First entry', 'second' => - { 'key' => 'Subordinate mapping' }, 'third' => - [ 'Subordinate sequence', {}, 'Previous mapping is empty.', - { 'A key' => 'value pair in a sequence.', 'A second' => 'key:value pair.' }, - 'The previous entry is equal to the following one.', - { 'A key' => 'value pair in a sequence.', 'A second' => 'key:value pair.' } ], - 12.0 => 'This key is a float.', "?\n" => 'This key had to be protected.', - "\a" => 'This key had to be escaped.', - "This is a multi-line folded key\n" => "Whose value is also multi-line.\n", - [ 'This key', 'is a sequence' ] => [ 'With a sequence value.' ] } }, < - ? - : This key had to be protected. - "\\a" : This key had to be escaped. - ? > - This is a - multi-line - folded key - : > - Whose value is - also multi-line. - ? - - This key - - is a sequence - : - - With a sequence value. -# The following parses correctly, -# but Ruby 1.6.* fails the comparison! -# ? -# This: key -# is a: mapping -# : -# with a: mapping value. -EOY - ) - end - - def test_spec_builtin_literal_blocks - # Assortment of literal scalar blocks - assert_parse_only( - {"both are equal to"=>" This has no newline.", "is equal to"=>"The \\ ' \" characters may be\nfreely used. Leading white\n space is significant.\n\nLine breaks are significant.\nThus this value contains one\nempty line and ends with a\nsingle line break, but does\nnot start with one.\n", "also written as"=>" This has no newline.", "indented and chomped"=>" This has no newline.", "empty"=>"", "literal"=>"The \\ ' \" characters may be\nfreely used. Leading white\n space is significant.\n\nLine breaks are significant.\nThus this value contains one\nempty line and ends with a\nsingle line break, but does\nnot start with one.\n"}, < str1, 'same as "clipped" above' => str1, - 'stripped' => str2, 'same as "stripped" above' => str2, - 'kept' => str3, 'same as "kept" above' => str3 }, <"a single quote ' must be escaped.", "second"=>"! : \\ etc. can be used freely.", "is same as"=>"this contains six spaces\nand one line break", "empty"=>"", "span"=>"this contains six spaces\nand one line break"}, <"this contains four spaces", "third"=>"a \" or a \\ must be escaped.", "second"=>"! : etc. can be used freely.", "empty"=>"", "fourth"=>"this value ends with an LF.\n", "span"=>"this contains four spaces"}, < mktime( 2001, 12, 14, 21, 59, 43, ".10", "-05:00" ), - "canonical" => mktime( 2001, 12, 15, 2, 59, 43, ".10" ), - "date (noon UTC)" => Date.new( 2002, 12, 14), - "valid iso8601" => mktime( 2001, 12, 14, 21, 59, 43, ".10", "-05:00" ) }, < arrow_gif, 'base64' => arrow_gif, - 'description' => "The binary value above is a tiny arrow encoded as a gif image.\n" }, < /George McFly/i }, < 2, :UseVersion => 0 ) - y.add( - { 'hi' => 'hello', 'map' => - { 'good' => 'two' }, - 'time' => Time.now, - 'try' => /^po(.*)$/, - 'bye' => 'goodbye' - } - ) - y.add( { 'po' => 'nil', 'oper' => 90 } ) - y.add( { 'hi' => 'wow!', 'bye' => 'wow!' } ) - y.add( { [ 'Red Socks', 'Boston' ] => [ 'One', 'Two', 'Three' ] } ) - y.add( [ true, false, false ] ) - end - - # - # Test YPath choices parsing - # - def test_ypath_parsing - assert_path_segments( "/*/((one|three)/name|place)|//place", - [ ["*", "one", "name"], - ["*", "three", "name"], - ["*", "place"], - ["/", "place"] ] - ) - end - - # - # Tests from Tanaka Akira on [ruby-core] - # - def test_akira - - # Commas in plain scalars [ruby-core:1066] - assert_to_yaml( - {"A"=>"A,","B"=>"B"}, <2, "2"=>3}, <"b"}] * 2, <"b", "c"=>"d"} } - # YAML::load( a.to_yaml ) - - end - - # - # Test Time.now cycle - # - def test_time_now_cycle - # - # From Minero Aoki [ruby-core:2305] - # - require 'yaml' - t = Time.now - t = Time.at(t.tv_sec, t.tv_usec) - 5.times do - assert_cycle(t) - end - end - - # - # Test Range cycle - # - def test_range_cycle - # - # From Minero Aoki [ruby-core:02306] - # - assert_cycle("a".."z") - - # - # From Nobu Nakada [ruby-core:02311] - # - assert_cycle(0..1) - assert_cycle(1.0e20 .. 2.0e20) - assert_cycle("0".."1") - assert_cycle(".."..."...") - assert_cycle(".rb"..".pl") - assert_cycle(".rb"...".pl") - assert_cycle('"'...".") - assert_cycle("'"...".") - end - - # - # Circular references - # - def test_circular_references - a = []; a[0] = a; a[1] = a - inspect_str = "[[...], [...]]" - assert_equal( inspect_str, YAML::load( a.to_yaml ).inspect ) - end - - # - # Test Symbol cycle - # - def test_symbol_cycle - # - # From Aaron Schrab [ruby-Bugs:2535] - # - assert_cycle(:"^foo") - end - - # - # Test Numeric cycle - # - class NumericTest < Numeric - def initialize(value) - @value = value - end - def ==(other) - @value == other.instance_eval{ @value } - end - end - def test_numeric_cycle - assert_cycle(1) # Fixnum - assert_cycle(111111111111111111111111111111111) # Bignum - assert_cycle(NumericTest.new(3)) # Subclass of Numeric - end - - # - # Test empty map/seq in map cycle - # - def test_empty_map_key - # - # empty seq as key - # - o = YAML.load({[]=>""}.to_yaml) - assert_equal(Hash, o.class) - assert_equal([[]], o.keys) - - # - # empty map as key - # - o = YAML.load({{}=>""}.to_yaml) - assert_equal(Hash, o.class) - assert_equal([{}], o.keys) - end - - # - # contributed by riley lynch [ruby-Bugs-8548] - # - def test_object_id_collision - omap = YAML::Omap.new - 1000.times { |i| omap["key_#{i}"] = { "value" => i } } - raise "id collision in ordered map" if omap.to_yaml =~ /id\d+/ - end - - def test_date_out_of_range - assert_nothing_raised{YAML::load('1900-01-01T00:00:00+00:00')} - end - - def test_normal_exit - YAML.load("2000-01-01 00:00:00.#{"0"*1000} +00:00\n") - # '[ruby-core:13735]' - end -end -end diff --git a/test/syck/test_yaml_properties.rb b/test/syck/test_yaml_properties.rb deleted file mode 100644 index 2df2e1cf76..0000000000 --- a/test/syck/test_yaml_properties.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'test/unit' -require 'yaml' - -module Syck - class TestYamlProperties < Test::Unit::TestCase - class Foo - attr_reader :a, :b, :c - def initialize - @a = 1 - @b = 2 - @c = 3 - end - - def to_yaml_properties - [:@a, :@b] - end - end - - def test_object_dump_yaml_properties - foo = YAML.load(YAML.dump(Foo.new)) - assert_equal 1, foo.a - assert_equal 2, foo.b - assert_nil foo.c - end - - class Bar < Struct.new(:foo, :bar) - attr_reader :baz - def initialize *args - super - @baz = 'hello' - end - - def to_yaml_properties - [] - end - end - - def test_struct_dump_yaml_properties - bar = YAML.load(YAML.dump(Bar.new('a', 'b'))) - assert_equal 'a', bar.foo - assert_equal 'b', bar.bar - assert_nil bar.baz - end - - def test_string_dump - string = "okonomiyaki" - class << string - def to_yaml_properties - [:@tastes] - end - end - - string.instance_variable_set(:@tastes, 'delicious') - v = YAML.load YAML.dump string - assert_equal 'delicious', v.instance_variable_get(:@tastes) - end - - def test_string_load - str = YAML.load("--- !str \nstr: okonomiyaki\n:@tastes: delicious\n") - assert_equal 'okonomiyaki', str - assert_equal 'delicious', str.instance_variable_get(:@tastes) - end - end -end diff --git a/test/syck/test_yamldbm.rb b/test/syck/test_yamldbm.rb deleted file mode 100644 index a736f20a33..0000000000 --- a/test/syck/test_yamldbm.rb +++ /dev/null @@ -1,194 +0,0 @@ -# -*- coding: UTF-8 -*- -begin - require 'test/unit' - require 'yaml/dbm' - require 'tmpdir' -rescue LoadError -end - -module Syck - ::Syck::DBM = ::YAML::DBM unless defined?(::Syck::DBM) - - class YAMLDBMTest < Test::Unit::TestCase - def setup - @engine, YAML::ENGINE.yamler = YAML::ENGINE.yamler, 'syck' - @dir = Dir.mktmpdir("rubytest-file") - File.chown(-1, Process.gid, @dir) - @yamldbm_file = make_tmp_filename("yamldbm") - @yamldbm = YAML::DBM.new(@yamldbm_file) - end - - def teardown - YAML::ENGINE.yamler = @engine - @yamldbm.clear - @yamldbm.close - FileUtils.remove_entry_secure @dir - end - - def make_tmp_filename(prefix) - @dir + "/" + prefix + File.basename(__FILE__) + ".#{$$}.test" - end - - def test_store - @yamldbm.store('a','b') - @yamldbm.store('c','d') - assert_equal 'b', @yamldbm['a'] - assert_equal 'd', @yamldbm['c'] - assert_nil @yamldbm['e'] - end - - def test_store_using_carret - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - assert_equal 'b', @yamldbm['a'] - assert_equal 'd', @yamldbm['c'] - assert_nil @yamldbm['e'] - end - - def test_to_a - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - assert_equal([['a','b'],['c','d']], @yamldbm.to_a.sort) - end - - def test_to_hash - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - assert_equal({'a'=>'b','c'=>'d'}, @yamldbm.to_hash) - end - - def test_has_value? - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - assert_equal true, @yamldbm.has_value?('b') - assert_equal true, @yamldbm.has_value?('d') - assert_equal false, @yamldbm.has_value?('f') - end - - # Note: - # YAML::DBM#index makes warning from internal of ::DBM#index. - # It says 'DBM#index is deprecated; use DBM#key', but DBM#key - # behaves not same as DBM#index. - # - # def test_index - # @yamldbm['a'] = 'b' - # @yamldbm['c'] = 'd' - # assert_equal 'a', @yamldbm.index('b') - # assert_equal 'c', @yamldbm.index('d') - # assert_nil @yamldbm.index('f') - # end - - def test_key - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - assert_equal 'a', @yamldbm.key('b') - assert_equal 'c', @yamldbm.key('d') - assert_nil @yamldbm.key('f') - end - - def test_fetch - assert_equal('bar', @yamldbm['foo']='bar') - assert_equal('bar', @yamldbm.fetch('foo')) - assert_nil @yamldbm.fetch('bar') - assert_equal('baz', @yamldbm.fetch('bar', 'baz')) - assert_equal('foobar', @yamldbm.fetch('bar') {|key| 'foo' + key }) - end - - def test_shift - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - assert_equal([['a','b'], ['c','d']], - [@yamldbm.shift, @yamldbm.shift].sort) - assert_nil @yamldbm.shift - end - - def test_invert - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - assert_equal({'b'=>'a','d'=>'c'}, @yamldbm.invert) - end - - def test_update - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - @yamldbm.update({'c'=>'d','e'=>'f'}) - assert_equal 'b', @yamldbm['a'] - assert_equal 'd', @yamldbm['c'] - assert_equal 'f', @yamldbm['e'] - end - - def test_replace - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - @yamldbm.replace({'c'=>'d','e'=>'f'}) - assert_nil @yamldbm['a'] - assert_equal 'd', @yamldbm['c'] - assert_equal 'f', @yamldbm['e'] - end - - def test_delete - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - assert_equal 'b', @yamldbm.delete('a') - assert_nil @yamldbm['a'] - assert_equal 'd', @yamldbm['c'] - assert_nil @yamldbm.delete('e') - end - - def test_delete_if - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - @yamldbm['e'] = 'f' - - @yamldbm.delete_if {|k,v| k == 'a'} - assert_nil @yamldbm['a'] - assert_equal 'd', @yamldbm['c'] - assert_equal 'f', @yamldbm['e'] - - @yamldbm.delete_if {|k,v| v == 'd'} - assert_nil @yamldbm['c'] - assert_equal 'f', @yamldbm['e'] - - @yamldbm.delete_if {|k,v| false } - assert_equal 'f', @yamldbm['e'] - end - - def test_reject - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - @yamldbm['e'] = 'f' - assert_equal({'c'=>'d','e'=>'f'}, @yamldbm.reject {|k,v| k == 'a'}) - assert_equal({'a'=>'b','e'=>'f'}, @yamldbm.reject {|k,v| v == 'd'}) - assert_equal({'a'=>'b','c'=>'d','e'=>'f'}, @yamldbm.reject {false}) - end - - def test_values - assert_equal [], @yamldbm.values - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - assert_equal ['b','d'], @yamldbm.values.sort - end - - def test_values_at - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - assert_equal ['b','d'], @yamldbm.values_at('a','c') - end - - def test_selsct - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - @yamldbm['e'] = 'f' - assert_equal(['b','d'], @yamldbm.select('a','c')) - end - - def test_selsct_with_block - @yamldbm['a'] = 'b' - @yamldbm['c'] = 'd' - @yamldbm['e'] = 'f' - assert_equal([['a','b']], @yamldbm.select {|k,v| k == 'a'}) - assert_equal([['c','d']], @yamldbm.select {|k,v| v == 'd'}) - assert_equal([], @yamldbm.select {false}) - end - end -end if defined?(YAML::DBM) diff --git a/test/syck/test_yamlstore.rb b/test/syck/test_yamlstore.rb deleted file mode 100644 index 932e28152a..0000000000 --- a/test/syck/test_yamlstore.rb +++ /dev/null @@ -1,87 +0,0 @@ -require 'test/unit' -require 'yaml/store' -require 'tmpdir' - -module Syck - Store = YAML::Store unless defined?(Store) - - class YAMLStoreTest < Test::Unit::TestCase - def setup - @engine, YAML::ENGINE.yamler = YAML::ENGINE.yamler, 'syck' - @dir = Dir.mktmpdir("rubytest-file") - File.chown(-1, Process.gid, @dir) - @yamlstore_file = make_tmp_filename("yamlstore") - @yamlstore = YAML::Store.new(@yamlstore_file) - end - - def teardown - YAML::ENGINE.yamler = @engine - FileUtils.remove_entry_secure @dir - end - - def make_tmp_filename(prefix) - @dir + "/" + prefix + File.basename(__FILE__) + ".#{$$}.test" - end - - def test_opening_new_file_in_readonly_mode_should_result_in_empty_values - @yamlstore.transaction(true) do - assert_nil @yamlstore[:foo] - assert_nil @yamlstore[:bar] - end - end - - def test_opening_new_file_in_readwrite_mode_should_result_in_empty_values - @yamlstore.transaction do - assert_nil @yamlstore[:foo] - assert_nil @yamlstore[:bar] - end - end - - def test_data_should_be_loaded_correctly_when_in_readonly_mode - @yamlstore.transaction do - @yamlstore[:foo] = "bar" - end - @yamlstore.transaction(true) do - assert_equal "bar", @yamlstore[:foo] - end - end - - def test_data_should_be_loaded_correctly_when_in_readwrite_mode - @yamlstore.transaction do - @yamlstore[:foo] = "bar" - end - @yamlstore.transaction do - assert_equal "bar", @yamlstore[:foo] - end - end - - def test_changes_after_commit_are_discarded - @yamlstore.transaction do - @yamlstore[:foo] = "bar" - @yamlstore.commit - @yamlstore[:foo] = "baz" - end - @yamlstore.transaction(true) do - assert_equal "bar", @yamlstore[:foo] - end - end - - def test_changes_are_not_written_on_abort - @yamlstore.transaction do - @yamlstore[:foo] = "bar" - @yamlstore.abort - end - @yamlstore.transaction(true) do - assert_nil @yamlstore[:foo] - end - end - - def test_writing_inside_readonly_transaction_raises_error - assert_raise(PStore::Error) do - @yamlstore.transaction(true) do - @yamlstore[:foo] = "bar" - end - end - end - end -end