class EimXML::Parser
Attributes
scanner[R]
Public Class Methods
new(src)
click to toggle source
# File lib/eim_xml/parser.rb, line 24 def initialize(src) @scanner = StringScanner.new(src) @scanner.scan(/\s*<\?.*?\?>\s*/) end
Public Instance Methods
parse()
click to toggle source
# File lib/eim_xml/parser.rb, line 29 def parse if @scanner.scan(RE::EMPTY_ELEMENT) parse_empty_element elsif @scanner.scan(RE::START_TAG) parse_start_tag elsif @scanner.scan(RE::STRING) parse_string else nil end end
Protected Instance Methods
parse_empty_element()
click to toggle source
# File lib/eim_xml/parser.rb, line 49 def parse_empty_element parse_tag end
parse_start_tag()
click to toggle source
# File lib/eim_xml/parser.rb, line 54 def parse_start_tag e = parse_tag until @scanner.scan(RE::END_TAG) c = parse raise ParseError.new("Syntax error.") unless c e << c end raise ParseError.new("End tag mismatched.") unless @scanner[1].to_sym==e.name e end
parse_string()
click to toggle source
# File lib/eim_xml/parser.rb, line 67 def parse_string s = @scanner[0] s = s.gsub(/&(amp|quot|apos|lt|gt);/) do case $1 when "amp" "&" when "quot" '"' when "apos" "'" when "lt" "<" when "gt" ">" end end PCString.new(s) end
parse_tag()
click to toggle source
# File lib/eim_xml/parser.rb, line 41 def parse_tag s = StringScanner.new(@scanner[1]) e = Element.new(s.scan(/\S+/)) e[s[1]] = s[3] ? s[3] : s[4] while s.scan(RE::ATTRIBUTE) e end