Class: Moxml::Adapter::Oga::OgaSAXBridge

Inherits:
Object
  • Object
show all
Includes:
SAX::NamespaceSplitter
Defined in:
lib/moxml/adapter/oga.rb

Overview

Bridge between a parsed Oga DOM and Moxml SAX events.

Constant Summary

Constants included from SAX::NamespaceSplitter

SAX::NamespaceSplitter::EMPTY_NAMESPACES

Instance Method Summary collapse

Methods included from SAX::NamespaceSplitter

#split_attributes_and_namespaces

Constructor Details

#initialize(handler) ⇒ OgaSAXBridge



654
655
656
# File 'lib/moxml/adapter/oga.rb', line 654

def initialize(handler)
  @handler = handler
end

Instance Method Details

#emit(node) ⇒ Object

Walk a parsed Oga node and emit Moxml SAX events.



667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
# File 'lib/moxml/adapter/oga.rb', line 667

def emit(node)
  case node
  when ::Oga::XML::Element
    element_name = qualified_name(node.namespace_name, node.name)
    pairs = node.attributes.map do |a|
      [qualified_name(a.namespace_name, a.name), a.value]
    end
    attrs, namespaces = split_attributes_and_namespaces(pairs)
    @handler.on_start_element(element_name, attrs, namespaces)
    node.children.each { |c| emit(c) }
    @handler.on_end_element(element_name)
  when ::Oga::XML::Text
    @handler.on_characters(node.text)
  when ::Oga::XML::Cdata
    @handler.on_cdata(node.text)
  when ::Oga::XML::Comment
    @handler.on_comment(node.text)
  when ::Oga::XML::ProcessingInstruction
    @handler.on_processing_instruction(node.name, node.text || "")
  end
end

#on_end_documentObject



662
663
664
# File 'lib/moxml/adapter/oga.rb', line 662

def on_end_document
  @handler.on_end_document
end

#on_start_documentObject



658
659
660
# File 'lib/moxml/adapter/oga.rb', line 658

def on_start_document
  @handler.on_start_document
end