markup-validator commit: Simplify doctype overriding start element handler.

changeset:   3273:aaa4f829403b
tag:         tip
user:        Ville Skyttä <ville.skytta@iki.fi>
date:        Mon Dec 12 21:36:36 2011 +0200
files:       httpd/cgi-bin/check
description:
Simplify doctype overriding start element handler.


diff -r 772799001c73 -r aaa4f829403b httpd/cgi-bin/check
--- a/httpd/cgi-bin/check	Mon Dec 12 21:30:42 2011 +0200
+++ b/httpd/cgi-bin/check	Mon Dec 12 21:36:36 2011 +0200
@@ -2195,7 +2195,6 @@
     my $org_dtd      = '';
     my $HTML         = '';
     my $seen_doctype = FALSE;
-    my $seen_root    = FALSE;
 
     my $declaration = sub {
         my ($tag, $text) = @_;
@@ -2231,29 +2230,18 @@
     };
 
     my $start_element = sub {
-        if ($seen_root) {
-            $HTML .= $_[0];    # Stash it as is... moving on
-        }
-        else {
-            $seen_root = TRUE;
-            if ($seen_doctype) {
-
-                # doctype addition already done, we move on
-                $HTML .= $_[0];
-            }
-            else {
-
-                # no original doctype present, hence none replaced already
-                # => we sneak the chosen doctype before the root elt
-                $HTML .= "$dtd$_[0]";
-            }
-        }
+        my $p = shift;
+        # Sneak chosen doctype before the root elt if none replaced thus far.
+        $HTML .= $dtd unless $seen_doctype;
+        $HTML .= shift;
+        # We're done with this handler.
+        $p->handler(start => undef);
     };
 
     HTML::Parser->new(
         default_h => [sub { $HTML .= shift }, 'text'],
         declaration_h => [$declaration,   'tag,text'],
-        start_h       => [$start_element, 'text']
+        start_h       => [$start_element, 'self,text']
     )->parse(join "\n", @{$File->{Content}})->eof();
 
     $File->{Content} = [split /\n/, $HTML];

Received on Monday, 12 December 2011 19:38:55 UTC