aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rexml/document.rb
diff options
context:
space:
mode:
authorser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-05-16 15:17:31 +0000
committerser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-05-16 15:17:31 +0000
commit8fd29e2019077205a9997308cf3bc05202a83ad1 (patch)
tree5add8b63369553228f3348398c7681f22c58cbec /lib/rexml/document.rb
parentac1d9e7c2dfceb06a9b6ee22e2fc0593c9ddce29 (diff)
downloadruby-8fd29e2019077205a9997308cf3bc05202a83ad1.tar.gz
------------------------------------------------------------------------
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rexml/document.rb')
-rw-r--r--lib/rexml/document.rb128
1 files changed, 66 insertions, 62 deletions
diff --git a/lib/rexml/document.rb b/lib/rexml/document.rb
index 52500f2afd..1378bb212c 100644
--- a/lib/rexml/document.rb
+++ b/lib/rexml/document.rb
@@ -176,68 +176,72 @@ module REXML
tag_stack = []
in_doctype = false
entities = nil
- while true
- event = parser.pull
- case event[0]
- when :end_document
- return
- when :start_element
- tag_stack.push(event[1])
- # find the observers for namespaces
- build_context = build_context.add_element( event[1], event[2] )
- when :end_element
- tag_stack.pop
- build_context = build_context.parent
- when :text
- if not in_doctype
- if build_context[-1].instance_of? Text
- build_context[-1] << event[1]
- else
- build_context.add(
- Text.new( event[1], build_context.whitespace, nil, true )
- ) unless (
- event[1].strip.size==0 and
- build_context.ignore_whitespace_nodes
- )
- end
- end
- when :comment
- c = Comment.new( event[1] )
- build_context.add( c )
- when :cdata
- c = CData.new( event[1] )
- build_context.add( c )
- when :processing_instruction
- build_context.add( Instruction.new( event[1], event[2] ) )
- when :end_doctype
- in_doctype = false
- entities.each { |k,v| entities[k] = build_context.entities[k].value }
- build_context = build_context.parent
- when :start_doctype
- doctype = DocType.new( event[1..-1], build_context )
- build_context = doctype
- entities = {}
- in_doctype = true
- when :attlistdecl
- n = AttlistDecl.new( event[1..-1] )
- build_context.add( n )
- when :externalentity
- n = ExternalEntity.new( event[1] )
- build_context.add( n )
- when :elementdecl
- n = ElementDecl.new( event[1] )
- build_context.add(n)
- when :entitydecl
- entities[ event[1] ] = event[2] unless event[2] =~ /PUBLIC|SYSTEM/
- build_context.add(Entity.new(event))
- when :notationdecl
- n = NotationDecl.new( *event[1..-1] )
- build_context.add( n )
- when :xmldecl
- x = XMLDecl.new( event[1], event[2], event[3] )
- build_context.add( x )
- end
- end
+ begin
+ while true
+ event = parser.pull
+ case event[0]
+ when :end_document
+ return
+ when :start_element
+ tag_stack.push(event[1])
+ # find the observers for namespaces
+ build_context = build_context.add_element( event[1], event[2] )
+ when :end_element
+ tag_stack.pop
+ build_context = build_context.parent
+ when :text
+ if not in_doctype
+ if build_context[-1].instance_of? Text
+ build_context[-1] << event[1]
+ else
+ build_context.add(
+ Text.new( event[1], build_context.whitespace, nil, true )
+ ) unless (
+ event[1].strip.size==0 and
+ build_context.ignore_whitespace_nodes
+ )
+ end
+ end
+ when :comment
+ c = Comment.new( event[1] )
+ build_context.add( c )
+ when :cdata
+ c = CData.new( event[1] )
+ build_context.add( c )
+ when :processing_instruction
+ build_context.add( Instruction.new( event[1], event[2] ) )
+ when :end_doctype
+ in_doctype = false
+ entities.each { |k,v| entities[k] = build_context.entities[k].value }
+ build_context = build_context.parent
+ when :start_doctype
+ doctype = DocType.new( event[1..-1], build_context )
+ build_context = doctype
+ entities = {}
+ in_doctype = true
+ when :attlistdecl
+ n = AttlistDecl.new( event[1..-1] )
+ build_context.add( n )
+ when :externalentity
+ n = ExternalEntity.new( event[1] )
+ build_context.add( n )
+ when :elementdecl
+ n = ElementDecl.new( event[1] )
+ build_context.add(n)
+ when :entitydecl
+ entities[ event[1] ] = event[2] unless event[2] =~ /PUBLIC|SYSTEM/
+ build_context.add(Entity.new(event))
+ when :notationdecl
+ n = NotationDecl.new( *event[1..-1] )
+ build_context.add( n )
+ when :xmldecl
+ x = XMLDecl.new( event[1], event[2], event[3] )
+ build_context.add( x )
+ end
+ end
+ rescue
+ raise ParseException.new( $!.message, parser.source, parser, $! )
+ end
end
end
end