Class: Psych::Emitter
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
| 
         Subclasses: 
        
       | 
    |
| Super Chains via Extension / Inclusion / Inheritance | |
| 
         Class Chain: 
        
          self,
           
      Handler
         | 
    |
| 
         Instance Chain: 
        
          self,
           
      Handler
         | 
    |
| Inherits: | 
        Psych::Handler
        
  | 
    
| Defined in: | ext/psych/psych_emitter.c | 
Constant Summary
Class Method Summary
- 
    
      .new(io, options = Psych::Emitter::OPTIONS)  
    
    constructor
    
Create a new
Emitterthat writes toio. 
Instance Attribute Summary
- 
    
      #canonical  
    
    rw
    
Get the output style, canonical or not.
 - 
    
      #canonical=(true)  
    
    rw
    
Setthe output style to canonical, or not. - 
    
      #indentation  
    
    rw
    
Get the indentation level.
 - 
    
      #indentation=(level)  
    
    rw
    
Setthe indentation level tolevel. - 
    
      #line_width  
    
    rw
    
Get the preferred line width.
 - 
    
      #line_width=(width)  
    
    rw
    
Setthe preferred line with towidth. 
Handler - Inherited
| #streaming? | Is this handler a streaming handler?  | 
    
Instance Method Summary
- 
    
      #alias(anchor)  
    
    
Emit an alias with
anchor. - 
    
      #end_document(implicit)  
    
    
End a document emission with an
implicitending. - 
    
      #end_mapping  
    
    
Emit the end of a mapping.
 - 
    
      #end_sequence  
    
    
End sequence emission.
 - 
    
      #end_stream  
    
    
End a stream emission.
 - 
    
      #scalar(value, anchor, tag, plain, quoted, style)  
    
    
Emit a scalar with
value,anchor,tag, and aplainorquotedstring type withstyle. - 
    
      #start_document(version, tags, implicit)  
    
    
Start a document emission with YAML
version,tags, and animplicitstart. - 
    
      #start_mapping(anchor, tag, implicit, style)  
    
    
Start emitting a YAML map with
anchor,tag, animplicitstart and end, andstyle. - 
    
      #start_sequence(anchor, tag, implicit, style)  
    
    
Start emitting a sequence with
anchor, atag,implicitsequence start and end, along withstyle. - 
    
      #start_stream(encoding)  
    
    
Start a stream emission with
encoding 
Handler - Inherited
| #alias | Called when an alias is found to   | 
    
| #empty | Called when an empty event happens.  | 
    
| #end_document | Called with the document ends.  | 
    
| #end_mapping | Called when a map ends.  | 
    
| #end_sequence | Called when a sequence ends.  | 
    
| #end_stream | Called when the YAML stream ends.  | 
    
| #event_location | Called before each event with line/column information.  | 
    
| #scalar | Called when a scalar   | 
    
| #start_document | Called when the document starts with the declared   | 
    
| #start_mapping | Called when a map starts.  | 
    
| #start_sequence | Called when a sequence is started.  | 
    
| #start_stream | Called with   | 
    
Constructor Details
.new(io, options = Psych::Emitter::OPTIONS)
Create a new Emitter that writes to io.
# File 'ext/psych/psych_emitter.c', line 74
static VALUE initialize(int argc, VALUE *argv, VALUE self)
{
    yaml_emitter_t * emitter;
    VALUE io, options;
    VALUE line_width;
    VALUE indent;
    VALUE canonical;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    if (rb_scan_args(argc, argv, "11", &io, &options) == 2) {
	line_width = rb_funcall(options, id_line_width, 0);
	indent     = rb_funcall(options, id_indentation, 0);
	canonical  = rb_funcall(options, id_canonical, 0);
	yaml_emitter_set_width(emitter, NUM2INT(line_width));
	yaml_emitter_set_indent(emitter, NUM2INT(indent));
	yaml_emitter_set_canonical(emitter, Qtrue == canonical ? 1 : 0);
    }
    rb_ivar_set(self, id_io, io);
    yaml_emitter_set_output(emitter, writer, (void *)self);
    return self;
}
  Instance Attribute Details
#canonical (rw)
Get the output style, canonical or not.
# File 'ext/psych/psych_emitter.c', line 461
static VALUE canonical(VALUE self)
{
    yaml_emitter_t * emitter;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    return (emitter->canonical == 0) ? Qfalse : Qtrue;
}
  #canonical=(true) (rw)
Set the output style to canonical, or not.
# File 'ext/psych/psych_emitter.c', line 447
static VALUE set_canonical(VALUE self, VALUE style)
{
    yaml_emitter_t * emitter;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    yaml_emitter_set_canonical(emitter, Qtrue == style ? 1 : 0);
    return style;
}
  #indentation (rw)
Get the indentation level.
# File 'ext/psych/psych_emitter.c', line 488
static VALUE indentation(VALUE self)
{
    yaml_emitter_t * emitter;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    return INT2NUM(emitter->best_indent);
}
  #indentation=(level) (rw)
