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;
}