hrefsub02.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:42 2010 from hrefsub02.pl 2006/09/17 2.5 KB.

#!/perl -w
# hrefsub - make substitutions in <A HREF="..."> fields of HTML files
# from Gisle Aas <gisle@aas.no>
# using HTML sample below
# and run with
# hrefsub.pl this that temp.htm
# this was close, but
# <p><a href="this" onmousemove="mm(self);"></p>
# was translated to ...
# <p><a href="that " onmousemove="mm(self); "></p>
# this seems 'fixed' if the line
#   $tmp .= qq( $_="$encoded ");
# is changed to
#   $tmp .= qq( $_="$encoded");
# WILL MAKE THIS CHANGE IN THE ORIGINAL
#sub usage { die "Usage: $0 <from> <to> <file>...\n" }
my $from = shift || 'this';
my $to   = shift || 'that';
##usage unless @ARGV;
# The HTML::Filter subclass to do the substitution.
package MyFilter;
require HTML::Filter;
@ISA=qw(HTML::Filter);
use HTML::Entities qw(encode_entities);
my $dbg1 = 0;
sub start {
   my($self, $tag, $attr, $attrseq, $orig) = @_;
   if ($tag eq 'a' && exists $attr->{href}) {
      my $val = $attr->{href};
      if ($val =~ /$from/) {
           ###if ($attr->{href} =~ s/\Q$from/$to/g) {
         print "Got [$val] ...\n" if ($dbg1);
           if ($val =~ s/\Q$from/$to/g) {
            $attr->{href} = $val;
            print "Changed to [$val] ...\n" if ($dbg1);
               # must reconstruct the start tag based on $tag and $attr.
               # wish we instead were told the extent of the 'href' value
               # in $orig.
               my $tmp = "<$tag";
            my $acnt = scalar @$attrseq;
            my $cnt = 0;
               for (@$attrseq) {
                   my $encoded = encode_entities($attr->{$_});
               $cnt++;
               ##if ($cnt < $acnt) {
                  ##    $tmp .= qq( $_="$encoded ");
               ##} else {
                      $tmp .= qq( $_="$encoded");
               ##}
               print "encoded [$encoded]\n" if ($dbg1);
               }
               $tmp .= ">";
            print "new [$tmp]\n" if ($dbg1);
               $self->output($tmp);
               return;
           }
      }
   }
   $self->output($orig);
}
# Now use the class.
package main;
###foreach (@ARGV) {
###        MyFilter->new->parse_file($_);
###}
my $fil = 'temphtm.htm';
my $sample = <<EOF;
<html>
<head>
<title>test.htm</title>
</head>
<body>
<p><a href="this.htm" onmousemove="mm(self);" onmousehover="mh(self);" onmouseout="mo(self);">test</a></p>
</body>
</html>
EOF
open WOF, ">$fil" or die "ERROR: Unable to open $fil!!!\n";
print WOF $sample;
close WOF;
###MyFilter->new->parse_file($_);
MyFilter->new->parse_file($fil);
#-----------------------------
#eof - hrefsub02.pl - 2006.09.17

index -|- top

checked by tidy  Valid HTML 4.01 Transitional