line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
=pod |
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
=begin classdoc |
4
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
Generates and merges Pod::ProjectDocs, Pod::Classdoc, |
6
|
|
|
|
|
|
|
and PPI::HTML::CodeFolderoutput, then generates a Javascripted |
7
|
|
|
|
|
|
|
tree widget (via HTML::ListToTree) to navigate the merged |
8
|
|
|
|
|
|
|
manuals, classdocs, and folded/highlighted source code. |
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
@author Dean Arnold |
11
|
|
|
|
|
|
|
@exports renderProject() the only public method |
12
|
|
|
|
|
|
|
@see Pod::ProjectDocs |
13
|
|
|
|
|
|
|
@see Pod::Classdoc |
14
|
|
|
|
|
|
|
@see PPI::HTML::CodeFolder |
15
|
|
|
|
|
|
|
@see HTML::ListToTree |
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
=end classdoc |
18
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
=cut |
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
package Pod::Classdoc::Project; |
22
|
|
|
|
|
|
|
|
23
|
2
|
|
|
2
|
|
4858
|
use Pod::ProjectDocs; |
|
2
|
|
|
|
|
591428
|
|
|
2
|
|
|
|
|
20
|
|
24
|
2
|
|
|
2
|
|
9078
|
use Pod::Classdoc; |
|
2
|
|
|
|
|
7
|
|
|
2
|
|
|
|
|
74
|
|
25
|
2
|
|
|
2
|
|
24
|
use JSON; |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
25
|
|
26
|
2
|
|
|
2
|
|
389
|
use Exporter; |
|
2
|
|
|
|
|
5
|
|
|
2
|
|
|
|
|
103
|
|
27
|
|
|
|
|
|
|
|
28
|
2
|
|
|
2
|
|
14
|
use base('Exporter'); |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
249
|
|
29
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
@EXPORT = ('renderProject'); |
31
|
|
|
|
|
|
|
|
32
|
2
|
|
|
2
|
|
12
|
use strict; |
|
2
|
|
|
|
|
474
|
|
|
2
|
|
|
|
|
709
|
|
33
|
2
|
|
|
2
|
|
290
|
use warnings; |
|
2
|
|
|
|
|
5
|
|
|
2
|
|
|
|
|
11793
|
|
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
our $VERSION = '1.01'; |
36
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
our %defaults = ( |
38
|
|
|
|
|
|
|
'Heredocs', 1, |
39
|
|
|
|
|
|
|
'POD', 1, |
40
|
|
|
|
|
|
|
'Comments', 1, |
41
|
|
|
|
|
|
|
'Expandable', 1, |
42
|
|
|
|
|
|
|
'Imports', 1, |
43
|
|
|
|
|
|
|
'MinFoldLines', 4, |
44
|
|
|
|
|
|
|
); |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
=pod |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
=begin classdoc |
49
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
Generates merged project documentation from Pod::ProjectDocs, |
51
|
|
|
|
|
|
|
Pod::Classdoc, and PPI::HTML::CodeFOlder output, |
52
|
|
|
|
|
|
|
with a table of contents widget generated from HTML::ListToTree. |
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
@optional Additions HTML document to be appended to the TOC widget |
55
|
|
|
|
|
|
|
@optional Comments boolean; if true (the default), fold comments in PPI::HTML::CodeFolder output |
56
|
|
|
|
|
|
|
@optional Charset specifies character set for Pod::ProjectDocs |
57
|
|
|
|
|
|
|
@optional CloseImage name of closed node icon in TOC; default 'closedbook.gif' |
58
|
|
|
|
|
|
|
@optional CSSPath path to CSS files; default is <Output>/css |
59
|
|
|
|
|
|
|
@optional Description specifies description header for Pod::ProjectDocs |
60
|
|
|
|
|
|
|
@optional Download specifies a download file to be appended to the TOC widget |
61
|
|
|
|
|
|
|
@optional Expandable boolean; if true (the default), folds in PPI::HTML::CodeFolder output are expandable |
62
|
|
|
|
|
|
|
@optional Force boolean; if true, forces generation of all Pod::ProjectDocs documents |
63
|
|
|
|
|
|
|
@optional Heredoc boolean; if true (the default), fold heredocs in PPI::HTML::CodeFolder output |
64
|
|
|
|
|
|
|
@optional Imports boolean; if true (the default), fold imports in PPI::HTML::CodeFolder output |
65
|
|
|
|
|
|
|
@optional IconPath path to icon images for TOC; default is <Output>/img |
66
|
|
|
|
|
|
|
@optional JSPath path to Javascript files; default is <Output>/js |
67
|
|
|
|
|
|
|
@optional Language specifies language info for Pod::ProjectDocs |
68
|
|
|
|
|
|
|
@optional Libs library directories to be processed; defaults to './lib' and './bin' |
69
|
|
|
|
|
|
|
@optional MinFoldLines minimum number of lines for codefolding; default 4 |
70
|
|
|
|
|
|
|
@optional NoIcons boolean; if true (default false), TOC will not use icons |
71
|
|
|
|
|
|
|
@optional NoSource boolean; if true (default false), omit PPI::HTML::CodeFolder source processing |
72
|
|
|
|
|
|
|
@optional OpenImage name of open node icon in TOC; default 'openbook.gif' |
73
|
|
|
|
|
|
|
@optional Order arrayref of package/script names; TOC nodes will be ordered in same order |
74
|
|
|
|
|
|
|
as this list. Any unlisted packages/scripts will be alphabetically ordered |
75
|
|
|
|
|
|
|
after these nodes are included. |
76
|
|
|
|
|
|
|
@optional Output root path of output files; default './classdocs' |
77
|
|
|
|
|
|
|
@optional POD boolean; if true (the default), fold POD in PPI::HTML::CodeFolder output |
78
|
|
|
|
|
|
|
@optional RootImage name of root node icon in TOC; default 'globe.gif' |
79
|
|
|
|
|
|
|
@optional Title title string for HTML document, and root node of TOC |
80
|
|
|
|
|
|
|
@optional Verbose boolean; if true, emits lots of diagnostic info |
81
|
|
|
|
|
|
|
|
82
|
|
|
|
|
|
|
@static |
83
|
|
|
|
|
|
|
|
84
|
|
|
|
|
|
|
=end classdoc |
85
|
|
|
|
|
|
|
|
86
|
|
|
|
|
|
|
=cut |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
sub renderProject { |
89
|
0
|
|
|
0
|
0
|
|
my %args = @_; |
90
|
|
|
|
|
|
|
|
91
|
0
|
|
0
|
|
|
|
my $out = $args{Output} || './classdocs'; |
92
|
0
|
|
0
|
|
|
|
my $csspath = $args{CSSPath} || "$out/css"; |
93
|
0
|
|
0
|
|
|
|
my $jspath = $args{JSPath} || "$out/js"; |
94
|
0
|
|
0
|
|
|
|
my $imgpath = $args{Iconpath} || "$out/img"; |
95
|
0
|
|
0
|
|
|
|
my $openimg = $args{OpenImage} || 'openbook.gif'; |
96
|
0
|
|
0
|
|
|
|
my $closeimg = $args{CloseImage} || 'closedbook.gif'; |
97
|
0
|
|
0
|
|
|
|
my $rootimg = $args{RootImage} || 'globe.gif'; |
98
|
0
|
|
0
|
|
|
|
$args{Title} ||= 'My Project'; |
99
|
|
|
|
|
|
|
|
100
|
0
|
|
|
|
|
|
while (my ($k, $v) = each %defaults) { |
101
|
0
|
0
|
|
|
|
|
$args{$k} = $v unless exists $args{$k}; |
102
|
|
|
|
|
|
|
} |
103
|
|
|
|
|
|
|
|
104
|
0
|
0
|
|
|
|
|
unless ($args{NoSource}) { |
105
|
0
|
|
|
|
|
|
eval { |
106
|
0
|
|
|
|
|
|
require PPI::HTML::CodeFolder; |
107
|
|
|
|
|
|
|
}; |
108
|
0
|
0
|
|
|
|
|
$args{NoSource} = 1, |
109
|
|
|
|
|
|
|
warn "Cannot generate codefolded sources:\n$@\n" |
110
|
|
|
|
|
|
|
if $@; |
111
|
|
|
|
|
|
|
} |
112
|
|
|
|
|
|
|
|
113
|
0
|
|
|
|
|
|
my $notree; |
114
|
0
|
|
|
|
|
|
eval { |
115
|
0
|
|
|
|
|
|
require HTML::ListToTree; |
116
|
|
|
|
|
|
|
}; |
117
|
0
|
0
|
|
|
|
|
$notree = 1, |
118
|
|
|
|
|
|
|
warn "Cannot generate tree table of contents:\n$@\n" |
119
|
|
|
|
|
|
|
if $@; |
120
|
|
|
|
|
|
|
# |
121
|
|
|
|
|
|
|
# first generate project docs; note that this |
122
|
|
|
|
|
|
|
# copies source files into the outroot/src path |
123
|
|
|
|
|
|
|
# |
124
|
0
|
0
|
|
|
|
|
print "\nGenerating ProjectDocs..." |
125
|
|
|
|
|
|
|
if $args{Verbose}; |
126
|
|
|
|
|
|
|
|
127
|
0
|
|
|
|
|
|
$args{Libs} = [ './lib', './bin' ] |
128
|
0
|
0
|
0
|
|
|
|
unless $args{Libs} && ref $args{Libs} && ($#{$args{Libs}} >= 0); |
|
|
|
0
|
|
|
|
|
129
|
|
|
|
|
|
|
|
130
|
0
|
0
|
|
|
|
|
Pod::ProjectDocs->new( |
131
|
|
|
|
|
|
|
outroot => $out, |
132
|
|
|
|
|
|
|
libroot => $args{Libs}, |
133
|
|
|
|
|
|
|
title => $args{Title}, |
134
|
|
|
|
|
|
|
desc => $args{Description}, |
135
|
|
|
|
|
|
|
charset => $args{CharSet}, |
136
|
|
|
|
|
|
|
index => 1, |
137
|
|
|
|
|
|
|
verbose => $args{Verbose}, |
138
|
|
|
|
|
|
|
forcegen => $args{Force}, |
139
|
|
|
|
|
|
|
lang => $args{Language}, |
140
|
|
|
|
|
|
|
)->gen() or die $@; |
141
|
|
|
|
|
|
|
# |
142
|
|
|
|
|
|
|
# then generate classdocs |
143
|
|
|
|
|
|
|
# |
144
|
0
|
0
|
|
|
|
|
print "done\nCollecting source files..." |
145
|
|
|
|
|
|
|
if $args{Verbose}; |
146
|
|
|
|
|
|
|
|
147
|
0
|
|
|
|
|
|
my $path = "$out/src"; |
148
|
0
|
|
|
|
|
|
my @dirs = (); |
149
|
0
|
0
|
|
|
|
|
die $@ |
150
|
|
|
|
|
|
|
unless _recurseDirs($path, \@dirs); |
151
|
|
|
|
|
|
|
|
152
|
0
|
0
|
|
|
|
|
print "done\nScanning ", join(', ', @dirs), "\n" |
153
|
|
|
|
|
|
|
if $args{Verbose}; |
154
|
|
|
|
|
|
|
|
155
|
0
|
|
|
|
|
|
my @files = (); |
156
|
0
|
|
|
|
|
|
foreach my $p (@dirs) { |
157
|
0
|
0
|
0
|
|
|
|
warn "$p directory not found" and |
158
|
|
|
|
|
|
|
next |
159
|
|
|
|
|
|
|
unless opendir(PATH, $p); |
160
|
|
|
|
|
|
|
# |
161
|
|
|
|
|
|
|
# recurse the directory to find all .pm files; |
162
|
|
|
|
|
|
|
# |
163
|
0
|
|
|
|
|
|
my @tfiles = readdir PATH; |
164
|
0
|
|
|
|
|
|
closedir PATH; |
165
|
|
|
|
|
|
|
|
166
|
0
|
|
|
|
|
|
push @files, map "$p/$_", grep /\.pm$/, @tfiles; |
167
|
|
|
|
|
|
|
} |
168
|
|
|
|
|
|
|
|
169
|
0
|
0
|
|
|
|
|
my $classdocs = Pod::Classdoc::ForProjectTOC->new($out, $args{Title}, $args{Verbose}) or die $@; |
170
|
|
|
|
|
|
|
|
171
|
0
|
|
|
|
|
|
my %sources = (); |
172
|
0
|
|
|
|
|
|
my $HTML; |
173
|
0
|
0
|
|
|
|
|
unless ($args{NoSource}) { |
174
|
0
|
|
|
|
|
|
my %tagcolors = ( |
175
|
|
|
|
|
|
|
cast => '#339999', |
176
|
|
|
|
|
|
|
comment => '#008080', |
177
|
|
|
|
|
|
|
core => '#FF0000', |
178
|
|
|
|
|
|
|
double => '#999999', |
179
|
|
|
|
|
|
|
heredoc => '#FF0000', |
180
|
|
|
|
|
|
|
heredoc_content => '#FF0000', |
181
|
|
|
|
|
|
|
heredoc_terminator => '#FF0000', |
182
|
|
|
|
|
|
|
interpolate => '#999999', |
183
|
|
|
|
|
|
|
keyword => '#0000FF', |
184
|
|
|
|
|
|
|
line_number => '#666666', |
185
|
|
|
|
|
|
|
literal => '#999999', |
186
|
|
|
|
|
|
|
magic => '#0099FF', |
187
|
|
|
|
|
|
|
match => '#9900FF', |
188
|
|
|
|
|
|
|
number => '#990000', |
189
|
|
|
|
|
|
|
operator => '#DD7700', |
190
|
|
|
|
|
|
|
pod => '#008080', |
191
|
|
|
|
|
|
|
pragma => '#990000', |
192
|
|
|
|
|
|
|
regex => '#9900FF', |
193
|
|
|
|
|
|
|
single => '#999999', |
194
|
|
|
|
|
|
|
substitute => '#9900FF', |
195
|
|
|
|
|
|
|
transliterate => '#9900FF', |
196
|
|
|
|
|
|
|
word => '#999999', |
197
|
|
|
|
|
|
|
); |
198
|
|
|
|
|
|
|
|
199
|
0
|
0
|
|
|
|
|
$HTML = PPI::HTML::CodeFolder->new( |
200
|
|
|
|
|
|
|
line_numbers => 1, |
201
|
|
|
|
|
|
|
page => 1, |
202
|
|
|
|
|
|
|
colors => \%tagcolors, |
203
|
|
|
|
|
|
|
verbose => $args{Verbose}, |
204
|
|
|
|
|
|
|
fold => { |
205
|
|
|
|
|
|
|
Abbreviate => 1, |
206
|
|
|
|
|
|
|
Heredocs => $args{Heredocs}, |
207
|
|
|
|
|
|
|
POD => $args{POD}, |
208
|
|
|
|
|
|
|
Comments => $args{Comments}, |
209
|
|
|
|
|
|
|
Expandable => $args{Expandable}, |
210
|
|
|
|
|
|
|
Imports => $args{Imports}, |
211
|
|
|
|
|
|
|
MinFoldLines => $args{MinFoldLines}, |
212
|
|
|
|
|
|
|
Javascript => "$jspath/ppicf.js", |
213
|
|
|
|
|
|
|
Stylesheet => "$csspath/ppicf.css", |
214
|
|
|
|
|
|
|
}, |
215
|
|
|
|
|
|
|
) |
216
|
|
|
|
|
|
|
or die "\nFailed to create a PPI::HTML::CodeFolder"; |
217
|
|
|
|
|
|
|
} |
218
|
|
|
|
|
|
|
|
219
|
0
|
|
|
|
|
|
foreach my $file (@files) { |
220
|
|
|
|
|
|
|
# |
221
|
|
|
|
|
|
|
# add a file to the classdocs |
222
|
|
|
|
|
|
|
# |
223
|
0
|
0
|
|
|
|
|
print "$file: generating classdocs...\r" |
224
|
|
|
|
|
|
|
if $args{Verbose}; |
225
|
0
|
|
|
|
|
|
my $Document = $classdocs->open($file); |
226
|
|
|
|
|
|
|
|
227
|
0
|
0
|
|
|
|
|
unless ($args{NoSource}) { |
228
|
|
|
|
|
|
|
# |
229
|
|
|
|
|
|
|
# codefold/highlight the file |
230
|
|
|
|
|
|
|
# |
231
|
0
|
0
|
|
|
|
|
print "$file: generating codefolded source...\r" |
232
|
|
|
|
|
|
|
if $args{Verbose}; |
233
|
|
|
|
|
|
|
|
234
|
0
|
|
|
|
|
|
my $outfile = substr($file, length($path) + 1); |
235
|
0
|
0
|
|
|
|
|
my $t = $HTML->html( $Document, "$out/$outfile.html" ) |
236
|
|
|
|
|
|
|
or die "\nFailed to generate HTML"; |
237
|
|
|
|
|
|
|
# |
238
|
|
|
|
|
|
|
# create output in output file |
239
|
|
|
|
|
|
|
# |
240
|
0
|
0
|
|
|
|
|
open(OUTF, ">$out/$outfile.html") or die "Can't create $out/$outfile.html: $!"; |
241
|
0
|
|
|
|
|
|
print OUTF $t; |
242
|
0
|
|
|
|
|
|
close OUTF; |
243
|
|
|
|
|
|
|
# |
244
|
|
|
|
|
|
|
# don't need the original sources now |
245
|
|
|
|
|
|
|
# |
246
|
0
|
|
|
|
|
|
unlink $file; |
247
|
|
|
|
|
|
|
} |
248
|
|
|
|
|
|
|
} |
249
|
|
|
|
|
|
|
|
250
|
0
|
|
|
|
|
|
foreach ($out, $csspath, $jspath, $imgpath) { |
251
|
0
|
0
|
|
|
|
|
mkdir $_ |
252
|
|
|
|
|
|
|
unless -d $_; |
253
|
|
|
|
|
|
|
} |
254
|
|
|
|
|
|
|
|
255
|
0
|
0
|
|
|
|
|
print "\nRendering classdocs...\n" |
256
|
|
|
|
|
|
|
if $args{Verbose}; |
257
|
|
|
|
|
|
|
|
258
|
0
|
|
|
|
|
|
$classdocs->writeClassdocs(1); |
259
|
|
|
|
|
|
|
# |
260
|
|
|
|
|
|
|
# generate the TOC |
261
|
|
|
|
|
|
|
# |
262
|
0
|
|
|
|
|
|
$/ = undef; |
263
|
0
|
0
|
|
|
|
|
print "Generating table of contents...\n" |
264
|
|
|
|
|
|
|
if $args{Verbose}; |
265
|
|
|
|
|
|
|
# |
266
|
|
|
|
|
|
|
# extract index from root document |
267
|
|
|
|
|
|
|
# |
268
|
0
|
0
|
|
|
|
|
open INF, "$out/index.html" or die $!; |
269
|
0
|
|
|
|
|
|
my $html = ; |
270
|
0
|
|
|
|
|
|
close INF; |
271
|
|
|
|
|
|
|
# |
272
|
|
|
|
|
|
|
# get rid of search box and adjust path separators as needed |
273
|
|
|
|
|
|
|
# |
274
|
0
|
|
|
|
|
|
$html=~s! \s* Search.*?!!s; |
275
|
0
|
|
|
|
|
|
$html=~s!\.\\!./!gs; |
276
|
0
|
|
|
|
|
|
$html=~s!\\\\!/!gs; |
277
|
|
|
|
|
|
|
# |
278
|
|
|
|
|
|
|
# replace current index page after edits |
279
|
|
|
|
|
|
|
# |
280
|
0
|
0
|
|
|
|
|
open OUTF, ">$out/project.html" |
281
|
|
|
|
|
|
|
or die "Cannot create $out/project.html: $!"; |
282
|
0
|
|
|
|
|
|
print OUTF $html; |
283
|
0
|
|
|
|
|
|
close OUTF; |
284
|
|
|
|
|
|
|
|
285
|
0
|
|
|
|
|
|
my ($list) = ($html=~/var\s+managers\s*=\s*([^\n]+)\n/); |
286
|
|
|
|
|
|
|
|
287
|
0
|
0
|
|
|
|
|
$list = substr($list, 0, -1) if (substr($list, -1) eq ';'); |
288
|
|
|
|
|
|
|
|
289
|
0
|
|
|
|
|
|
$list = jsonToObj($list); |
290
|
|
|
|
|
|
|
|
291
|
0
|
|
|
|
|
|
my $mans = $list->[0]; |
292
|
0
|
0
|
0
|
|
|
|
die "Unrecognizable project index\n" |
293
|
|
|
|
|
|
|
unless ($mans->{desc} eq 'Package Manuals') || |
294
|
|
|
|
|
|
|
($mans->{desc} eq 'Perl Manuals'); |
295
|
|
|
|
|
|
|
# |
296
|
|
|
|
|
|
|
# locate any manfiles and map to package names |
297
|
|
|
|
|
|
|
# |
298
|
0
|
|
|
|
|
|
my %manuals = (); |
299
|
0
|
|
|
|
|
|
$_->{name}=~s/-/::/g, |
300
|
|
|
|
|
|
|
$_->{path}=~tr/\\/\//, |
301
|
|
|
|
|
|
|
$manuals{$_->{name}} = { |
302
|
|
|
|
|
|
|
Manual => $_->{path}, |
303
|
|
|
|
|
|
|
TOC => _extractTOC(join('/', $out, $_->{path}), $csspath) |
304
|
|
|
|
|
|
|
} |
305
|
0
|
|
|
|
|
|
foreach (@{$mans->{records}}); |
306
|
|
|
|
|
|
|
|
307
|
0
|
0
|
|
|
|
|
my $toc = $classdocs->getProjectTOC( |
308
|
|
|
|
|
|
|
Manuals => \%manuals, |
309
|
|
|
|
|
|
|
SourceMap => $HTML ? $HTML->getCrossReference() : undef, |
310
|
|
|
|
|
|
|
GroupExternals => 1, |
311
|
|
|
|
|
|
|
Additions => $args{Additions}, |
312
|
|
|
|
|
|
|
Order => $args{Order} |
313
|
|
|
|
|
|
|
); |
314
|
0
|
|
|
|
|
|
($toc) = ($toc=~/(.*?)/s); |
315
|
|
|
|
|
|
|
|
316
|
|
|
|
|
|
|
# open OUTF, ">testoc.html"; |
317
|
|
|
|
|
|
|
# print OUTF $toc; |
318
|
|
|
|
|
|
|
# close OUTF; |
319
|
|
|
|
|
|
|
# |
320
|
|
|
|
|
|
|
# replace index page with frameset |
321
|
|
|
|
|
|
|
# |
322
|
0
|
0
|
|
|
|
|
open(INDEX, ">$out/index.html") or die $!; |
323
|
0
|
|
|
|
|
|
print INDEX |
324
|
|
|
|
|
|
|
" |
325
|
|
|
|
|
|
|
|
326
|
|
|
|
|
|
|
$args{Title} |
327
|
|
|
|
|
|
|
|
328
|
|
|
|
|
|
|
|
329
|
|
|
|
|
|
|
|
330
|
|
|
|
|
|
|
|
331
|
|
|
|
|
|
|
|
332
|
|
|
|
|
|
|
|
333
|
|
|
|
|
|
|
"; |
334
|
0
|
|
|
|
|
|
close INDEX; |
335
|
|
|
|
|
|
|
# |
336
|
|
|
|
|
|
|
# render the TOC and write it out; |
337
|
|
|
|
|
|
|
# add any download link, and current generate timestamp |
338
|
|
|
|
|
|
|
# |
339
|
0
|
|
|
|
|
|
my $download = $args{Download}; |
340
|
0
|
0
|
|
|
|
|
if ($download) { |
341
|
0
|
|
|
|
|
|
my @parts = split /[\\\/]/, $download; |
342
|
0
|
|
|
|
|
|
$download = "$parts[-1] "; |
343
|
|
|
|
|
|
|
} |
344
|
|
|
|
|
|
|
else { |
345
|
0
|
|
|
|
|
|
$download = ''; |
346
|
|
|
|
|
|
|
} |
347
|
|
|
|
|
|
|
|
348
|
0
|
|
|
|
|
|
$download .= "Generated by Pod::Classdoc::Project v.$VERSION at " . _trimtime() . ''; |
349
|
0
|
0
|
|
|
|
|
unless ($notree) { |
350
|
0
|
0
|
|
|
|
|
my $tree = HTML::ListToTree->new( |
351
|
|
|
|
|
|
|
Text => $args{Title}, |
352
|
|
|
|
|
|
|
Link => 'project.html', |
353
|
|
|
|
|
|
|
Source => $toc |
354
|
|
|
|
|
|
|
) |
355
|
|
|
|
|
|
|
or die $@; |
356
|
0
|
|
|
|
|
|
my $widget = $tree->render( |
357
|
|
|
|
|
|
|
CloseIcon => $closeimg, |
358
|
|
|
|
|
|
|
OpenIcon => $openimg, |
359
|
|
|
|
|
|
|
RootIcon => $rootimg, |
360
|
|
|
|
|
|
|
IconPath => _pathAdjust($out, $imgpath), |
361
|
|
|
|
|
|
|
CSSPath => _pathAdjust($out, $csspath) . '/dtree.css', |
362
|
|
|
|
|
|
|
JSPath => _pathAdjust($out, $jspath) . '/dtree.js', |
363
|
|
|
|
|
|
|
UseIcons => (!$args{NoIcons}), |
364
|
|
|
|
|
|
|
Additions => $download, |
365
|
|
|
|
|
|
|
BasePath => $out |
366
|
|
|
|
|
|
|
); |
367
|
|
|
|
|
|
|
|
368
|
0
|
0
|
|
|
|
|
open(TREE, ">$out/toc.html") or die $!; |
369
|
0
|
|
|
|
|
|
print TREE $widget; |
370
|
0
|
|
|
|
|
|
close TREE; |
371
|
|
|
|
|
|
|
# |
372
|
|
|
|
|
|
|
# make sure to write out the extras |
373
|
|
|
|
|
|
|
# |
374
|
0
|
0
|
0
|
|
|
|
die $@ |
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
375
|
|
|
|
|
|
|
unless $tree->writeJavascript("$jspath/dtree.js") && |
376
|
|
|
|
|
|
|
$tree->writeCSS("$csspath/dtree.css") && |
377
|
|
|
|
|
|
|
$tree->writeIcons($imgpath) && |
378
|
|
|
|
|
|
|
((!$HTML) || |
379
|
|
|
|
|
|
|
($HTML->writeJavascript("$jspath/ppicf.js") && |
380
|
|
|
|
|
|
|
$HTML->writeCSS("$csspath/ppicf.css"))); |
381
|
|
|
|
|
|
|
} |
382
|
0
|
|
|
|
|
|
return 1; |
383
|
|
|
|
|
|
|
} |
384
|
|
|
|
|
|
|
|
385
|
|
|
|
|
|
|
sub _trimtime { |
386
|
0
|
|
|
0
|
|
|
my @parts = split /\s+/, (scalar localtime()); |
387
|
0
|
|
|
|
|
|
shift @parts; |
388
|
0
|
|
|
|
|
|
($parts[0], $parts[1], $parts[2]) = ($parts[2], $parts[0], $parts[1] . ','); |
389
|
0
|
|
|
|
|
|
return join(' ', @parts); |
390
|
|
|
|
|
|
|
} |
391
|
|
|
|
|
|
|
|
392
|
|
|
|
|
|
|
sub _recurseDirs { |
393
|
0
|
|
|
0
|
|
|
my ($path, $dirs) = @_; |
394
|
|
|
|
|
|
|
|
395
|
0
|
0
|
|
|
|
|
$@ = "$path directory not found", |
396
|
|
|
|
|
|
|
return undef |
397
|
|
|
|
|
|
|
unless opendir(PATH, $path); |
398
|
|
|
|
|
|
|
# |
399
|
|
|
|
|
|
|
# recurse the directory to find all subdirs |
400
|
|
|
|
|
|
|
# |
401
|
0
|
|
|
|
|
|
my @files = readdir PATH; |
402
|
0
|
|
|
|
|
|
closedir PATH; |
403
|
0
|
|
|
|
|
|
push @$dirs, $path; |
404
|
0
|
|
|
|
|
|
foreach (@files) { |
405
|
|
|
|
|
|
|
return undef |
406
|
0
|
0
|
0
|
|
|
|
if ($_ ne '.') && ($_ ne '..') && (-d "$path/$_") && (!_recurseDirs("$path/$_", $dirs)); |
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
407
|
|
|
|
|
|
|
} |
408
|
0
|
|
|
|
|
|
return 1; |
409
|
|
|
|
|
|
|
} |
410
|
|
|
|
|
|
|
|
411
|
|
|
|
|
|
|
# |
412
|
|
|
|
|
|
|
# extract index from a manual file, and otherwise |
413
|
|
|
|
|
|
|
# beautify the file |
414
|
|
|
|
|
|
|
# |
415
|
|
|
|
|
|
|
sub _extractTOC { |
416
|
0
|
|
|
0
|
|
|
my ($file, $css) = @_; |
417
|
|
|
|
|
|
|
|
418
|
0
|
|
|
|
|
|
my $oldsep = $/; |
419
|
0
|
|
|
|
|
|
$/ = undef; |
420
|
0
|
0
|
|
|
|
|
open INF, $file or die $!; |
421
|
0
|
|
|
|
|
|
my $html = ; |
422
|
0
|
|
|
|
|
|
close INF; |
423
|
0
|
|
|
|
|
|
$/ = $oldsep; |
424
|
|
|
|
|
|
|
|
425
|
0
|
|
|
|
|
|
$html=~s/([^<]+)<\/title>//s; </td>
</tr>
<tr>
<td class="h" >
<a name="426">426</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="427">427</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> return undef </td>
</tr>
<tr>
<td class="h" >
<a name="428">428</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#428-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> unless ($html=~s/<!--\s+INDEX START\s+-->\s+(.+)<!--\s+INDEX END\s+-->//s); </td>
</tr>
<tr>
<td class="h" >
<a name="429">429</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $index = $1; </td>
</tr>
<tr>
<td class="h" >
<a name="430">430</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="431">431</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # clean up stuff we've changed or don't want </td>
</tr>
<tr>
<td class="h" >
<a name="432">432</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="433">433</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#433-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $html=~s!(href=["'])([^"']+)!{ my $t = $2; $t=~tr/\\/\//; $1 . $t; }!egs </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="434">434</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if ($^O eq 'MSWin32'); </td>
</tr>
<tr>
<td class="h" >
<a name="435">435</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $html=~s/<a\s+href="\#TOP".+?<\/a>//gs; </td>
</tr>
<tr>
<td class="h" >
<a name="436">436</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $html=~s/<a\s+href="[^"]+">Source<\/a>//s; </td>
</tr>
<tr>
<td class="h" >
<a name="437">437</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="438">438</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $html=~s!<div class="path">.+?</div>!!s; </td>
</tr>
<tr>
<td class="h" >
<a name="439">439</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="440">440</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $index=~s!<h3 id="TOP">Index</h3>\s*<ul>\s*<li><a href="#NAME">NAME</a></li>!<ul>\n!s; </td>
</tr>
<tr>
<td class="h" >
<a name="441">441</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $index=~s!<hr\s*/>!!s; </td>
</tr>
<tr>
<td class="h" >
<a name="442">442</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="443">443</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # " to keep textpad happy </td>
</tr>
<tr>
<td class="h" >
<a name="444">444</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#444-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> open FRAME, ">$file" or die $!; </td>
</tr>
<tr>
<td class="h" >
<a name="445">445</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> print FRAME $html; </td>
</tr>
<tr>
<td class="h" >
<a name="446">446</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> close FRAME; </td>
</tr>
<tr>
<td class="h" >
<a name="447">447</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> return $index; </td>
</tr>
<tr>
<td class="h" >
<a name="448">448</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="449">449</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="450">450</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> sub _pathAdjust { </td>
</tr>
<tr>
<td class="h" >
<a name="451">451</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--subroutine.html#451-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td class="s"> my ($path, $jspath) = @_; </td>
</tr>
<tr>
<td class="h" >
<a name="452">452</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # return $jspath </td>
</tr>
<tr>
<td class="h" >
<a name="453">453</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # unless (substr($jspath, 0, 2) eq './') && (substr($path, 0, 2) eq './'); </td>
</tr>
<tr>
<td class="h" >
<a name="454">454</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="455">455</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # relative path, adjust as needed from current base </td>
</tr>
<tr>
<td class="h" >
<a name="456">456</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="457">457</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my @parts = split /\//, $path; </td>
</tr>
<tr>
<td class="h" >
<a name="458">458</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my @jsparts = split /\//, $jspath; </td>
</tr>
<tr>
<td class="h" >
<a name="459">459</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # my $jsfile = pop @jsparts; # get rid of filename </td>
</tr>
<tr>
<td class="h" >
<a name="460">460</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # pop @parts; # remove filename </td>
</tr>
<tr>
<td class="h" >
<a name="461">461</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> shift @parts; </td>
</tr>
<tr>
<td class="h" >
<a name="462">462</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> shift @jsparts; # and the relative lead </td>
</tr>
<tr>
<td class="h" >
<a name="463">463</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $prefix = ''; </td>
</tr>
<tr>
<td class="h" >
<a name="464">464</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#464-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> shift @parts, </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td >
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#-2">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="465">465</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> shift @jsparts </td>
</tr>
<tr>
<td class="h" >
<a name="466">466</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> while @parts && @jsparts && ($parts[0] eq $jsparts[0]); </td>
</tr>
<tr>
<td class="h" >
<a name="467">467</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # push @jsparts, $jsfile; </td>
</tr>
<tr>
<td class="h" >
<a name="468">468</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> return ('../' x scalar @parts) . join('/', @jsparts) </td>
</tr>
<tr>
<td class="h" >
<a name="469">469</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="470">470</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="471">471</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="472">472</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 1; </td>
</tr>
<tr>
<td class="h" >
<a name="473">473</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="474">474</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =pod </td>
</tr>
<tr>
<td class="h" >
<a name="475">475</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="476">476</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =begin classdoc </td>
</tr>
<tr>
<td class="h" >
<a name="477">477</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="478">478</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Subclass of <cpan>Pod::Classdoc</cpan> providing methods to </td>
</tr>
<tr>
<td class="h" >
<a name="479">479</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> write a project TOC. </td>
</tr>
<tr>
<td class="h" >
<a name="480">480</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="481">481</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =end classdoc </td>
</tr>
<tr>
<td class="h" >
<a name="482">482</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="483">483</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =cut </td>
</tr>
<tr>
<td class="h" >
<a name="484">484</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="485">485</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> package Pod::Classdoc::ForProjectTOC; </td>
</tr>
<tr>
<td class="h" >
<a name="486">486</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="487">487</a>
</td>
<td class="c3" >
2
</td>
<td >
</td>
<td >
</td>
<td class="c3" >
<a href="blib-lib-Pod-Classdoc-Project-pm--subroutine.html#487-1">
2
</a>
</td>
<td >
</td>
<td >
26
</td>
<td class="s"> use base ('Pod::Classdoc'); </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c3" >
2
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
4
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c3" >
2
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
4528
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="488">488</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="489">489</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =pod </td>
</tr>
<tr>
<td class="h" >
<a name="490">490</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="491">491</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =begin classdoc </td>
</tr>
<tr>
<td class="h" >
<a name="492">492</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="493">493</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Write out a project table of contents document for the current collection of </td>
</tr>
<tr>
<td class="h" >
<a name="494">494</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> classdocs as a nested HTML list. The output filename is 'toc.html'. </td>
</tr>
<tr>
<td class="h" >
<a name="495">495</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> The caller may optionally specify the order of classes in the menu. </td>
</tr>
<tr>
<td class="h" >
<a name="496">496</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="497">497</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @optional Additions string of additional HTML list elements to append to TOC </td>
</tr>
<tr>
<td class="h" >
<a name="498">498</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @optional Manuals hashref mapping package names to manual files </td>
</tr>
<tr>
<td class="h" >
<a name="499">499</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @optional SourceMap hashref mapping packages and methods to their source filename </td>
</tr>
<tr>
<td class="h" >
<a name="500">500</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @optional Order arrayref of packages in the order in which they should appear in TOC; if a partial list, </td>
</tr>
<tr>
<td class="h" >
<a name="501">501</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> any remaining packages will be appended to the TOC in alphabetical order </td>
</tr>
<tr>
<td class="h" >
<a name="502">502</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @optional GroupExternals if true, group external methods separately </td>
</tr>
<tr>
<td class="h" >
<a name="503">503</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="504">504</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @return this object on success, undef on failure, with error message in $@ </td>
</tr>
<tr>
<td class="h" >
<a name="505">505</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="506">506</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =end classdoc </td>
</tr>
<tr>
<td class="h" >
<a name="507">507</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="508">508</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =cut </td>
</tr>
<tr>
<td class="h" >
<a name="509">509</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="510">510</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> sub writeProjectTOC { </td>
</tr>
<tr>
<td class="h" >
<a name="511">511</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--subroutine.html#511-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $self = shift; </td>
</tr>
<tr>
<td class="h" >
<a name="512">512</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $path = $self->{_path}; </td>
</tr>
<tr>
<td class="h" >
<a name="513">513</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#513-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $@ = "Can't open $path/toc.html: $!", </td>
</tr>
<tr>
<td class="h" >
<a name="514">514</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> return undef </td>
</tr>
<tr>
<td class="h" >
<a name="515">515</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> unless CORE::open(OUTF, ">$path/toc.html"); </td>
</tr>
<tr>
<td class="h" >
<a name="516">516</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="517">517</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> print OUTF $self->getProjectTOC(@_); </td>
</tr>
<tr>
<td class="h" >
<a name="518">518</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> close OUTF; </td>
</tr>
<tr>
<td class="h" >
<a name="519">519</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> return $self; </td>
</tr>
<tr>
<td class="h" >
<a name="520">520</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="521">521</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="522">522</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =pod </td>
</tr>
<tr>
<td class="h" >
<a name="523">523</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="524">524</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =begin classdoc </td>
</tr>
<tr>
<td class="h" >
<a name="525">525</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="526">526</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> Generate a project table of contents document for the current collection of </td>
</tr>
<tr>
<td class="h" >
<a name="527">527</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> classdocs as a nested HTML list. Caller may optionally specify </td>
</tr>
<tr>
<td class="h" >
<a name="528">528</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> the order of classes in the menu. </td>
</tr>
<tr>
<td class="h" >
<a name="529">529</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="530">530</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @optional Additions string of additional HTML list elements to append to TOC </td>
</tr>
<tr>
<td class="h" >
<a name="531">531</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @optional Manuals hashref mapping package names to manual files </td>
</tr>
<tr>
<td class="h" >
<a name="532">532</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @optional SourceMap hashref mapping packages and methods to their source filename </td>
</tr>
<tr>
<td class="h" >
<a name="533">533</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @optional Order arrayref of package names in the order in which they should appear in TOC; if a partial list, </td>
</tr>
<tr>
<td class="h" >
<a name="534">534</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> any remaining packages will be appended to the TOC in alphabetical order </td>
</tr>
<tr>
<td class="h" >
<a name="535">535</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @optional GroupExternals if true, group external methods separately </td>
</tr>
<tr>
<td class="h" >
<a name="536">536</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="537">537</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> @return the TOC document </td>
</tr>
<tr>
<td class="h" >
<a name="538">538</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="539">539</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =end classdoc </td>
</tr>
<tr>
<td class="h" >
<a name="540">540</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="541">541</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> =cut </td>
</tr>
<tr>
<td class="h" >
<a name="542">542</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="543">543</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> sub getProjectTOC { </td>
</tr>
<tr>
<td class="h" >
<a name="544">544</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--subroutine.html#544-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $self = shift; </td>
</tr>
<tr>
<td class="h" >
<a name="545">545</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my %args = @_; </td>
</tr>
<tr>
<td class="h" >
<a name="546">546</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#546-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my @order = $args{Order} ? @{$args{Order}} : (); </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="547">547</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#547-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $sources = $args{SourceMap} || {}; </td>
</tr>
<tr>
<td class="h" >
<a name="548">548</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#548-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $manuals = $args{Manuals} || {}; </td>
</tr>
<tr>
<td class="h" >
<a name="549">549</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $path = $self->{_path}; </td>
</tr>
<tr>
<td class="h" >
<a name="550">550</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $title = $self->{_title}; </td>
</tr>
<tr>
<td class="h" >
<a name="551">551</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $base; </td>
</tr>
<tr>
<td class="h" >
<a name="552">552</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $doc = </td>
</tr>
<tr>
<td class="h" >
<a name="553">553</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "<html> </td>
</tr>
<tr>
<td class="h" >
<a name="554">554</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <body> </td>
</tr>
<tr>
<td class="h" >
<a name="555">555</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <small> </td>
</tr>
<tr>
<td class="h" >
<a name="556">556</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <!-- INDEX BEGIN --> </td>
</tr>
<tr>
<td class="h" >
<a name="557">557</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <ul> </td>
</tr>
<tr>
<td class="h" >
<a name="558">558</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "; </td>
</tr>
<tr>
<td class="h" >
<a name="559">559</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my %ordered = (); </td>
</tr>
<tr>
<td class="h" >
<a name="560">560</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $ordered{$_} = 1 foreach (@order); </td>
</tr>
<tr>
<td class="h" >
<a name="561">561</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="562">562</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # merge any undoc'd packages </td>
</tr>
<tr>
<td class="h" >
<a name="563">563</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="564">564</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> while (my ($pkg, $pkginfo) = each %$sources) { </td>
</tr>
<tr>
<td class="h" >
<a name="565">565</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#565-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $self->{_classes}{$pkg} = { } </td>
</tr>
<tr>
<td class="h" >
<a name="566">566</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> unless exists $self->{_classes}{$pkg}; </td>
</tr>
<tr>
<td class="h" >
<a name="567">567</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="568">568</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $info = $self->{_classes}{$pkg}; </td>
</tr>
<tr>
<td class="h" >
<a name="569">569</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#569-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $info->{URL} = exists $info->{File} ? join('#', $self->makeClassPath($pkg), $pkg) : $pkginfo->{URL}; </td>
</tr>
<tr>
<td class="h" >
<a name="570">570</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#570-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $info->{Methods} ||= {}; </td>
</tr>
<tr>
<td class="h" >
<a name="571">571</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#571-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $info->{constructors} ||= {}; </td>
</tr>
<tr>
<td class="h" >
<a name="572">572</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $methods = $info->{Methods}; </td>
</tr>
<tr>
<td class="h" >
<a name="573">573</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $constr = $info->{constructors}; </td>
</tr>
<tr>
<td class="h" >
<a name="574">574</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> while (my ($sub, $suburl) = each %{$pkginfo->{Methods}}) { </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="575">575</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#575-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $constr->{$sub}{URL} = join('#_f_', $self->makeClassPath($pkg), $sub), </td>
</tr>
<tr>
<td class="h" >
<a name="576">576</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $constr->{$sub}{Source} = $suburl, </td>
</tr>
<tr>
<td class="h" >
<a name="577">577</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> next </td>
</tr>
<tr>
<td class="h" >
<a name="578">578</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if exists $constr->{$sub}; </td>
</tr>
<tr>
<td class="h" >
<a name="579">579</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="580">580</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#580-1">
0
</a>
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#580-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> print STDERR "*** $pkg\::$sub has no classdocs.\n" </td>
</tr>
<tr>
<td class="h" >
<a name="581">581</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> unless (substr($sub, 0, 1) eq '_') || exists $methods->{$sub}; </td>
</tr>
<tr>
<td class="h" >
<a name="582">582</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="583">583</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#583-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $methods->{$sub}{URL} = $suburl, </td>
</tr>
<tr>
<td class="h" >
<a name="584">584</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> next </td>
</tr>
<tr>
<td class="h" >
<a name="585">585</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> unless exists $methods->{$sub}; </td>
</tr>
<tr>
<td class="h" >
<a name="586">586</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="587">587</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $methods->{$sub}{URL} = join('#_f_', $self->makeClassPath($pkg), $sub); </td>
</tr>
<tr>
<td class="h" >
<a name="588">588</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $methods->{$sub}{Source} = $suburl; </td>
</tr>
<tr>
<td class="h" >
<a name="589">589</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="590">590</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="591">591</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="592">592</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # merge in any manuals </td>
</tr>
<tr>
<td class="h" >
<a name="593">593</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="594">594</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my ($pkg, $manual, $key, $info); </td>
</tr>
<tr>
<td class="h" >
<a name="595">595</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#595-1">
0
</a>
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#595-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $self->{_classes}{$pkg} ||= { }, </td>
</tr>
<tr>
<td class="h" >
<a name="596">596</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $info = $self->{_classes}{$pkg}, </td>
</tr>
<tr>
<td class="h" >
<a name="597">597</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $key = exists $info->{URL} ? 'Manual' : 'URL', </td>
</tr>
<tr>
<td class="h" >
<a name="598">598</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $info->{$key} = $manual->{Manual} </td>
</tr>
<tr>
<td class="h" >
<a name="599">599</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> while (($pkg, $manual) = each %$manuals); </td>
</tr>
<tr>
<td class="h" >
<a name="600">600</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="601">601</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> foreach (sort keys %{$self->{_classes}}) { </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="602">602</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#602-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> push @order, $_ unless exists $ordered{$_}; </td>
</tr>
<tr>
<td class="h" >
<a name="603">603</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="604">604</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="605">605</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> foreach $pkg (@order) { </td>
</tr>
<tr>
<td class="h" >
<a name="606">606</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="607">607</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # due to input @order, we might get classes that don't exist </td>
</tr>
<tr>
<td class="h" >
<a name="608">608</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="609">609</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#609-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> next unless exists $self->{_classes}{$pkg}; </td>
</tr>
<tr>
<td class="h" >
<a name="610">610</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="611">611</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $info = $self->{_classes}{$pkg}; </td>
</tr>
<tr>
<td class="h" >
<a name="612">612</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $base = $pkg; </td>
</tr>
<tr>
<td class="h" >
<a name="613">613</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $base =~s/::/\//g; </td>
</tr>
<tr>
<td class="h" >
<a name="614">614</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$info->{URL}'>$pkg</a>\n<ul>\n"; </td>
</tr>
<tr>
<td class="h" >
<a name="615">615</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="616">616</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # only point to classdocs if we have some </td>
</tr>
<tr>
<td class="h" >
<a name="617">617</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="618">618</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#618-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$base.html#summary'>Summary</a></li> </td>
</tr>
<tr>
<td class="h" >
<a name="619">619</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <li><a href='$base.html'>Description</a></li>\n" </td>
</tr>
<tr>
<td class="h" >
<a name="620">620</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if $info->{File}; </td>
</tr>
<tr>
<td class="h" >
<a name="621">621</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="622">622</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # ditto for manuals </td>
</tr>
<tr>
<td class="h" >
<a name="623">623</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # if no source or docs, dump manual TOC and skip the rest </td>
</tr>
<tr>
<td class="h" >
<a name="624">624</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> # </td>
</tr>
<tr>
<td class="h" >
<a name="625">625</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#625-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= $info->{Manual} ? </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#-2">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="626">626</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "<li><a href='$info->{Manual}'>Manual</a>\n$manuals->{$pkg}{TOC}<!-- END MANUAL -->\n</li>\n" : </td>
</tr>
<tr>
<td class="h" >
<a name="627">627</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> join( '', $manuals->{$pkg}{TOC}, "\n</ul></li>\n") </td>
</tr>
<tr>
<td class="h" >
<a name="628">628</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if exists $manuals->{$pkg}; </td>
</tr>
<tr>
<td class="h" >
<a name="629">629</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="630">630</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my %t; </td>
</tr>
<tr>
<td class="h" >
<a name="631">631</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my ($k, $v); </td>
</tr>
<tr>
<td class="h" >
<a name="632">632</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#632-1">
0
</a>
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#632-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if (exists $info->{exports} && @{$info->{exports}}) { </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="633">633</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$base.html#exports'>Exports</a> </td>
</tr>
<tr>
<td class="h" >
<a name="634">634</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <ul> </td>
</tr>
<tr>
<td class="h" >
<a name="635">635</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "; </td>
</tr>
<tr>
<td class="h" >
<a name="636">636</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> %t = @{$info->{exports}}; </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="637">637</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$base.html#_e_$_'>$_</a></li>\n" </td>
</tr>
<tr>
<td class="h" >
<a name="638">638</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> foreach (sort keys %t); </td>
</tr>
<tr>
<td class="h" >
<a name="639">639</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "</ul><!-- END EXPORTS -->\n</li>\n"; </td>
</tr>
<tr>
<td class="h" >
<a name="640">640</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="641">641</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#641-1">
0
</a>
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#641-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if (exists $info->{imports} && @{$info->{imports}}) { </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="642">642</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$base.html#imports'>Imports</a> </td>
</tr>
<tr>
<td class="h" >
<a name="643">643</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <ul> </td>
</tr>
<tr>
<td class="h" >
<a name="644">644</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "; </td>
</tr>
<tr>
<td class="h" >
<a name="645">645</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> %t = @{$info->{imports}}; </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="646">646</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$base.html#_i_$_'>$_</a></li>\n" </td>
</tr>
<tr>
<td class="h" >
<a name="647">647</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> foreach (sort keys %t); </td>
</tr>
<tr>
<td class="h" >
<a name="648">648</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "</ul><!-- END IMPORTS -->\n</li>\n"; </td>
</tr>
<tr>
<td class="h" >
<a name="649">649</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="650">650</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#650-1">
0
</a>
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#650-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if (exists $info->{member} && @{$info->{member}}) { </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="651">651</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$base.html#members'>Public Members</a> </td>
</tr>
<tr>
<td class="h" >
<a name="652">652</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <ul> </td>
</tr>
<tr>
<td class="h" >
<a name="653">653</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "; </td>
</tr>
<tr>
<td class="h" >
<a name="654">654</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> %t = @{$info->{member}}; </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="655">655</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$base.html#_m_$_'>$_</a></li>\n" </td>
</tr>
<tr>
<td class="h" >
<a name="656">656</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> foreach (sort keys %t); </td>
</tr>
<tr>
<td class="h" >
<a name="657">657</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "</ul><!-- END MEMBERS -->\n</li>\n"; </td>
</tr>
<tr>
<td class="h" >
<a name="658">658</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="659">659</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#659-1">
0
</a>
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#659-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if (exists $info->{constructors} && %{$info->{constructors}}) { </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="660">660</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$base.html#constructor_detail'>Constructors</a> </td>
</tr>
<tr>
<td class="h" >
<a name="661">661</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <ul> </td>
</tr>
<tr>
<td class="h" >
<a name="662">662</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "; </td>
</tr>
<tr>
<td class="h" >
<a name="663">663</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $constr = $info->{constructors}; </td>
</tr>
<tr>
<td class="h" >
<a name="664">664</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> foreach (sort keys %$constr) { </td>
</tr>
<tr>
<td class="h" >
<a name="665">665</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$constr->{$_}{URL}'>$_</a>"; </td>
</tr>
<tr>
<td class="h" >
<a name="666">666</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#666-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<i>(ext.)</i></li>\n", </td>
</tr>
<tr>
<td class="h" >
<a name="667">667</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> next </td>
</tr>
<tr>
<td class="h" >
<a name="668">668</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if $constr->{$_}{External}; </td>
</tr>
<tr>
<td class="h" >
<a name="669">669</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="670">670</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#670-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "</li>\n", </td>
</tr>
<tr>
<td class="h" >
<a name="671">671</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> next </td>
</tr>
<tr>
<td class="h" >
<a name="672">672</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> unless $constr->{$_}{Source}; </td>
</tr>
<tr>
<td class="h" >
<a name="673">673</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="674">674</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= " <ul> </td>
</tr>
<tr>
<td class="h" >
<a name="675">675</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <li><a href='$constr->{$_}{Source}'>Source</a></li> </td>
</tr>
<tr>
<td class="h" >
<a name="676">676</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </ul></li>\n"; </td>
</tr>
<tr>
<td class="h" >
<a name="677">677</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="678">678</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "</ul><!-- END CONSTRUCTORS -->\n</li>\n"; </td>
</tr>
<tr>
<td class="h" >
<a name="679">679</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="680">680</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#680-1">
0
</a>
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#680-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if (exists $info->{Methods} && %{$info->{Methods}}) { </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="681">681</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my %externals = (); </td>
</tr>
<tr>
<td class="h" >
<a name="682">682</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#682-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if ($args{GroupExternals}) { </td>
</tr>
<tr>
<td class="h" >
<a name="683">683</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> while (my ($sub, $subinfo) = each %{$info->{Methods}}) { </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="684">684</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#684-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $externals{$sub} = $subinfo </td>
</tr>
<tr>
<td class="h" >
<a name="685">685</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if $subinfo->{External}; </td>
</tr>
<tr>
<td class="h" >
<a name="686">686</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="687">687</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="688">688</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$base.html#method_detail'>Methods</a> </td>
</tr>
<tr>
<td class="h" >
<a name="689">689</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <ul> </td>
</tr>
<tr>
<td class="h" >
<a name="690">690</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "; </td>
</tr>
<tr>
<td class="h" >
<a name="691">691</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> my $methods = $info->{Methods}; </td>
</tr>
<tr>
<td class="h" >
<a name="692">692</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> foreach (sort keys %$methods) { </td>
</tr>
<tr>
<td class="h" >
<a name="693">693</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#693-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= exists $methods->{$_}{Source} ? </td>
</tr>
<tr>
<td class="h" >
<a > </a>
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#-2">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="694">694</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "<li><a href='$methods->{$_}{URL}'>$_</a>\n<ul>\n<li><a href='$methods->{$_}{Source}'>Source</a></li>\n</ul>\n</li>\n" : </td>
</tr>
<tr>
<td class="h" >
<a name="695">695</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "<li><a href='$methods->{$_}{URL}'>$_</a></li>\n" </td>
</tr>
<tr>
<td class="h" >
<a name="696">696</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> unless exists $externals{$_}; </td>
</tr>
<tr>
<td class="h" >
<a name="697">697</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="698">698</a>
</td>
<td class="c0" >
0
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--branch.html#698-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> if (%externals) { </td>
</tr>
<tr>
<td class="h" >
<a name="699">699</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li>External Methods </td>
</tr>
<tr>
<td class="h" >
<a name="700">700</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <ul> </td>
</tr>
<tr>
<td class="h" >
<a name="701">701</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "; </td>
</tr>
<tr>
<td class="h" >
<a name="702">702</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "<li><a href='$methods->{$_}{URL}'>$_</a></li>\n" </td>
</tr>
<tr>
<td class="h" >
<a name="703">703</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> foreach (sort keys %externals); </td>
</tr>
<tr>
<td class="h" >
<a name="704">704</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "</ul>\n</li>\n"; </td>
</tr>
<tr>
<td class="h" >
<a name="705">705</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="706">706</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "</ul><!-- END METHODS -->\n</li>\n"; </td>
</tr>
<tr>
<td class="h" >
<a name="707">707</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="708">708</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "</ul>\n</li><!-- END PACKAGE -->\n"; </td>
</tr>
<tr>
<td class="h" >
<a name="709">709</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="710">710</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td class="c0" >
<a href="blib-lib-Pod-Classdoc-Project-pm--condition.html#710-1">
0
</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $args{Additions} ||= ''; </td>
</tr>
<tr>
<td class="h" >
<a name="711">711</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> $doc .= "\n$args{Additions} </td>
</tr>
<tr>
<td class="h" >
<a name="712">712</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </ul> </td>
</tr>
<tr>
<td class="h" >
<a name="713">713</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> <!-- INDEX END --> </td>
</tr>
<tr>
<td class="h" >
<a name="714">714</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </small> </td>
</tr>
<tr>
<td class="h" >
<a name="715">715</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </body> </td>
</tr>
<tr>
<td class="h" >
<a name="716">716</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </html> </td>
</tr>
<tr>
<td class="h" >
<a name="717">717</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> "; </td>
</tr>
<tr>
<td class="h" >
<a name="718">718</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="719">719</a>
</td>
<td class="c0" >
0
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> return $doc; </td>
</tr>
<tr>
<td class="h" >
<a name="720">720</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> } </td>
</tr>
<tr>
<td class="h" >
<a name="721">721</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
<tr>
<td class="h" >
<a name="722">722</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> 1; </td>
</tr>
<tr>
<td class="h" >
<a name="723">723</a>
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td >
</td>
<td class="s"> </td>
</tr>
</table>
</body>
</html>
|