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.
841 842 843 844 845 846 847 |
# File 'lib/moxml/adapter/ox.rb', line 841 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
850 851 852 |
# File 'lib/moxml/adapter/ox.rb', line 850 def attr(name, value) @pending_attrs[name] = value end |
#end_document ⇒ Object
Called at end of parsing (not automatically by Ox)
898 899 900 901 902 903 904 905 |
# File 'lib/moxml/adapter/ox.rb', line 898 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
872 873 874 875 876 877 878 879 880 |
# File 'lib/moxml/adapter/ox.rb', line 872 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
892 893 894 895 |
# File 'lib/moxml/adapter/ox.rb', line 892 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)
855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 |
# File 'lib/moxml/adapter/ox.rb', line 855 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
883 884 885 886 887 888 889 890 |
# File 'lib/moxml/adapter/ox.rb', line 883 def text(string) # Finalize any pending element before text if @pending_element_name finalize_pending_element end @handler.on_characters(string) end |