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
  def initialize fmt
    @format = fmt
  end

Public instance methods

dump (data, io)
[show source]
# 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)
[show source]
# 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