Set the indentation level to level.  The level must be less than 10 and greater than 1.
# File 'ext/psych/psych_emitter.c', line 474
static VALUE set_indentation(VALUE self, VALUE level)
{
    yaml_emitter_t * emitter;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    yaml_emitter_set_indent(emitter, NUM2INT(level));
    return level;
}
  #line_width (rw)
Get the preferred line width.
# File 'ext/psych/psych_emitter.c', line 500
static VALUE line_width(VALUE self)
{
    yaml_emitter_t * emitter;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    return INT2NUM(emitter->best_width);
}
  #line_width=(width) (rw)
Set the preferred line with to width.
# File 'ext/psych/psych_emitter.c', line 512
static VALUE set_line_width(VALUE self, VALUE width)
{
    yaml_emitter_t * emitter;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    yaml_emitter_set_width(emitter, NUM2INT(width));
    return width;
}
  Instance Method Details
#alias(anchor)
Emit an alias with anchor.
See Handler#alias
# File 'ext/psych/psych_emitter.c', line 422
static VALUE alias(VALUE self, VALUE anchor)
{
    yaml_emitter_t * emitter;
    yaml_event_t event;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    if(!NIL_P(anchor)) {
	Check_Type(anchor, T_STRING);
	anchor = rb_str_export_to_enc(anchor, rb_utf8_encoding());
    }
    yaml_alias_event_initialize(
	    &event,
	    (yaml_char_t *)(NIL_P(anchor) ? NULL : StringValueCStr(anchor))
	    );
    emit(emitter, &event);
    return self;
}
  #end_document(implicit)
End a document emission with an implicit ending.
# File 'ext/psych/psych_emitter.c', line 223
static VALUE end_document(VALUE self, VALUE imp)
{
    yaml_emitter_t * emitter;
    yaml_event_t event;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    yaml_document_end_event_initialize(&event, imp ? 1 : 0);
    emit(emitter, &event);
    return self;
}
  #end_mapping
Emit the end of a mapping.
# File 'ext/psych/psych_emitter.c', line 403
static VALUE end_mapping(VALUE self)
{
    yaml_emitter_t * emitter;
    yaml_event_t event;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    yaml_mapping_end_event_initialize(&event);
    emit(emitter, &event);
    return self;
}
  #end_sequence
End sequence emission.
# File 'ext/psych/psych_emitter.c', line 339
static VALUE end_sequence(VALUE self)
{
    yaml_emitter_t * emitter;
    yaml_event_t event;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    yaml_sequence_end_event_initialize(&event);
    emit(emitter, &event);
    return self;
}
  #end_stream
End a stream emission
# File 'ext/psych/psych_emitter.c', line 126
static VALUE end_stream(VALUE self)
{
    yaml_emitter_t * emitter;
    yaml_event_t event;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    yaml_stream_end_event_initialize(&event);
    emit(emitter, &event);
    return self;
}
  #scalar(value, anchor, tag, plain, quoted, style)
Emit a scalar with value, anchor, tag, and a plain or quoted string type with style.
See Handler#scalar
# File 'ext/psych/psych_emitter.c', line 243
static VALUE scalar(
	VALUE self,
	VALUE value,
	VALUE anchor,
	VALUE tag,
	VALUE plain,
	VALUE quoted,
	VALUE style
	) {
    yaml_emitter_t * emitter;
    yaml_event_t event;
    rb_encoding *encoding;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    Check_Type(value, T_STRING);
    encoding = rb_utf8_encoding();
    value = rb_str_export_to_enc(value, encoding);
    if(!NIL_P(anchor)) {
	Check_Type(anchor, T_STRING);
	anchor = rb_str_export_to_enc(anchor, encoding);
    }
    if(!NIL_P(tag)) {
	Check_Type(tag, T_STRING);
	tag = rb_str_export_to_enc(tag, encoding);
    }
    yaml_scalar_event_initialize(
	    &event,
	    (yaml_char_t *)(NIL_P(anchor) ? NULL : StringValueCStr(anchor)),
	    (yaml_char_t *)(NIL_P(tag) ? NULL : StringValueCStr(tag)),
	    (yaml_char_t*)StringValuePtr(value),
	    (int)RSTRING_LEN(value),
	    plain ? 1 : 0,
	    quoted ? 1 : 0,
	    (yaml_scalar_style_t)NUM2INT(style)
	    );
    emit(emitter, &event);
    return self;
}
  #start_document(version, tags, implicit)
