| Forest documentation | Contained in the Forest distribution. |
Forest::Tree::Writer::ASCIIWithBranches - A slightly more complex ASCII writer
use Forest::Tree::Writer::ASCIIWithBranches; my $w = Forest::Tree::Writer::ASCIIWithBranches->new(tree => $tree); print $w->as_string; # outputs .... # root # |---1.0 # | |---1.1 # | |---1.2 # | |---1.2.1 # |---2.0 # | |---2.1 # |---3.0 # |---4.0 # |---4.1 # |---4.1.1
All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT.
Stevan Little <stevan.little@iinteractive.com>
Copyright 2008-2010 Infinity Interactive, Inc.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Forest documentation | Contained in the Forest distribution. |
package Forest::Tree::Writer::ASCIIWithBranches; use Moose; our $VERSION = '0.09'; our $AUTHORITY = 'cpan:STEVAN'; with 'Forest::Tree::Writer', 'Forest::Tree::Roles::HasNodeFormatter'; sub as_string { my ($self) = @_; my $out = ''; my @vert_dashes; $self->tree->traverse(sub { my $t = shift; $out .= $self->_process_node($t, \@vert_dashes); }); return $out; } sub _process_node { my ($self, $t, $vert_dashes) = @_; my $depth = $t->depth; my $sibling_count = $t->is_root ? 1 : $t->parent->child_count; my @indent = map { $vert_dashes->[$_] || " " } 0 .. $depth - 1; @$vert_dashes = ( @indent, ($sibling_count == 1 ? (" ") : (" |")) ); if ($sibling_count == ($t->get_index_in_siblings + 1)) { $vert_dashes->[$depth] = " "; } return ((join "" => @indent[1 .. $#indent]) . ($depth ? " |---" : "") . $self->format_node($t) . "\n"); } __PACKAGE__->meta->make_immutable; no Moose; 1; __END__