| Class | REXML::Parsers::StreamParser |
| In: |
lib/rexml/parsers/streamparser.rb
|
| Parent: | Object |
# File lib/rexml/parsers/streamparser.rb, line 4 4: def initialize source, listener 5: @listener = listener 6: @parser = BaseParser.new( source ) 7: end
# File lib/rexml/parsers/streamparser.rb, line 9
9: def add_listener( listener )
10: @parser.add_listener( listener )
11: end
# File lib/rexml/parsers/streamparser.rb, line 13
13: def parse
14: # entity string
15: while true
16: event = @parser.pull
17: case event[0]
18: when :end_document
19: return
20: when :start_element
21: attrs = event[2].each do |n, v|
22: event[2][n] = @parser.unnormalize( v )
23: end
24: @listener.tag_start( event[1], attrs )
25: when :end_element
26: @listener.tag_end( event[1] )
27: when :text
28: normalized = @parser.unnormalize( event[1] )
29: @listener.text( normalized )
30: when :processing_instruction
31: @listener.instruction( *event[1,2] )
32: when :start_doctype
33: @listener.doctype( *event[1..-1] )
34: when :end_doctype
35: # FIXME: remove this condition for milestone:3.2
36: @listener.doctype_end if @listener.respond_to? :doctype_end
37: when :comment, :attlistdecl, :cdata, :xmldecl, :elementdecl
38: @listener.send( event[0].to_s, *event[1..-1] )
39: when :entitydecl, :notationdecl
40: @listener.send( event[0].to_s, event[1..-1] )
41: end
42: end
43: end