Start a document emission with YAML version, tags, and an implicit start.
# File 'ext/psych/psych_emitter.c', line 146
static VALUE start_document(VALUE self, VALUE version, VALUE tags, VALUE imp)
{
    yaml_emitter_t * emitter;
    yaml_tag_directive_t * head = NULL;
    yaml_tag_directive_t * tail = NULL;
    yaml_event_t event;
    yaml_version_directive_t version_directive;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    Check_Type(version, T_ARRAY);
    if(RARRAY_LEN(version) > 0) {
	VALUE major = rb_ary_entry(version, (long)0);
	VALUE minor = rb_ary_entry(version, (long)1);
	version_directive.major = NUM2INT(major);
	version_directive.minor = NUM2INT(minor);
    }
    if(RTEST(tags)) {
	long i = 0;
	long len;
	rb_encoding * encoding = rb_utf8_encoding();
	Check_Type(tags, T_ARRAY);
	len = RARRAY_LEN(tags);
	head  = xcalloc((size_t)len, sizeof(yaml_tag_directive_t));
	tail  = head;
	for(i = 0; i < len && i < RARRAY_LEN(tags); i++) {
	    VALUE tuple = RARRAY_AREF(tags, i);
	    VALUE name;
	    VALUE value;
	    Check_Type(tuple, T_ARRAY);
	    if(RARRAY_LEN(tuple) < 2) {
		xfree(head);
		rb_raise(rb_eRuntimeError, "tag tuple must be of length 2");
	    }
	    name  = RARRAY_AREF(tuple, 0);
	    value = RARRAY_AREF(tuple, 1);
	    StringValue(name);
	    StringValue(value);
	    name = rb_str_export_to_enc(name, encoding);
	    value = rb_str_export_to_enc(value, encoding);
	    tail->handle = (yaml_char_t *)StringValueCStr(name);
	    tail->prefix = (yaml_char_t *)StringValueCStr(value);
	    tail++;
	}
    }
    yaml_document_start_event_initialize(
	    &event,
	    (RARRAY_LEN(version) > 0) ? &version_directive : NULL,
	    head,
	    tail,
	    imp ? 1 : 0
	    );
    emit(emitter, &event);
    if(head) xfree(head);
    return self;
}
  #start_mapping(anchor, tag, implicit, style)
Start emitting a YAML map with anchor, tag, an implicit start and end, and style.
# File 'ext/psych/psych_emitter.c', line 359
static VALUE start_mapping(
	VALUE self,
	VALUE anchor,
	VALUE tag,
	VALUE implicit,
	VALUE style
	) {
    yaml_emitter_t * emitter;
    yaml_event_t event;
    rb_encoding *encoding;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    encoding = rb_utf8_encoding();
    if(!NIL_P(anchor)) {
	Check_Type(anchor, T_STRING);
	anchor = rb_str_export_to_enc(anchor, encoding);
    }
    if(!NIL_P(tag)) {
	Check_Type(tag, T_STRING);
	tag = rb_str_export_to_enc(tag, encoding);
    }
    yaml_mapping_start_event_initialize(
	    &event,
	    (yaml_char_t *)(NIL_P(anchor) ? NULL : StringValueCStr(anchor)),
	    (yaml_char_t *)(NIL_P(tag) ? NULL : StringValueCStr(tag)),
	    implicit ? 1 : 0,
	    (yaml_mapping_style_t)NUM2INT(style)
	    );
    emit(emitter, &event);
    return self;
}
  #start_sequence(anchor, tag, implicit, style)
Start emitting a sequence with anchor, a tag, implicit sequence start and end, along with style.
# File 'ext/psych/psych_emitter.c', line 296
static VALUE start_sequence(
	VALUE self,
	VALUE anchor,
	VALUE tag,
	VALUE implicit,
	VALUE style
	) {
    yaml_emitter_t * emitter;
    yaml_event_t event;
    rb_encoding * encoding = rb_utf8_encoding();
    if(!NIL_P(anchor)) {
	Check_Type(anchor, T_STRING);
	anchor = rb_str_export_to_enc(anchor, encoding);
    }
    if(!NIL_P(tag)) {
	Check_Type(tag, T_STRING);
	tag = rb_str_export_to_enc(tag, encoding);
    }
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    yaml_sequence_start_event_initialize(
	    &event,
	    (yaml_char_t *)(NIL_P(anchor) ? NULL : StringValueCStr(anchor)),
	    (yaml_char_t *)(NIL_P(tag) ? NULL : StringValueCStr(tag)),
	    implicit ? 1 : 0,
	    (yaml_sequence_style_t)NUM2INT(style)
	    );
    emit(emitter, &event);
    return self;
}
  #start_stream(encoding)
Start a stream emission with encoding
# File 'ext/psych/psych_emitter.c', line 106
static VALUE start_stream(VALUE self, VALUE encoding)
{
    yaml_emitter_t * emitter;
    yaml_event_t event;
    TypedData_Get_Struct(self, yaml_emitter_t, &psych_emitter_type, emitter);
    Check_Type(encoding, T_FIXNUM);
    yaml_stream_start_event_initialize(&event, (yaml_encoding_t)NUM2INT(encoding));
    emit(emitter, &event);
    return self;
}