ruby-changes:11874
From: yugui <ko1@a...>
Date: Fri, 22 May 2009 18:49:19 +0900 (JST)
Subject: [ruby-changes:11874] Ruby:r23532 (ruby_1_9_1): merges r23451 from trunk into ruby_1_9_1.
yugui 2009-05-22 18:49:01 +0900 (Fri, 22 May 2009) New Revision: 23532 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=23532 Log: 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. Modified files: branches/ruby_1_9_1/ChangeLog branches/ruby_1_9_1/lib/rss/0.9.rb branches/ruby_1_9_1/lib/rss/1.0.rb branches/ruby_1_9_1/lib/rss/atom.rb branches/ruby_1_9_1/lib/rss/parser.rb branches/ruby_1_9_1/test/rss/test_parser_1.0.rb branches/ruby_1_9_1/version.h Index: ruby_1_9_1/ChangeLog =================================================================== --- ruby_1_9_1/ChangeLog (revision 23531) +++ ruby_1_9_1/ChangeLog (revision 23532) @@ -1,3 +1,8 @@ +Sat May 16 18:26:42 2009 Kouhei Sutou <kou@c...> + + * lib/rss/parser.rb, test/test_parser_1.0.rb: fix foaf:Image + element causes parse error even if ignore_unknown_element mode. + Sat May 16 18:05:07 2009 Kouhei Sutou <kou@c...> * lib/rss/maker/entry.rb: fix a typo. Index: ruby_1_9_1/lib/rss/parser.rb =================================================================== --- ruby_1_9_1/lib/rss/parser.rb (revision 23531) +++ ruby_1_9_1/lib/rss/parser.rb (revision 23532) @@ -392,7 +392,7 @@ 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 @@ [$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 @@ 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 @@ @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 Index: ruby_1_9_1/lib/rss/1.0.rb =================================================================== --- ruby_1_9_1/lib/rss/1.0.rb (revision 23531) +++ ruby_1_9_1/lib/rss/1.0.rb (revision 23532) @@ -436,7 +436,7 @@ 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 Index: ruby_1_9_1/lib/rss/atom.rb =================================================================== --- ruby_1_9_1/lib/rss/atom.rb (revision 23531) +++ ruby_1_9_1/lib/rss/atom.rb (revision 23532) @@ -716,7 +716,7 @@ 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 @@ 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 Index: ruby_1_9_1/lib/rss/0.9.rb =================================================================== --- ruby_1_9_1/lib/rss/0.9.rb (revision 23531) +++ ruby_1_9_1/lib/rss/0.9.rb (revision 23532) @@ -411,8 +411,7 @@ 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 Index: ruby_1_9_1/version.h =================================================================== --- ruby_1_9_1/version.h (revision 23531) +++ ruby_1_9_1/version.h (revision 23532) @@ -1,6 +1,6 @@ #define RUBY_VERSION "1.9.1" #define RUBY_RELEASE_DATE "2009-05-12" -#define RUBY_PATCHLEVEL 146 +#define RUBY_PATCHLEVEL 147 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 9 #define RUBY_VERSION_TEENY 1 Index: ruby_1_9_1/test/rss/test_parser_1.0.rb =================================================================== --- ruby_1_9_1/test/rss/test_parser_1.0.rb (revision 23531) +++ ruby_1_9_1/test/rss/test_parser_1.0.rb (revision 23532) @@ -507,6 +507,22 @@ #{make_image} EOR end + + def test_unknown_case_insensitive_duplicated_element + xmlns = { + "foaf" => "http://xmlns.com/foaf/0.1/", + "dc" => "http://purl.org/dc/elements/1.1/", + } + assert_parse(make_RDF(<<-EOR, xmlns), :nothing_raised) + #{make_channel} + #{make_item} + #{make_image} + <foaf:Image rdf:about="http://example.com/myself.png"> + <dc:title>Myself</dc:title> + <dc:link>http://example.com/</dc:link> + </foaf:Image> + EOR + end end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/