Class NWN::Gff::Handler::XML

  1. lib/nwn/xml_support.rb
Parent: Object

Methods

public class

  1. new

public instance

  1. dump
  2. load

Public class methods

new (fmt)
[show source]
     # File lib/nwn/xml_support.rb, line 150
150:   def initialize fmt
151:     @format = fmt
152:   end

Public instance methods

dump (data, io)
[show source]
     # File lib/nwn/xml_support.rb, line 175
175:   def dump data, io
176:     old_encoding = NWN.setting(:out_encoding, 'UTF-8')
177:     NWN.log_debug("Ignoring custom out_encoding for xml output, always UTF-8") if
178:       old_encoding != 'UTF-8'
179: 
180:     doc = XML::Document.new
181:     doc.root = case @format
182:       when :nxml
183:         struct_to_xml(data)
184:       when :modpacker
185:         nd = XML::Node.new('gff')
186:         nd['type'] = [data.data_type].pack("A4")
187:         nd['version'] = [data.data_version].pack("A4")
188:         nd << struct_to_xml(data)
189:         nd
190:       else
191:         raise ArgumentError, "Unsupported XML format registered: #{@format.inspect}"
192:     end
193:     t = doc.to_s
194:     io.write(t)
195: 
196:     NWN.setting(:out_encoding, old_encoding)
197:     t.size
198:   end
load (io)
[show source]
     # File lib/nwn/xml_support.rb, line 154
154:   def load io
155:     old_encoding = NWN.setting(:out_encoding, 'UTF-8')
156:     NWN.log_debug("Ignoring custom out_encoding for xml output, always UTF-8") if
157:       old_encoding != 'UTF-8'
158: 
159:     doc = XML::Parser.io(io)
160:     root = doc.parse.root
161:     ret = case @format
162:       when :nxml
163:         xml_to_struct(root)
164:       when :modpacker
165:         struct = root.children.select {|x| x.node_type == XML::Node::ELEMENT_NODE && x.name == 'struct' }[0]
166:         xml_to_struct(struct, root['version'])
167:       else
168:         raise ArgumentError, "Unsupported XML format registered: #{@format.inspect}"
169:     end
170: 
171:     NWN.setting(:out_encoding, old_encoding)
172:     ret
173:   end