~ubuntu-branches/ubuntu/vivid/horae/vivid

« back to all changes in this revision

Viewing changes to 0CPAN/Pod-Simple-3.03/lib/Pod/Simple/SimpleTree.pm

  • Committer: Bazaar Package Importer
  • Author(s): Carlo Segre
  • Date: 2006-12-26 11:54:29 UTC
  • Revision ID: james.westby@ubuntu.com-20061226115429-kjuhf6h9w6bohlwj
Tags: upstream-063
ImportĀ upstreamĀ versionĀ 063

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
 
 
3
require 5;
 
4
package Pod::Simple::SimpleTree;
 
5
use strict;
 
6
use Carp ();
 
7
use Pod::Simple ();
 
8
use vars qw( $ATTR_PAD @ISA $VERSION $SORT_ATTRS);
 
9
$VERSION = '2.02';
 
10
BEGIN {
 
11
  @ISA = ('Pod::Simple');
 
12
  *DEBUG = \&Pod::Simple::DEBUG unless defined &DEBUG;
 
13
}
 
14
 
 
15
__PACKAGE__->_accessorize(
 
16
  'root',   # root of the tree
 
17
);
 
18
 
 
19
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
20
 
 
21
sub _handle_element_start { # self, tagname, attrhash
 
22
  DEBUG > 2 and print "Handling $_[1] start-event\n";
 
23
  my $x = [$_[1], $_[2]];
 
24
  if($_[0]{'_currpos'}) {
 
25
    push    @{ $_[0]{'_currpos'}[0] }, $x; # insert in parent's child-list
 
26
    unshift @{ $_[0]{'_currpos'} },    $x; # prefix to stack
 
27
  } else {
 
28
    DEBUG and print " And oo, it gets to be root!\n";
 
29
    $_[0]{'_currpos'} = [   $_[0]{'root'} = $x   ];
 
30
      # first event!  set to stack, and set as root.
 
31
  }
 
32
  DEBUG > 3 and print "Stack is now: ",
 
33
    join(">", map $_->[0], @{$_[0]{'_currpos'}}), "\n";
 
34
  return;
 
35
}
 
36
 
 
37
sub _handle_element_end { # self, tagname
 
38
  DEBUG > 2 and print "Handling $_[1] end-event\n";
 
39
  shift @{$_[0]{'_currpos'}};
 
40
  DEBUG > 3 and print "Stack is now: ",
 
41
    join(">", map $_->[0], @{$_[0]{'_currpos'}}), "\n";
 
42
  return;
 
43
}
 
44
 
 
45
sub _handle_text { # self, text
 
46
  DEBUG > 2 and print "Handling $_[1] text-event\n";
 
47
  push @{ $_[0]{'_currpos'}[0] }, $_[1];
 
48
  return;
 
49
}
 
50
 
 
51
 
 
52
# A bit of evil from the black box...  please avert your eyes, kind souls.
 
53
sub _traverse_treelet_bit {
 
54
  DEBUG > 2 and print "Handling $_[1] paragraph event\n";
 
55
  my $self = shift;
 
56
  push @{ $self->{'_currpos'}[0] }, [@_];
 
57
  return;
 
58
}
 
59
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
60
1;
 
61
__END__
 
62
 
 
63
=head1 NAME
 
64
 
 
65
Pod::Simple::SimpleTree -- parse Pod into a simple parse tree 
 
66
 
 
67
=head1 SYNOPSIS
 
68
 
 
69
  % cat ptest.pod
 
70
  
 
71
  =head1 PIE
 
72
  
 
73
  I like B<pie>!
 
74
  
 
75
  % perl -MPod::Simple::SimpleTree -MData::Dumper -e \
 
76
     "print Dumper(Pod::Simple::SimpleTree->new->parse_file(shift)->root)" \
 
77
     ptest.pod
 
78
  
 
79
  $VAR1 = [
 
80
            'Document',
 
81
            { 'start_line' => 1 },
 
82
            [
 
83
              'head1',
 
84
              { 'start_line' => 1 },
 
85
              'PIE'
 
86
            ],
 
87
            [
 
88
              'Para',
 
89
              { 'start_line' => 3 },
 
90
              'I like ',
 
91
              [
 
92
                'B',
 
93
                {},
 
94
                'pie'
 
95
              ],
 
96
              '!'
 
97
            ]
 
98
          ];
 
99
 
 
100
=head1 DESCRIPTION
 
101
 
 
102
This class is of interest to people writing a Pod processor/formatter.
 
103
 
 
104
This class takes Pod and parses it, returning a parse tree made just
 
105
of arrayrefs, and hashrefs, and strings.
 
106
 
 
107
This is a subclass of L<Pod::Simple> and inherits all its methods.
 
108
 
 
109
This class is inspired by XML::Parser's "Tree" parsing-style, although
 
110
it doesn't use exactly the same LoL format.
 
111
 
 
112
=head1 METHODS
 
113
 
 
114
At the end of the parse, call C<< $parser->root >> to get the
 
115
tree's top node.
 
116
 
 
117
=head1 Tree Contents
 
118
 
 
119
Every element node in the parse tree is represented by an arrayref of
 
120
the form: C<[ I<elementname>, \%attributes, I<...subnodes...> ]>.
 
121
See the example tree dump in the Synopsis, above.
 
122
 
 
123
Every text node in the tree is represented by a simple (non-ref)
 
124
string scalar.  So you can test C<ref($node)> to see whather you have
 
125
an element node or just a text node.
 
126
 
 
127
The top node in the tree is C<[ 'Document', \%attributes,
 
128
I<...subnodes...> ]>
 
129
 
 
130
 
 
131
=head1 SEE ALSO
 
132
 
 
133
L<Pod::Simple>
 
134
 
 
135
L<perllol>
 
136
 
 
137
L<The "Tree" subsubsection in XML::Parser|XML::Parser/"Tree">
 
138
 
 
139
=head1 COPYRIGHT AND DISCLAIMERS
 
140
 
 
141
Copyright (c) 2002 Sean M. Burke.  All rights reserved.
 
142
 
 
143
This library is free software; you can redistribute it and/or modify it
 
144
under the same terms as Perl itself.
 
145
 
 
146
This program is distributed in the hope that it will be useful, but
 
147
without any warranty; without even the implied warranty of
 
148
merchantability or fitness for a particular purpose.
 
149
 
 
150
=head1 AUTHOR
 
151
 
 
152
Sean M. Burke C<sburke@cpan.org>
 
153
 
 
154
=cut
 
155