#! /usr/bin/perl
use strict ;
use warnings ;
use Carp ;
use Data::TreeDumper ;
our $s ;
do "s" ;
$Data::TreeDumper::Useascii = 1 ;
print DumpTree($s, 'Unaltered data structure') ;
#-------------------------------------------------------------------------------
# Tree Coloring example
#-------------------------------------------------------------------------------
use Term::ANSIColor qw(:constants) ;
my @colors = map
{
Term::ANSIColor::color($_) ;
}
(
'red'
, 'green'
, 'yellow'
, 'blue'
, 'magenta'
, 'cyan'
) ;
#-------------------------------------------------------------------------------
# level coloring
#-------------------------------------------------------------------------------
sub ColorLevels
{
my $level = shift ;
my $index = $level % @colors ;
return($colors[$index], '') ;
}
print Data::TreeDumper::DumpTree($s, "Level coloring using a sub", COLOR_LEVELS => \&ColorLevels, NUMBER_LEVELS => 2) ;
print Term::ANSIColor::color('reset') ;
sub ColorLevelsGlyphs
{
my $level = shift ;
my $index = $level % @colors ;
return($colors[$index], Term::ANSIColor::color('reset')) ;
}
print Data::TreeDumper::DumpTree($s, "Level glyph coloring using a sub", COLOR_LEVELS => \&ColorLevelsGlyphs) ;
print Data::TreeDumper::DumpTree($s, "Level coloring using an array", COLOR_LEVELS => [\@colors, '']) ;
print Term::ANSIColor::color('reset') ;
print Data::TreeDumper::DumpTree($s, "Level glyph coloring using an array", COLOR_LEVELS => [\@colors, Term::ANSIColor::color('reset')]) ;
#-------------------------------------------------------------------------------
# label coloring
#-------------------------------------------------------------------------------
sub ColorLabel
{
my ($tree, $level, $path, $nodes_to_display, $setup) = @_ ;
if('HASH' eq ref $tree)
{
my @keys_to_dump ;
for my $key_name (keys %$tree)
{
my $index = ord(substr($key_name, 0, 1)) % @colors ;
my $reset_color = $setup->{__ANSI_COLOR_RESET} || Term::ANSIColor::color('reset') ;
$key_name =
[
$key_name
, $colors[$index] . $key_name . $reset_color
] ;
push @keys_to_dump, $key_name ;
}
return ('HASH', undef, @keys_to_dump) ;
}
return (Data::TreeDumper::DefaultNodesToDisplay($tree)) ;
}
print Data::TreeDumper::DumpTree($s, "Colored labels (using a filter)", FILTER => \&ColorLabel) ;
#allowing for a tree color
print $colors[3] ;
print Data::TreeDumper::DumpTree($s, "Colored tree and labels", FILTER => \&ColorLabel, __ANSI_COLOR_RESET => $colors[3]) ;
print Term::ANSIColor::color('reset') ;