aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rexml/document.rb
diff options
context:
space:
mode:
authorser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-06-10 02:01:04 +0000
committerser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-06-10 02:01:04 +0000
commit3289dfc78b4c5051b0079217a193ce50d5349506 (patch)
tree564ff1057a5341fa9b28cf03218851f8d0255f4f /lib/rexml/document.rb
parentf2b75020ba193b6d20788c800fde583ca8e900d5 (diff)
downloadruby-3289dfc78b4c5051b0079217a193ce50d5349506.tar.gz
-
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6441 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rexml/document.rb')
-rw-r--r--lib/rexml/document.rb73
1 files changed, 2 insertions, 71 deletions
diff --git a/lib/rexml/document.rb b/lib/rexml/document.rb
index 1378bb212c..084ebd2a39 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