#! /usr/local/bin/perl -w # # html-parse - example script for HTML::Rainbow # # This script shows how to pick up a page from # the web and run the text through HTML::Rainbow # to produce a new, improved psychedelic version. # # This tends to ride rough-shod over CSS pages, # the improvement of which is left as an # exercise to the reader. # # Copyright (C) David Landgren 2005 use strict; use LWP::Simple; use HTML::Parser; use HTML::Rainbow; use constant DEBUG => 0; my $URI = shift || 'http://www.perl.com/'; my $content = get( $URI ); if( not $content ) { die "$URI is unavailable\n"; } my $in_body = 0; my $r = HTML::Rainbow->new; my $p = HTML::Parser->new( api_version => 3, start_h => [ sub { my $tag = shift; my $attr = shift; ++$in_body if $tag eq 'body'; my $attlist; if( not $attr ) { $attlist = ''; } else { my @attr_pair; while( my( $key, $value ) = each %$attr ) { # renormalise things that look like local URIs $value =~ s{^[/.]}{$URI$1}g; push @attr_pair, qq{$key="$value"}; } $attlist = join( ' ', ('', @attr_pair)); } print "<$tag$attlist>"; }, "tagname, attr", ], end_h => [ sub { print "" }, "tagname", ], text_h => [ sub { print $in_body ? $r->rainbow($_[0]) : $_[0] }, "dtext", ], ); $p->parse($content); $p->eof(); =head1 NAME html-parser - Parse an HTML page and run the text through a rainbow =head1 SYNOPSIS B url =head1 DESCRIPTION Downloads an HTML page and parses the text sections to run them through a rainbow. The result is best viewed in a browser. =head1 OPTIONS None. =head1 SEE ALSO L L =head1 AUTHOR David Landgren Copyright 2005 David Landgren. All rights reserved. =head1 LICENSE This script is free software; you can redistribute it and/or modify it under the same terms as Perl itself.