The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use XML::DT ;

my $filename = shift;

$f=sub{for (@isa) {$ind{$_}= [@{$ind{$_}},[$url,$title]]};
                        $url=$title="";
                        @isa=();
                        "<li>$c"};

%xml=( 'foto'    => $f,
       'desenho' => $f,
       'aguarela'=> $f,
       'url'     => sub{$url=$c;""},
       'title'   => sub{$title=$c;"<a href=\"$url\">$c</a>[$res]<br>"},
       'isa'     => sub{push(@isa,n($c));" (<i>$c</i>)"},
       'author'  => sub{ " <b>$c</b> " },
       'resol'   => sub{$res=$c;""},
       'arq'     => sub{$c},
#      '-default'=> sub{"<li> $q:$c"},
       '-outputenc' => 'ISO-8859-1',
     );

$imglist = "<ol>" . dt($filename,%xml). "</ol>" ;

print "<h1>Arquivo de imagens</h1>",
      mkind(%ind), 
      "<h2>Lista das imagens</h2> $imglist";  
   
sub mkind{ my %a=@_;
  my $r="<h2>Indice</h2><ul>";
  for $p (sort keys %a){
    $r.= "<li>$p -- <ul> ".
          join("",map{"<li><a href=\"$_->[0]\">$_->[1]</a>\n"} @{$a{$p}}).
         "</ul>" ;
  }
  $r . "</ul>";
}

sub n{ my $a= lc(shift) ;
  for($a){ s/^ +//; s/ +$//; s/  +/ /g; } $a; }