3 #if !defined(RARRAY_CONST_PTR)
4 #define RARRAY_CONST_PTR(s) (const VALUE *)RARRAY_PTR(s)
6 #if !defined(RARRAY_AREF)
7 #define RARRAY_AREF(a, i) RARRAY_CONST_PTR(a)[i]
13 static ID id_line_width;
14 static ID id_indentation;
15 static ID id_canonical;
17 static void emit(yaml_emitter_t * emitter, yaml_event_t * event)
19 if(!yaml_emitter_emit(emitter, event))
23 static int writer(
void *ctx,
unsigned char *buffer,
size_t size)
31 static void dealloc(
void *
ptr)
33 yaml_emitter_t * emitter;
35 emitter = (yaml_emitter_t *)
ptr;
36 yaml_emitter_delete(emitter);
41 static size_t memsize(
const void *
ptr)
43 const yaml_emitter_t *emitter =
ptr;
53 #ifdef RUBY_TYPED_FREE_IMMEDIATELY
60 yaml_emitter_t * emitter;
63 yaml_emitter_initialize(emitter);
64 yaml_emitter_set_unicode(emitter, 1);
65 yaml_emitter_set_indent(emitter, 2);
76 yaml_emitter_t * emitter;
85 line_width =
rb_funcall(options, id_line_width, 0);
86 indent =
rb_funcall(options, id_indentation, 0);
87 canonical =
rb_funcall(options, id_canonical, 0);
89 yaml_emitter_set_width(emitter,
NUM2INT(line_width));
90 yaml_emitter_set_indent(emitter,
NUM2INT(indent));
91 yaml_emitter_set_canonical(emitter,
Qtrue == canonical ? 1 : 0);
95 yaml_emitter_set_output(emitter, writer, (
void *)
self);
108 yaml_emitter_t * emitter;
113 yaml_stream_start_event_initialize(&event, (yaml_encoding_t)
NUM2INT(encoding));
115 emit(emitter, &event);
128 yaml_emitter_t * emitter;
132 yaml_stream_end_event_initialize(&event);
134 emit(emitter, &event);
148 yaml_emitter_t * emitter;
149 yaml_tag_directive_t * head =
NULL;
150 yaml_tag_directive_t * tail =
NULL;
152 yaml_version_directive_t version_directive;
162 version_directive.major =
NUM2INT(major);
163 version_directive.minor =
NUM2INT(minor);
174 head =
xcalloc((
size_t)
len,
sizeof(yaml_tag_directive_t));
202 yaml_document_start_event_initialize(
210 emit(emitter, &event);
212 if(head)
xfree(head);
225 yaml_emitter_t * emitter;
229 yaml_document_end_event_initialize(&event, imp ? 1 : 0);
231 emit(emitter, &event);
252 yaml_emitter_t * emitter;
273 yaml_scalar_event_initialize(
281 (yaml_scalar_style_t)
NUM2INT(style)
284 emit(emitter, &event);
296 static VALUE start_sequence(
303 yaml_emitter_t * emitter;
320 yaml_sequence_start_event_initialize(
325 (yaml_sequence_style_t)
NUM2INT(style)
328 emit(emitter, &event);
341 yaml_emitter_t * emitter;
345 yaml_sequence_end_event_initialize(&event);
347 emit(emitter, &event);
359 static VALUE start_mapping(
366 yaml_emitter_t * emitter;
384 yaml_mapping_start_event_initialize(
389 (yaml_mapping_style_t)
NUM2INT(style)
392 emit(emitter, &event);
405 yaml_emitter_t * emitter;
409 yaml_mapping_end_event_initialize(&event);
411 emit(emitter, &event);
424 yaml_emitter_t * emitter;
433 yaml_alias_event_initialize(
438 emit(emitter, &event);
449 yaml_emitter_t * emitter;
452 yaml_emitter_set_canonical(emitter,
Qtrue == style ? 1 : 0);
463 yaml_emitter_t * emitter;
476 yaml_emitter_t * emitter;
479 yaml_emitter_set_indent(emitter,
NUM2INT(level));
490 yaml_emitter_t * emitter;
493 return INT2NUM(emitter->best_indent);
502 yaml_emitter_t * emitter;
505 return INT2NUM(emitter->best_width);
514 yaml_emitter_t * emitter;
517 yaml_emitter_set_width(emitter,
NUM2INT(width));
552 id_indentation =
rb_intern(
"indentation");