Class: NWN::Gff::Handler::XML

Inherits:
Object
  • Object
show all
Defined in:
lib/nwn/xml_support.rb

Instance Method Summary collapse

Constructor Details

#initialize(fmt) ⇒ XML

Returns a new instance of XML.



150
151
152
# File 'lib/nwn/xml_support.rb', line 150

def initialize fmt
  @format = fmt
end

Instance Method Details

#dump(data, io) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/nwn/xml_support.rb', line 175

def dump data, io
  old_encoding = NWN.setting(:out_encoding, 'UTF-8')
  NWN.log_debug("Ignoring custom out_encoding for xml output, always UTF-8") if
    old_encoding != 'UTF-8'

  doc = XML::Document.new
  doc.root = case @format
    when :nxml
      struct_to_xml(data)
    when :modpacker
      nd = XML::Node.new('gff')
      nd['type'] = [data.data_type].pack("A4")
      nd['version'] = [data.data_version].pack("A4")
      nd << struct_to_xml(data)
      nd
    else
      raise ArgumentError, "Unsupported XML format registered: #{@format.inspect}"
  end
  t = doc.to_s
  io.write(t)

  NWN.setting(:out_encoding, old_encoding)
  t.size
end

#load(io) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# File 'lib/nwn/xml_support.rb', line 154

def load io
  old_encoding = NWN.setting(:out_encoding, 'UTF-8')
  NWN.log_debug("Ignoring custom out_encoding for xml output, always UTF-8") if
    old_encoding != 'UTF-8'

  doc = XML::Parser.io(io)
  root = doc.parse.root
  ret = case @format
    when :nxml
      xml_to_struct(root)
    when :modpacker
      struct = root.children.select {|x| x.node_type == XML::Node::ELEMENT_NODE && x.name == 'struct' }[0]
      xml_to_struct(struct, root['version'])
    else
      raise ArgumentError, "Unsupported XML format registered: #{@format.inspect}"
  end

  NWN.setting(:out_encoding, old_encoding)
  ret
end