diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-05-22 09:49:01 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-05-22 09:49:01 +0000 |
commit | fff99de8326c9f747d66b7236f218b505b324fbd (patch) | |
tree | ef3c6dd1f05e3f1ca20b0c8e96b774ec634e3348 /lib | |
parent | 6285874bc322713fee4bd778d6714f1bf93c559c (diff) |
merges r23451 from trunk into ruby_1_9_1.
--
* lib/rss/parser.rb, test/test_parser_1.0.rb: fix foaf:Image
element causes parse error even if ignore_unknown_element mode.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@23532 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rss/0.9.rb | 3 | ||||
-rw-r--r-- | lib/rss/1.0.rb | 2 | ||||
-rw-r--r-- | lib/rss/atom.rb | 4 | ||||
-rw-r--r-- | lib/rss/parser.rb | 31 |
4 files changed, 28 insertions, 12 deletions
diff --git a/lib/rss/0.9.rb b/lib/rss/0.9.rb index 7b24e7596d..6b879d876c 100644 --- a/lib/rss/0.9.rb +++ b/lib/rss/0.9.rb @@ -411,8 +411,7 @@ module RSS module ListenerMixin private def initial_start_rss(tag_name, prefix, attrs, ns) - check_ns(tag_name, prefix, ns, "") - + check_ns(tag_name, prefix, ns, "", false) @rss = Rss.new(attrs['version'], @version, @encoding, @standalone) @rss.do_validate = @do_validate @rss.xml_stylesheets = @xml_stylesheets diff --git a/lib/rss/1.0.rb b/lib/rss/1.0.rb index f04e61c5eb..0d1e9fe685 100644 --- a/lib/rss/1.0.rb +++ b/lib/rss/1.0.rb @@ -436,7 +436,7 @@ module RSS module ListenerMixin private def initial_start_RDF(tag_name, prefix, attrs, ns) - check_ns(tag_name, prefix, ns, RDF::URI) + check_ns(tag_name, prefix, ns, RDF::URI, false) @rss = RDF.new(@version, @encoding, @standalone) @rss.do_validate = @do_validate diff --git a/lib/rss/atom.rb b/lib/rss/atom.rb index 10282a8743..ff8ff2249a 100644 --- a/lib/rss/atom.rb +++ b/lib/rss/atom.rb @@ -716,7 +716,7 @@ module RSS module ListenerMixin private def initial_start_feed(tag_name, prefix, attrs, ns) - check_ns(tag_name, prefix, ns, Atom::URI) + check_ns(tag_name, prefix, ns, Atom::URI, false) @rss = Atom::Feed.new(@version, @encoding, @standalone) @rss.do_validate = @do_validate @@ -731,7 +731,7 @@ module RSS end def initial_start_entry(tag_name, prefix, attrs, ns) - check_ns(tag_name, prefix, ns, Atom::URI) + check_ns(tag_name, prefix, ns, Atom::URI, false) @rss = Atom::Entry.new(@version, @encoding, @standalone) @rss.do_validate = @do_validate diff --git a/lib/rss/parser.rb b/lib/rss/parser.rb index 9b28f0fa8a..359c01419e 100644 --- a/lib/rss/parser.rb +++ b/lib/rss/parser.rb @@ -392,7 +392,7 @@ module RSS start_have_something_element(local, prefix, attrs, ns, next_class) else if !@do_validate or @ignore_unknown_element - @proc_stack.push(nil) + @proc_stack.push(setup_next_element_in_unknown_element) else parent = "ROOT ELEMENT???" if current_class.tag_name @@ -423,13 +423,22 @@ module RSS [$1 || '', $2] end - def check_ns(tag_name, prefix, ns, require_uri) - unless _ns(ns, prefix) == require_uri - if @do_validate + def check_ns(tag_name, prefix, ns, require_uri, ignore_unknown_element=nil) + if _ns(ns, prefix) == require_uri + true + else + if ignore_unknown_element.nil? + ignore_unknown_element = @ignore_unknown_element + end + + if ignore_unknown_element + false + elsif @do_validate raise NSError.new(tag_name, prefix, require_uri) else # Force bind required URI with prefix @ns_stack.last[prefix] = require_uri + true end end end @@ -456,9 +465,12 @@ module RSS end def start_have_something_element(tag_name, prefix, attrs, ns, klass) - check_ns(tag_name, prefix, ns, klass.required_uri) - attributes = collect_attributes(tag_name, prefix, attrs, ns, klass) - @proc_stack.push(setup_next_element(tag_name, klass, attributes)) + if check_ns(tag_name, prefix, ns, klass.required_uri) + attributes = collect_attributes(tag_name, prefix, attrs, ns, klass) + @proc_stack.push(setup_next_element(tag_name, klass, attributes)) + else + @proc_stack.push(setup_next_element_in_unknown_element) + end end def collect_attributes(tag_name, prefix, attrs, ns, klass) @@ -525,6 +537,11 @@ module RSS @last_element = previous end end + + def setup_next_element_in_unknown_element + current_element, @last_element = @last_element, nil + Proc.new {@last_element = current_element} + end end unless const_defined? :AVAILABLE_PARSER_LIBRARIES |