File Coverage

blib/lib/Pod/Classdoc/Project.pm
Criterion Covered Total %
statement 24 260 9.2
branch 0 128 0.0
condition 0 87 0.0
subroutine 8 15 53.3
pod 0 1 0.0
total 32 491 6.5


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>