| In: |
YAML::Syck::Parser.initialize( options )
/*
* YAML::Syck::Parser.initialize( options )
*/
static VALUE
syck_parser_initialize( self, options )
VALUE self, options;
{
rb_iv_set(self, "@options", options);
return self;
}
YAML::Syck::Parser.new
/*
* YAML::Syck::Parser.new
*/
VALUE
syck_parser_new(argc, argv, class)
int argc;
VALUE *argv;
VALUE class;
{
VALUE pobj, options, init_argv[1];
SyckParser *parser = syck_new_parser();
rb_scan_args(argc, argv, "01", &options);
pobj = Data_Wrap_Struct( class, syck_mark_parser, syck_free_parser, parser );
syck_parser_set_root_on_error( parser, Qnil );
if ( ! rb_obj_is_instance_of( options, rb_cHash ) )
{
options = rb_hash_new();
}
init_argv[0] = options;
rb_obj_call_init(pobj, 1, init_argv);
return pobj;
}
YAML::Syck::Parser.load( IO or String )
/*
* YAML::Syck::Parser.load( IO or String )
*/
VALUE
syck_parser_load(argc, argv, self)
int argc;
VALUE *argv;
VALUE self;
{
VALUE port, proc, model, input;
SyckParser *parser;
struct parser_xtra bonus;
volatile VALUE hash; /* protect from GC */
rb_scan_args(argc, argv, "11", &port, &proc);
Data_Get_Struct(self, SyckParser, parser);
input = rb_hash_aref( rb_iv_get( self, "@options" ), sym_input );
model = rb_hash_aref( rb_iv_get( self, "@options" ), sym_model );
syck_set_model( parser, input, model );
bonus.taint = syck_parser_assign_io(parser, port);
bonus.data = hash = rb_hash_new();
if ( NIL_P( proc ) ) bonus.proc = 0;
else bonus.proc = proc;
parser->bonus = (void *)&bonus;
return syck_parse( parser );
}
YAML::Syck::Parser.load_documents( IO or String ) { |doc| }
/*
* YAML::Syck::Parser.load_documents( IO or String ) { |doc| }
*/
VALUE
syck_parser_load_documents(argc, argv, self)
int argc;
VALUE *argv;
VALUE self;
{
VALUE port, proc, v, input, model;
SyckParser *parser;
struct parser_xtra bonus;
volatile VALUE hash;
rb_scan_args(argc, argv, "1&", &port, &proc);
Data_Get_Struct(self, SyckParser, parser);
input = rb_hash_aref( rb_iv_get( self, "@options" ), sym_input );
model = rb_hash_aref( rb_iv_get( self, "@options" ), sym_model );
syck_set_model( parser, input, model );
bonus.taint = syck_parser_assign_io(parser, port);
while ( 1 )
{
/* Reset hash for tracking nodes */
bonus.data = hash = rb_hash_new();
bonus.proc = 0;
parser->bonus = (void *)&bonus;
/* 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;
}