validator/httpd/cgi-bin check,1.572,1.573

Update of /sources/public/validator/httpd/cgi-bin
In directory hutz:/tmp/cvs-serv633/httpd/cgi-bin

Modified Files:
	check 
Log Message:
Fix for http://www.w3.org/Bugs/Public/show_bug.cgi?id=3663

Checking if doctype-less documents display patterns specific to SVG
(svg root element, with or without version/baseProfile attributes)
and, upon detection, applying "fake" doctype override to help validation
of doctype-less SVG 1.0, 1.1 (including Tiny and Basic).



Index: check
===================================================================
RCS file: /sources/public/validator/httpd/cgi-bin/check,v
retrieving revision 1.572
retrieving revision 1.573
diff -u -d -r1.572 -r1.573
--- check	27 Sep 2007 10:13:36 -0000	1.572
+++ check	3 Oct 2007 10:42:08 -0000	1.573
@@ -267,6 +267,9 @@
 $File->{Warnings}   = []; # Warnings...
 $File->{Namespaces} = []; # Other (non-root) Namespaces.
 
+# By default, doctype-less documents can not be valid
+$File->{"DOCTYPEless OK"} = FALSE;
+
 ###############################################################################
 #### Generate Template for Result. ############################################
 ###############################################################################
@@ -1636,8 +1639,10 @@
       $File->{Tentative} |= T_ERROR; # Tag it as Invalid.
     }
   } else {
-
-    if ($File->{Opt}->{FB}->{DOCTYPE}) {
+    if ($File->{"DOCTYPEless OK"}) {
+      &add_warning('W25', {W25_dtd => $File->{Opt}->{DOCTYPE}});
+    }
+    elsif ($File->{Opt}->{FB}->{DOCTYPE}) {
       &add_warning('W16', {W16_dtd => $File->{Opt}->{DOCTYPE}});
       $File->{Tentative} |= T_ERROR; # Tag it as Invalid.
     } else {
@@ -1896,6 +1901,8 @@
       $File->{Root} = $tag;
     }
     if ($attr->{xmlns}) {$File->{Namespace} = $attr->{xmlns}};
+    if ($attr->{version}) {$File->{'Root Version'} = $attr->{version}};
+    if ($attr->{baseProfile}) {$File->{'Root BaseProfile'} = $attr->{baseProfile}};
   };
 
   # we use HTML::Parser as pre-parser. May use html5lib or other in the future
@@ -1916,9 +1923,50 @@
   $File->{DOCTYPE} =~ s(\s+$){ }g;
   $File->{DOCTYPE} =~ s(\s+) { }g;
 
+  # Some document types actually need no doctype to be identified,
+  # root element and some version attribute is enough
+  # TODO applicable doctypes should be migrated to a config file?
+  
+  if (($File->{DOCTYPE} eq '') and ($File->{Root} eq "svg") ) {
+    if (($File->{'Root Version'}) or ($File->{'Root BaseProfile'}))
+    {
+      if ($File->{'Root Version'} eq "1.0"){
+        $File->{DOCTYPE} = "-//W3C//DTD SVG 1.0//EN";
+        $File->{"DOCTYPEless OK"} = TRUE;
+        $File->{Opt}->{DOCTYPE} = "SVG 1.0";
+      } 
+      elsif ((($File->{'Root Version'} eq "1.1") or (!$File->{'Root Version'})) and ($File->{'Root BaseProfile'} eq "tiny")) {
+          $File->{DOCTYPE} = "-//W3C//DTD SVG Tiny 1.1//EN";
+          $File->{"DOCTYPEless OK"} = TRUE;
+          $File->{Opt}->{DOCTYPE} = "SVG 1.1 Tiny";
+      }
+      elsif ((($File->{'Root Version'} eq "1.1")  or (!$File->{'Root Version'})) and ($File->{'Root BaseProfile'} eq "basic")) {
+          $File->{DOCTYPE} = "-//W3C//DTD SVG Basic 1.1//EN";
+          $File->{Opt}->{DOCTYPE} = "SVG 1.1 Basic";
+          $File->{"DOCTYPEless OK"} = TRUE;
+      }
+      elsif (($File->{'Root Version'} eq "1.1") and (!$File->{'Root BaseProfile'})) {
+          $File->{DOCTYPE} = "-//W3C//DTD SVG 1.1//EN";
+          $File->{Opt}->{DOCTYPE} = "SVG 1.1";
+          $File->{"DOCTYPEless OK"} = TRUE;
+      }
+    }
+    else {
+      # by default for an svg root elt, we use SVG 1.1
+      $File->{DOCTYPE} = "-//W3C//DTD SVG 1.1//EN";
+      $File->{Opt}->{DOCTYPE} = "SVG 1.1";
+      $File->{"DOCTYPEless OK"} = TRUE;
+    }
+  }
+  if (($File->{"DOCTYPEless OK"}) and ($File->{Opt}->{DOCTYPE})) {
+    # doctypeless document type found, we fake the override 
+    # so that the parser will have something to validate against
+    $File = &override_doctype($File);
+  }
   return $File;
 }
 
+
 #
 # Print out the raw error output for debugging.
 sub show_errors ($) {

Received on Wednesday, 3 October 2007 10:42:19 UTC