diff options
author | ser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-06-10 02:01:04 +0000 |
---|---|---|
committer | ser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-06-10 02:01:04 +0000 |
commit | a5246fbccaf3a4afd4c9c5982b331b335b69f2ff (patch) | |
tree | 564ff1057a5341fa9b28cf03218851f8d0255f4f /lib/rexml/document.rb | |
parent | 35d79021ec3d4692b0178d5fbeb8a4c00bb0c65d (diff) | |
download | ruby-a5246fbccaf3a4afd4c9c5982b331b335b69f2ff.tar.gz ruby-a5246fbccaf3a4afd4c9c5982b331b335b69f2ff.tar.xz ruby-a5246fbccaf3a4afd4c9c5982b331b335b69f2ff.zip |
-
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@6441 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rexml/document.rb')
-rw-r--r-- | lib/rexml/document.rb | 73 |
1 files changed, 2 insertions, 71 deletions
diff --git a/lib/rexml/document.rb b/lib/rexml/document.rb index 1378bb212..084ebd2a3 100644 --- a/lib/rexml/document.rb +++ b/lib/rexml/document.rb @@ -9,6 +9,7 @@ require "rexml/parseexception" require "rexml/output" require "rexml/parsers/baseparser" require "rexml/parsers/streamparser" +require "rexml/parsers/treeparser" module REXML # Represents a full XML document, including PIs, a doctype, etc. A @@ -171,77 +172,7 @@ module REXML private def build( source ) - build_context = self - parser = Parsers::BaseParser.new( source ) - tag_stack = [] - in_doctype = false - entities = nil - 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 + Parsers::TreeParser.new( source, self ).parse end end end |