rb_cObject
Define YAML::Syck::Resolver class
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.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; }
Commenting is here to help enhance the documentation. For example, sample code, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.