#!/usr/local/ymir/perl/bin/perl -w use strict; use HTML::TokeParser; use LWP::UserAgent; &do_work(@ARGV); sub do_work { my $UA; foreach my $filename (@_?@_:('-')) { print "[$filename]\n"; my $src; if( $filename eq '-' ) { $src = \*STDIN; }elsif( $filename =~ m|^\w+://| ) { $UA or $UA = LWP::UserAgent->new(timeout=>5); my $res = $UA->get($filename); if( !$res->is_success() ) { print "$filename: ".$res->status_line()."\n"; next; } my $html = $res->content(); $src = \$html; }else { $src = $filename; }; my $p = HTML::TokeParser->new($src); my $nest = 0; while( my $tag = $p->get_tag(qw(form /form input select textarea)) ) { my $tagname = $tag->[0]; my $isstarttag = $tagname!~/^\//; my $attr = $isstarttag ? $tag->[1] : {}; my $tagsrc = $tagname!~/^\// ? $tag->[3] : $tag->[1]; $tagname eq '/form' and --$nest; my $pad = ' 'x$nest; #print "$filename: $pad$tagsrc\n"; print "$filename: $pad$tagname"; $tagname eq 'form' && $attr->{action} and print qq| action="$attr->{action}"|; $tagname eq 'input' && $attr->{type} and print qq| type="$attr->{type}"|; $isstarttag && $attr->{name} and print qq| name="$attr->{name}"|; print "\n"; $tagname eq 'form' and ++$nest; } } }