summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2009-09-29 17:16:29 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2009-09-29 17:16:29 -0700
commitf9764c806980a663dbc75a8ec1764d02a225595d (patch)
tree6f08b36991fb1befeb1b0c950d13998b8661a677 /ext
parent26eee0cd258ef47d595e9ae44e06ccf4d71ced56 (diff)
downloadpsych-f9764c806980a663dbc75a8ec1764d02a225595d.zip
aliases can be emitted
Diffstat (limited to 'ext')
-rw-r--r--ext/psych/emitter.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/ext/psych/emitter.c b/ext/psych/emitter.c
index d6b13f9..126f174 100644
--- a/ext/psych/emitter.c
+++ b/ext/psych/emitter.c
@@ -210,6 +210,22 @@ static VALUE end_mapping(VALUE self)
return self;
}
+static VALUE alias(VALUE self, VALUE anchor)
+{
+ yaml_emitter_t * emitter;
+ Data_Get_Struct(self, yaml_emitter_t, emitter);
+
+ yaml_event_t event;
+ yaml_alias_event_initialize(
+ &event,
+ (yaml_char_t *)(Qnil == anchor ? NULL : StringValuePtr(anchor))
+ );
+
+ emit(emitter, &event);
+
+ return self;
+}
+
void Init_psych_emitter()
{
VALUE psych = rb_define_module("Psych");
@@ -228,4 +244,5 @@ void Init_psych_emitter()
rb_define_method(cPsychEmitter, "end_sequence", end_sequence, 0);
rb_define_method(cPsychEmitter, "start_mapping", start_mapping, 4);
rb_define_method(cPsychEmitter, "end_mapping", end_mapping, 0);
+ rb_define_method(cPsychEmitter, "alias", alias, 1);
}