From a1e257ec48911d3ca1aaeda0127061c244f36147 Mon Sep 17 00:00:00 2001 From: why Date: Fri, 11 Jul 2003 22:52:14 +0000 Subject: * ext/syck/emitter.c: new emitter code. * ext/syck/rubyext.c: Emitter class. * lib/yaml.rb: Load Syck emitter, if available. * lib/yaml/stream.rb: ditto. * lib/yaml/baseemitter.rb: underlying class for all emitters. * lib/yaml/rubytypes.rb: use BaseEmitter abstraction. * lib/yaml/emitter.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4066 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/yaml.rb | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) (limited to 'lib/yaml.rb') diff --git a/lib/yaml.rb b/lib/yaml.rb index 39e176541e..d33f2e202a 100644 --- a/lib/yaml.rb +++ b/lib/yaml.rb @@ -12,15 +12,26 @@ module YAML require 'yaml/syck' @@parser = YAML::Syck::Parser @@loader = YAML::Syck::DefaultLoader + @@emitter = YAML::Syck::Emitter rescue LoadError require 'yaml/parser' @@parser = YAML::Parser @@loader = YAML::DefaultLoader + require 'yaml/emitter' + @@emitter = YAML::Emitter end - require 'yaml/emitter' require 'yaml/loader' require 'yaml/stream' + # + # Load a single document from the current stream + # + def YAML.dump( obj, io = nil ) + io ||= "" + io << obj.to_yaml + io + end + # # Load a single document from the current stream # @@ -158,6 +169,30 @@ module YAML end end + # + # Allocate an Emitter if needed + # + def YAML.quick_emit( oid, opts = {}, &e ) + old_opt = nil + if opts[:Emitter].is_a? @@emitter + out = opts.delete( :Emitter ) + old_opt = out.options.dup + out.options.update( opts ) + else + out = @@emitter.new( opts ) + end + aidx = out.start_object( oid ) + if aidx + out.simple( "*#{ aidx }" ) + else + e.call( out ) + end + if old_opt.is_a? Hash + out.options = old_opt + end + out.end_object + end + end require 'yaml/rubytypes' -- cgit v1.2.3