Class | EimXML::Formatter |
In: |
lib/eim_xml/formatter/element_wrapper.rb
lib/eim_xml/formatter.rb |
Parent: | Object |
out | [R] |
# File lib/eim_xml/formatter.rb, line 13 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
# File lib/eim_xml/formatter.rb, line 7 7: def self.write(element, opt={}) 8: opt = {:out=>""}.merge(opt) 9: new(opt).write(element) 10: opt[:out] 11: end
# File lib/eim_xml/formatter.rb, line 37 37: def indent(&proc) 38: @indent_depth += 1 39: proc.call 40: ensure 41: @indent_depth -= 1 42: end
# File lib/eim_xml/formatter.rb, line 44 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
# File lib/eim_xml/formatter.rb, line 22 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
# File lib/eim_xml/formatter.rb, line 63 63: def write_comment(c) 64: write_indent 65: c.write_to(out) 66: write_newline 67: end
# File lib/eim_xml/formatter.rb, line 69 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
# File lib/eim_xml/formatter.rb, line 83 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
# File lib/eim_xml/formatter.rb, line 55 55: def write_indent 56: out << @indent_string*@indent_depth unless @preserve_space 57: end
# File lib/eim_xml/formatter.rb, line 59 59: def write_newline 60: out << "\n" unless @preserve_space 61: end
# File lib/eim_xml/formatter.rb, line 99 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
# File lib/eim_xml/formatter.rb, line 107 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