| Class | EimXML::Parser |
| In: |
lib/eim_xml/parser.rb
|
| Parent: | Object |
| scanner | [R] |
# File lib/eim_xml/parser.rb, line 24
24: def initialize(src)
25: @scanner = StringScanner.new(src)
26: @scanner.scan(/\s*<\?.*?\?>\s*/)
27: end
# File lib/eim_xml/parser.rb, line 29
29: def parse
30: if @scanner.scan(RE::EMPTY_ELEMENT)
31: parse_empty_element
32: elsif @scanner.scan(RE::START_TAG)
33: parse_start_tag
34: elsif @scanner.scan(RE::STRING)
35: parse_string
36: else
37: nil
38: end
39: end
# File lib/eim_xml/parser.rb, line 54
54: def parse_start_tag
55: e = parse_tag
56:
57: until @scanner.scan(RE::END_TAG)
58: c = parse
59: raise ParseError.new("Syntax error.") unless c
60: e << c
61: end
62: raise ParseError.new("End tag mismatched.") unless @scanner[1].to_sym==e.name
63: e
64: end
# File lib/eim_xml/parser.rb, line 67
67: def parse_string
68: s = @scanner[0]
69: s = s.gsub(/&(amp|quot|apos|lt|gt);/) do
70: case $1
71: when "amp"
72: "&"
73: when "quot"
74: '"'
75: when "apos"
76: "'"
77: when "lt"
78: "<"
79: when "gt"
80: ">"
81: end
82: end
83: PCString.new(s)
84: end