class EimXML::Formatter
Attributes
out[R]
Public Class Methods
new(opt)
click to toggle source
# File lib/eim_xml/formatter.rb 13 def initialize(opt) 14 @out = opt[:out] 15 @preservers = opt[:preservers] 16 @preserve_space = false 17 @indent_string = " " 18 @indent_depth = 0 19 @option = opt.dup.tap{|h| [:out, :preservers].each{|k| h.delete(k)}} 20 end
write(element, opt={})
click to toggle source
# File lib/eim_xml/formatter.rb 7 def self.write(element, opt={}) 8 opt = {:out=>""}.merge(opt) 9 new(opt).write(element) 10 opt[:out] 11 end
Public Instance Methods
indent(&proc)
click to toggle source
# File lib/eim_xml/formatter.rb 37 def indent(&proc) 38 @indent_depth += 1 39 proc.call 40 ensure 41 @indent_depth -= 1 42 end
preserve_space_element?(elm)
click to toggle source
# File lib/eim_xml/formatter.rb 44 def preserve_space_element?(elm) 45 @preservers && @preservers.any? do |e| 46 case e 47 when Symbol 48 e==elm.name 49 when Class 50 e===elm 51 end 52 end 53 end
write(src)
click to toggle source
# File lib/eim_xml/formatter.rb 22 def write(src) 23 case src 24 when ElementWrapper 25 write_wrapper(src) 26 when Comment 27 write_comment(src) 28 when Element 29 write_element(src) 30 when PCString 31 write_pcstring(src) 32 else 33 write_string(src.to_s) 34 end 35 end
write_comment(c)
click to toggle source
# File lib/eim_xml/formatter.rb 63 def write_comment(c) 64 write_indent 65 c.write_to(out) 66 write_newline 67 end
write_contents_of(elm)
click to toggle source
# File lib/eim_xml/formatter.rb 69 def write_contents_of(elm) 70 flag = @preserve_space 71 @preserve_space = true if preserve_space_element?(elm) 72 write_newline 73 indent do 74 elm.contents.each do |c| 75 write(c) 76 end 77 end 78 write_indent 79 ensure 80 @preserve_space = flag 81 end
write_element(elm)
click to toggle source
# File lib/eim_xml/formatter.rb 83 def write_element(elm) 84 write_indent 85 out << "<" 86 elm.name_and_attributes(out) 87 case elm.contents.size 88 when 0 89 out << " />" 90 write_newline 91 else 92 out << ">" 93 write_contents_of(elm) 94 out << "</#{elm.name}>" 95 write_newline 96 end 97 end
write_indent()
click to toggle source
# File lib/eim_xml/formatter.rb 55 def write_indent 56 out << @indent_string*@indent_depth unless @preserve_space 57 end
write_newline()
click to toggle source
# File lib/eim_xml/formatter.rb 59 def write_newline 60 out << "\n" unless @preserve_space 61 end
write_pcstring(pcs)
click to toggle source
# File lib/eim_xml/formatter.rb 99 def write_pcstring(pcs) 100 pcs.encoded_string.each_line do |l| 101 write_indent 102 out << l 103 end 104 write_newline 105 end
write_string(str)
click to toggle source
# File lib/eim_xml/formatter.rb 107 def write_string(str) 108 PCString.encode(str).each_line do |l| 109 write_indent 110 out << l 111 end 112 write_newline 113 end
write_wrapper(wrapper)
click to toggle source
# File lib/eim_xml/formatter.rb 115 def write_wrapper(wrapper) 116 wrapper.each(@option) do |i| 117 write(i) 118 end 119 end