📄 simpletree.pm
字号:
require 5;package Pod::Simple::SimpleTree;use strict;use Carp ();use Pod::Simple ();use vars qw( $ATTR_PAD @ISA $VERSION $SORT_ATTRS);$VERSION = '2.02';BEGIN { @ISA = ('Pod::Simple'); *DEBUG = \&Pod::Simple::DEBUG unless defined &DEBUG;}__PACKAGE__->_accessorize( 'root', # root of the tree);#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sub _handle_element_start { # self, tagname, attrhash DEBUG > 2 and print "Handling $_[1] start-event\n"; my $x = [$_[1], $_[2]]; if($_[0]{'_currpos'}) { push @{ $_[0]{'_currpos'}[0] }, $x; # insert in parent's child-list unshift @{ $_[0]{'_currpos'} }, $x; # prefix to stack } else { DEBUG and print " And oo, it gets to be root!\n"; $_[0]{'_currpos'} = [ $_[0]{'root'} = $x ]; # first event! set to stack, and set as root. } DEBUG > 3 and print "Stack is now: ", join(">", map $_->[0], @{$_[0]{'_currpos'}}), "\n"; return;}sub _handle_element_end { # self, tagname DEBUG > 2 and print "Handling $_[1] end-event\n"; shift @{$_[0]{'_currpos'}}; DEBUG > 3 and print "Stack is now: ", join(">", map $_->[0], @{$_[0]{'_currpos'}}), "\n"; return;}sub _handle_text { # self, text DEBUG > 2 and print "Handling $_[1] text-event\n"; push @{ $_[0]{'_currpos'}[0] }, $_[1]; return;}# A bit of evil from the black box... please avert your eyes, kind souls.sub _traverse_treelet_bit { DEBUG > 2 and print "Handling $_[1] paragraph event\n"; my $self = shift; push @{ $self->{'_currpos'}[0] }, [@_]; return;}#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1;__END__=head1 NAMEPod::Simple::SimpleTree -- parse Pod into a simple parse tree =head1 SYNOPSIS % cat ptest.pod =head1 PIE I like B<pie>! % perl -MPod::Simple::SimpleTree -MData::Dumper -e \ "print Dumper(Pod::Simple::SimpleTree->new->parse_file(shift)->root)" \ ptest.pod $VAR1 = [ 'Document', { 'start_line' => 1 }, [ 'head1', { 'start_line' => 1 }, 'PIE' ], [ 'Para', { 'start_line' => 3 }, 'I like ', [ 'B', {}, 'pie' ], '!' ] ];=head1 DESCRIPTIONThis class is of interest to people writing a Pod processor/formatter.This class takes Pod and parses it, returning a parse tree made justof arrayrefs, and hashrefs, and strings.This is a subclass of L<Pod::Simple> and inherits all its methods.This class is inspired by XML::Parser's "Tree" parsing-style, althoughit doesn't use exactly the same LoL format.=head1 METHODSAt the end of the parse, call C<< $parser->root >> to get thetree's top node.=head1 Tree ContentsEvery element node in the parse tree is represented by an arrayref ofthe form: C<[ I<elementname>, \%attributes, I<...subnodes...> ]>.See the example tree dump in the Synopsis, above.Every text node in the tree is represented by a simple (non-ref)string scalar. So you can test C<ref($node)> to see whather you havean element node or just a text node.The top node in the tree is C<[ 'Document', \%attributes,I<...subnodes...> ]>=head1 SEE ALSOL<Pod::Simple>L<perllol>L<The "Tree" subsubsection in XML::Parser|XML::Parser/"Tree">=head1 COPYRIGHT AND DISCLAIMERSCopyright (c) 2002 Sean M. Burke. All rights reserved.This library is free software; you can redistribute it and/or modify itunder the same terms as Perl itself.This program is distributed in the hope that it will be useful, butwithout any warranty; without even the implied warranty ofmerchantability or fitness for a particular purpose.=head1 AUTHORSean M. Burke C<sburke@cpan.org>=cut
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -