Index: check =================================================================== RCS file: /sources/public/validator/httpd/cgi-bin/check,v retrieving revision 1.413 diff -u -r1.413 check --- check 31 Mar 2005 21:33:04 -0000 1.413 +++ check 6 Apr 2005 04:25:09 -0000 @@ -1724,16 +1724,10 @@ sub preparse_doctype { my $File = shift; - # - # Reset DOCTYPE, Root (for second invocation, probably not needed anymore). - $File->{DOCTYPE} = ''; - $File->{Root} = ''; - my $dtd = sub { return if $File->{Root}; - ($File->{Root}, $File->{DOCTYPE}) = shift =~ m()si; }; - + my $start = sub { my $tag = shift; my $attr = shift; @@ -1747,14 +1741,25 @@ if ($attr->{xmlns}) {$File->{Namespace} = $attr->{xmlns}}; }; - my $p = HTML::Parser->new(api_version => 3); - $p->xml_mode(TRUE); - $p->ignore_elements('BODY'); - $p->ignore_elements('body'); - $p->handler(declaration => $dtd, 'text'); - $p->handler(start => $start, 'tag,attr'); - $p->parse(join "\n", @{$File->{Content}}); + if (! $File->{DOCTYPE}){ + my $allcontent = join "\n", @{$File->{Content}}; + if ($allcontent =~ /]*)>/iso){ + my $genericdoctype = $1; + $_ = $genericdoctype; + if (m:.(\w+)\s+PUBLIC\s+(.*):iso) + { + my $publicdoctype = $2; + $publicdoctype =~ m/[\"\']([^\"\']+)[\"\']/; + $File->{DOCTYPE} = $1; + } + elsif (m:(\w+)\s+SYSTEM\s+[\"\'](.*)[\"\']:iso) + { + # nothing yet + } + + } + } $File->{DOCTYPE} = '' unless defined $File->{DOCTYPE}; $File->{DOCTYPE} =~ s(^\s+){ }g; $File->{DOCTYPE} =~ s(\s+$){ }g;