Class: Moxml::Adapter::OxSAXBridge
- Inherits:
-
Object
- Object
- Moxml::Adapter::OxSAXBridge
- Defined in:
- lib/moxml/adapter/ox.rb
Overview
Bridge between Ox SAX and Moxml SAX
Translates Ox::Sax events to Moxml::SAX::Handler events. Ox has a unique SAX pattern where attributes are delivered AFTER start_element.
Instance Method Summary collapse
-
#attr(name, value) ⇒ Object
Ox delivers attributes AFTER start_element.
-
#end_document ⇒ Object
Called at end of parsing (not automatically by Ox).
- #end_element(name) ⇒ Object
- #error(message, line, column) ⇒ Object
-
#initialize(handler) ⇒ OxSAXBridge
constructor
A new instance of OxSAXBridge.
-
#start_element(name) ⇒ Object
Called when element starts (but attributes come AFTER this).
-
#text(string) ⇒ Object
Ox only has text() - no separate CDATA, comment, or PI events.
Constructor Details
#initialize(handler) ⇒ OxSAXBridge
Returns a new instance of OxSAXBridge.
629 630 631 632 633 634 635 |
# File 'lib/moxml/adapter/ox.rb', line 629 def initialize(handler) @handler = handler @pending_attrs = {} @pending_element_name = nil @element_started = false @document_started = false end |
Instance Method Details
#attr(name, value) ⇒ Object
Ox delivers attributes AFTER start_element
638 639 640 |
# File 'lib/moxml/adapter/ox.rb', line 638 def attr(name, value) @pending_attrs[name] = value end |
#end_document ⇒ Object
Called at end of parsing (not automatically by Ox)
686 687 688 689 690 691 692 693 |
# File 'lib/moxml/adapter/ox.rb', line 686 def end_document # Finalize any pending element if @pending_element_name finalize_pending_element end @handler.on_end_document if @document_started end |
#end_element(name) ⇒ Object
660 661 662 663 664 665 666 667 668 |
# File 'lib/moxml/adapter/ox.rb', line 660 def end_element(name) # Finalize any pending element before ending if @pending_element_name finalize_pending_element end # Convert symbol to string @handler.on_end_element(name.to_s) end |
#error(message, line, column) ⇒ Object
680 681 682 683 |
# File 'lib/moxml/adapter/ox.rb', line 680 def error(, line, column) error = Moxml::ParseError.new(, line: line, column: column) @handler.on_error(error) end |
#start_element(name) ⇒ Object
Called when element starts (but attributes come AFTER this)
643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 |
# File 'lib/moxml/adapter/ox.rb', line 643 def start_element(name) # If we had a previous element waiting, we need to finalize it first if @pending_element_name finalize_pending_element end # Store this element name (convert symbol to string) @pending_element_name = name.to_s @element_started = true # Call on_start_document if this is the first element unless @document_started @handler.on_start_document @document_started = true end end |
#text(string) ⇒ Object
Ox only has text() - no separate CDATA, comment, or PI events
671 672 673 674 675 676 677 678 |
# File 'lib/moxml/adapter/ox.rb', line 671 def text(string) # Finalize any pending element before text if @pending_element_name finalize_pending_element end @handler.on_characters(string) end |