13: def parse
14:
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:
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