Emit binary data
# File syck/lib/syck/baseemitter.rb, line 26 def binary_base64( value ) self << "!binary " self.node_text( [value].pack("m"), '|' ) end
Emit double-quoted string
# File syck/lib/syck/baseemitter.rb, line 86 def double( value ) "\"#{Syck.escape( value )}\"" end
Folding paragraphs within a column
# File syck/lib/syck/baseemitter.rb, line 131 def fold( value ) value.gsub( %r(^[ \t]+.*$)|(\S.{0,#{options(:BestWidth) - 1}})(?:[ \t]+|(\n+(?=[ \t]|\Z))|$)/ ) do $1 || $2 + ( $3 || "\n" ) end end
Write a current indent
# File syck/lib/syck/baseemitter.rb, line 110 def indent( mod = nil ) #p [ self.id, level, mod, :INDENT ] if level <= 0 mod ||= 0 else mod ||= options(:Indent) mod += ( level - 1 ) * options(:Indent) end return " " * mod end
Add indent to the buffer
# File syck/lib/syck/baseemitter.rb, line 124 def indent! self << indent end
Write a text block with the current indent
# File syck/lib/syck/baseemitter.rb, line 100 def indent_text( text, mod, first_line = true ) return "" if text.to_s.empty? spacing = indent( mod ) text = text.gsub( %r\A([^\n])/, "#{ spacing }\\1" ) if first_line return text.gsub( %r\n^([^\n])/, "\n#{spacing}\\1" ) end
Quick mapping
# File syck/lib/syck/baseemitter.rb, line 140 def map( type, &e ) val = Mapping.new e.call( val ) self << "#{type} " if type.length.nonzero? # # Empty hashes # if val.length.zero? self << "{}" @seq_map = false else # FIXME # if @buffer.length == 1 and options(:UseHeader) == false and type.length.zero? # @headless = 1 # end defkey = @options.delete( :DefaultKey ) if defkey seq_map_shortcut self << "= : " defkey.to_yaml( :Emitter => self ) end # # Emit the key and value # val.each { |v| seq_map_shortcut if v[0].is_complex_yaml? self << "? " end v[0].to_yaml( :Emitter => self ) if v[0].is_complex_yaml? self << "\n" indent! end self << ": " v[1].to_yaml( :Emitter => self ) } end end
Emit plain, normal flowing text
# File syck/lib/syck/baseemitter.rb, line 34 def node_text( value, block = nil ) @seq_map = false valx = value.dup unless block block = if options(:UseBlock) '|' elsif not options(:UseFold) and valx =~ %r\n[ \t]/ and not valx =~ %r#{ESCAPE_CHAR}/ '|' else '>' end indt = $&.to_i if block =~ %r\d+/ if valx =~ %r(\A\n*[ \t#]|^---\s+)/ indt = options(:Indent) unless indt.to_i > 0 block += indt.to_s end block += if valx =~ %r\n\Z\n/ "+" elsif valx =~ %r\Z\n/ "" else "-" end end block += "\n" if block[0] == "" esc_skip = ( "\t\n" unless valx =~ %r^[ \t]/ ) || "" valx = fold( Syck.escape( valx, esc_skip ) + "\"" ).chomp self << '"' + indent_text( valx, indt, false ) else if block[0] == >> valx = fold( valx ) end #p [block, indt] self << block + indent_text( valx, indt ) end end
# File syck/lib/syck/baseemitter.rb, line 11 def options( opt = nil ) if opt @options[opt] || DEFAULTS[opt] else @options end end
# File syck/lib/syck/baseemitter.rb, line 19 def options=( opt ) @options = opt end
Quick sequence
# File syck/lib/syck/baseemitter.rb, line 197 def seq( type, &e ) @seq_map = false val = Sequence.new e.call( val ) self << "#{type} " if type.length.nonzero? # # Empty arrays # if val.length.zero? self << "[]" else # FIXME # if @buffer.length == 1 and options(:UseHeader) == false and type.length.zero? # @headless = 1 # end # # Emit the key and value # val.each { |v| self << "\n" indent! self << "- " @seq_map = true if v.class == Hash v.to_yaml( :Emitter => self ) } end end
# File syck/lib/syck/baseemitter.rb, line 183 def seq_map_shortcut # FIXME: seq_map needs to work with the new anchoring system # if @seq_map # @anchor_extras[@buffer.length - 1] = "\n" + indent # @seq_map = false # else self << "\n" indent! # end end
Commenting is here to help enhance the documentation. For example, sample code, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.