[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]

[PATCH] CGI.pm DTD and script "type" attributes



Thanks very much.  Its just been incorporated into version 2.57.

Lincoln


Aaron J Mackey writes:
 > 
 > These are the changes I needed to make to CGI.pm to have output validate
 > cleanly at validator.w3.org/, namely adding the "type" attribute to
 > <script> tags generated during start_html and specifying a full DTD,
 > including URI.
 > 
 > Here's the patch, if anyone cares for it.
 > 
 > -Aaron
 > 
 > --- /usr/lib/perl5/5.00503/CGI_old.pm	Mon Sep 13 21:06:11 1999
 > +++ /usr/lib/perl5/5.00503/CGI.pm	Tue Jan 11 18:00:53 2000
 > @@ -31,7 +31,8 @@
 >  
 >      # Change this to the preferred DTD to print in start_html()
 >      # or use default_dtd('text of DTD to use');
 > -    $DEFAULT_DTD = '-//IETF//DTD HTML//EN';
 > +    $DEFAULT_DTD = [ '-//W3C//DTD HTML 4.01 Transitional//EN',
 > +		     'http://www.w3.org/TR/html4/loose.dtd' ] ;
 >  
 >      # Set this to 1 to enable NPH scripts
 >      # or: 
 > @@ -1342,8 +1343,20 @@
 >      $title = $self->escapeHTML($title || 'Untitled Document');
 >      $author = $self->escape($author);
 >      my(@result);
 > -    $dtd = $DEFAULT_DTD unless $dtd && $dtd =~ m|^-//|;
 > -    push(@result,qq(<!DOCTYPE HTML PUBLIC "$dtd">)) if $dtd;
 > +    if ($dtd) {
 > +        if (ref $dtd && $ref eq 'ARRAY') {
 > +            $dtd = $DEFAULT_DTD unless $dtd->[0] =~ m|^-//|;
 > +        } else {
 > +            $dtd = $DEFAULT_DTD unless $dtd =~ m|^-//|;
 > +        }
 > +    } else {
 > +        $dtd = $DEFAULT_DTD;
 > +    }
 > +    if (ref($dtd) && ref($dtd) eq 'ARRAY') {
 > +        push(@result,qq(<!DOCTYPE HTML PUBLIC "$dtd->[0]"\n\t"$dtd->[1]">));
 > +    } else {
 > +        push(@result,qq(<!DOCTYPE HTML PUBLIC "$dtd">));
 > +    }
 >      push(@result,"<HTML><HEAD><TITLE>$title</TITLE>");
 >      push(@result,"<LINK REV=MADE HREF=\"mailto:$author\">") if defined $author;
 >  
 > @@ -1408,21 +1421,32 @@
 >      foreach $script (@scripts) {
 >  	my($src,$code,$language);
 >  	if (ref($script)) { # script is a hash
 > -	    ($src,$code,$language) =
 > -		$self->rearrange([SRC,CODE,LANGUAGE],
 > +	    ($src,$code,$language, $type) =
 > +		$self->rearrange([SRC,CODE,LANGUAGE,TYPE],
 >  				 '-foo'=>'bar',	# a trick to allow the '-' to be omitted
 >  				 ref($script) eq 'ARRAY' ? @$script : %$script);
 > -	    
 > +            # User may not have specified language
 > +            $language ||= 'JavaScript';
 > +            unless (defined $type) {
 > +                $type = lc $language;
 > +                # strip '1.2' from 'javascript1.2'
 > +                $type =~ s/^(\D+).*$/text\/$1/;
 > +            }
 >  	} else {
 > -	    ($src,$code,$language) = ('',$script,'JavaScript');
 > +	    ($src,$code,$language, $type) = ('',$script,'JavaScript', 'text/javascript');
 >  	}
 >  	my(@satts);
 >  	push(@satts,'src'=>$src) if $src;
 > -	push(@satts,'language'=>$language || 'JavaScript');
 > +	push(@satts,'language'=>$language);
 > +        push(@satts,'type'=>$type);
 >  	$code = "<!-- Hide script\n$code\n// End script hiding -->"
 > -	    if $code && $language=~/javascript/i;
 > +	    if $code && $type=~/javascript/i;
 > +	$code = "<!-- Hide script\n$code\n\# End script hiding -->"
 > +	    if $code && $type=~/perl/i;
 >  	$code = "<!-- Hide script\n$code\n\# End script hiding -->"
 > -	    if $code && $language=~/perl/i;
 > +	    if $code && $type=~/tcl/i;
 > +        $code = "<!-- Hide script\n$code\n' End script hiding -->"
 > +            if $code && $type=~/vbscript/i;
 >  	push(@result,script({@satts},$code || ''));
 >      }
 >      @result;
 > @@ -2757,8 +2781,12 @@
 >  ####
 >  'default_dtd' => <<'END_OF_FUNC',
 >  sub default_dtd {
 > -    my ($self,$param) = self_or_CGI(@_);
 > -    $CGI::DEFAULT_DTD = $param if defined($param);
 > +    my ($self,$param,$param2) = self_or_CGI(@_);
 > +    if (defined $param2 && defined $param) {
 > +        $CGI::DEFAULT_DTD = [ $param, $param2 ];
 > +    } elsif (defined $param) {
 > +        $CGI::DEFAULT_DTD = $param;
 > +    }
 >      return $CGI::DEFAULT_DTD;
 >  }
 >  END_OF_FUNC

-- 
========================================================================
Lincoln D. Stein                           Cold Spring Harbor Laboratory
lstein@cshl.org			                  Cold Spring Harbor, NY
========================================================================


References to:
Aaron J Mackey <ajm6q@virginia.edu>

[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]