[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]