#!/usr/bin/perl
#HTML version
use strict;use warnings;
use ArrayRef2HTMLTree;
my $t=[
[
[[[[["a", "b"], "c"], ["d", "e"]], [[["f", "g"], "h"], [["i", "j"], ["k", ["l", "m"]]]]],
["n", [[["o", "p"], "q"], ["r", "s"]]]], ["t", ["u", "v"]]
],
[["w", ["x", "y"]], "z"]
];
my $ht = ArrayRef2HTMLTree->new(font_size=>'8pt',line_height=>'10px');
print $ht->to_html($t);
####
#
package ArrayRef2HTMLTree;
use strict; use warnings;
our $HTML;
sub new{
my $class=shift;
my %args=@_;
$args{line_height}='10px' if(! exists $args{line_height});
$args{font_size}='8pt' if(! exists $args{font_size});
return bless \%args ,$class;
}
sub to_html{
my $self=shift;
my $t=shift;
my $tree=join('', '' , "\n" , traverse($t,0) , "\n", '
', "\n");
my $html=$HTML;
$html =~ s/#TREE#/$tree/s;
$html =~ s/#LINE-HEIGHT#/$self->{line_height}/s;
$html =~ s/#FONT-SIZE#/$self->{font_size}/s;
return $html;
}
sub traverse {
my ($t,$depth)=@_;
my $tab="\t"x$depth;
if (ref($t) eq 'ARRAY'){
return
$tab , "($depth)" , "\n" ,
(map{ traverse($_,$depth+1) } @$t) ,
$tab, "
" , "\n";
} else {
return "$tab$t\n";
}
}
$HTML=<<'HTML';
#TREE#
HTML
1;