-
Notifications
You must be signed in to change notification settings - Fork 7
/
demo-pod
144 lines (89 loc) · 2.38 KB
/
demo-pod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!perl
use strict;
use warnings;
use Moose::Autobox;
use Pod::Eventual::Simple;
use Pod::Elemental;
use Pod::Elemental::Selectors -all;
use Pod::Elemental::Transformer::Pod5;
use Pod::Elemental::Transformer::Nester;
use Pod::Elemental::Transformer::Gatherer;
my $str = do { local $/; <DATA> };
my $document = Pod::Elemental->read_string($str);
print "## INPUT DOCUMENT:\n\n";
print $str, "\n\n";
print "## INITIAL DOCUMENT LOAD:\n\n";
print $document->as_debug_string, "\n\n";
Pod::Elemental::Transformer::Pod5->transform_node($document);
print "## AFTER TRANSFORM TO POD5:\n\n";
print $document->as_debug_string, "\n\n";
my $nester = Pod::Elemental::Transformer::Nester->new({
top_selector => s_command([ qw(head1 method) ]),
content_selectors => [
s_flat,
s_command( [ qw(head2 head3 head4 over item back) ]),
],
});
my $gatherer = Pod::Elemental::Transformer::Gatherer->new({
gather_selector => s_command([ qw(method) ]),
container => Pod::Elemental::Element::Nested->new({
command => 'head1',
content => "METHODS\n",
}),
});
$nester->transform_node($document);
print "## AFTER NESTING HEAD1 AND METHOD ELEMENTS:\n\n";
print $document->as_debug_string, "\n\n";
$gatherer->transform_node($document);
print "## AFTER GATHERING METHOD ELEMENTS UNDER CONTAINER:\n\n";
print $document->as_debug_string, "\n\n";
$gatherer->container->children->grep(s_command('method'))->each_value(sub {
$_->command('head2');
});
print "## AFTER TRANSFORMING METHOD ELEMENTS TO HEAD2:\n\n";
print $document->as_debug_string, "\n\n";
print "## FINAL POD OUTPUT:\n\n";
print $document->as_pod_string;
__DATA__
=pod
Ordinary Paragraph 1.1
=begin :dialect Pod7
This is a paragraph.
=image foo
=end :dialect
=head1 Header 1.1
=head2 Header 2.1
=method foo
Ordinary Paragraph 2.1
=over 2
=item * bar
=back
=head2 Header 2.2
Ordinary Paragraph 2.2
=head3 Header 3.1
=over 4
=item * foo
=back
=head1 Header 1.2
Ordinary Paragraph 2.3
Ordinary Paragraph 2.4
=begin comments
This is a big comment I have to write down.
It's not important, but it goes on and on.
=end comments
=method quux
Ordinary Paragraph 2.4
=cut
=method quince
my $method = $obj->quince(1,2,3);
The above will work.
The following will not:
my $method = $obj->quince(3,2,1);
=cut
sub quince {
my ($self, @args) = @_;
die unless increasing(@args);
return ordinality(@args);
}
=pod
Is that clear?