| Forest documentation | Contained in the Forest distribution. |
Forest::Tree::Reader::SimpleTextFile - A reader for Forest::Tree heirarchies
This module is deprecated. You should use Forest::Tree::Builder::SimpleTextFile instead.
This reads simple .tree files, which are basically the tree represented as a tabbed heirarchy.
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::Reader::SimpleTextFile; use Moose; our $VERSION = '0.09'; our $AUTHORITY = 'cpan:STEVAN'; use Forest::Tree::Builder::SimpleTextFile; with qw(Forest::Tree::Reader Forest::Tree::Constructor); # see new_subtree_callback below # FIXME these are for compat... remove them? has 'tab_width' => ( is => 'rw', isa => 'Int', default => 4 ); has 'parser' => ( is => 'rw', isa => 'CodeRef', lazy => 1, builder => 'build_parser', ); sub build_parser { return sub { my ($self, $line) = @_; my ($indent, $node) = ($line =~ /^(\s*)(.*)$/); my $depth = ((length $indent) / $self->tab_width); return ($depth, $node); } } sub parse_line { $_[0]->parser->(@_) } # compat endscreate_new_subtree(@_);}, sub read { my ($self, $fh) = @_; my $builder = Forest::Tree::Builder::SimpleTextFile->new( tree_class => ref( $self->tree ), tab_width => $self->tab_width, parser => $self->parser, fh => $fh, # since it's possible to subclass reader and implement this method, we # include Forest::Tree::Constructor into this class as well, and make # the builder use that definition (which under normal circumstances # will be the same, Forest::Tree::Constructor::create_new_subtree) new_subtree_callback => sub { my ( $builder, @args ) = @_; $self->create_new_subtree(@args); }, ); $self->tree->add_child($_) for @{ $builder->subtrees }; } __PACKAGE__->meta->make_immutable; no Moose; 1; __END__