<< # Scandoc template file. # # This is an example set of templates that is designed to create several # different kinds of index files. It generates a "master index" which intended # for use with a frames browser; A "package index" which is the root page of # the index, and then "package files" containing documentation for all of the # classes within a single package. ###################################################################### ## For quick and superficial customization, ## simply change these variables $project_name = '[Apache]'; $company_logo = '<img src="../images/ScanDocBig.jpg">'; # change this to an image tag. $copyright = '© 2000 [Apache Software Foundation]'; $image_directory = "../images/"; $bullet1_image = $image_directory . "ball1.gif"; $bullet2_image = $image_directory . "ball2.gif"; $bgcolor1 = "#FFFFFF"; $bgcolor2 = "#FFFFFF"; ###################################################################### ## Begin generating frame index file. file "index.html"; >><html> <head> <meta http-equiv="Content-Type" content="text/html; iso-8859-1"> <title>$project_name</title> </head> <frameset cols="190,*"> <frame src="master.html" name="Master Index" noresize> <frame src="packages.html" name="Documentation"> <noframes> <body bgcolor="$bgcolor2" stylesrc="index.html"> <p>Some Documentation</p> </body> </noframes> </frameset> </html> << ###################################################################### ## Begin generating master index file (left-hand frame). file "master.html"; >><html> <head> <title>Master Index</title> </head> <body bgcolor="$bgcolor1" text=#0000ff link=#0020ff vlink=#0020ff> <center><img src="${image_directory}ScanDocSmall.jpg" border="0" /></center> <p> <a href="packages.html" target="Documentation">Master Index</a> </p> <p> <font size="2"> <nobr> << ## For each package, generate an index entry. foreach $p (packages()) { $_ = $p->url; s/\s/%20/g; >><a href="$_" target="Documentation"><b>$(p.name)</b></a><br> <dir> << foreach $e ($p->classes()) { $_ = $e->url; s/\s/%20/g; >><li><a href="$_" target="Documentation">$(e.fullname)</a> << } foreach $e ($p->globals()) { $_ = $e->url; s/\s/%20/g; >><li><a href="$_" target="Documentation">$(e.fullname)</a> << } >></dir><< } >> <a href="to-do.html" target="Documentation"><b>To-Do List</b></a><br> </nobr> </font> </p> </body> </html> << ###################################################################### ## Begin generating package index file file "packages.html"; >><html> <head> <title>$project_name -- Packages</title> </head> <body bgcolor="$bgcolor2"> <center>$company_logo <h1>Documentation for $project_name</h1> </center> <h2>Package List</h2> << ## For each package, generate an index entry. foreach $p (packages()) { $_ = $p->url; s/\s/%20/g; >><a href = "$_">$(p.name)</a><br> << } >> <p> <hr size=4> $copyright<br> Generated by <a href="$scandocURL"><b>ScanDoc $majorVersion.$minorVersion</b></a><br> Last Updated: $date<br> </body> </html> << ###################################################################### ## Generate "To-do list" file "to-do.html"; >><html> <head> <title>$project_name -- To-Do list</title> </head> <body bgcolor="$bgcolor2"> $company_logo <h1>To-do list for $project_name</h1> << if (&todolistFiles()) { >><hr size=4><p> << foreach $f (&todolistFiles()) { my @m = &todolistEntries( $f ); if ($f =~ /([^\/]+)$/) { $f = $1; } >><b>$f:</b><ul> << foreach $text (@m) { if ($text) { print "<li>", &processDescription( $text ), "\n"; } } >></ul> << } } >> <hr size=4> $copyright<br> Generated by <a href="$scandocURL"><b>ScanDoc $majorVersion.$minorVersion</b></a><br> Last Updated: $date<br> </body> </html> << ###################################################################### ## Generate individual files for each package. my $p; foreach $p (packages()) { file $p->name() . ".html"; >><html> <head> <title>$project_name -- $(p.name)</title> </head> <body bgcolor="$bgcolor2"> <center> <font size=6><b>$project_name</b></font> <hr size=4><p> </center> <h2>Package Name: $(p.name)</h2> <b> << ## Generate class and member index at the top of the file. foreach $c ($p->classes()) { >><h3><img src="$bullet1_image" width=18 height=17 align=texttop> <a href="$(c.url)">$(c.fullname)</h3></a> <ul> << foreach $m ($c->members()) { >><li><a href="$(m.url)">$(m.longname)</a> << } >></ul> << } >> </b> << ## Generate detailed class documentation foreach $c ($p->classes()) { ## Output searchable keyword list if ($c->keywords()) { print "<!-- ", $c->keywords(), " -->\n"; } >><hr size="4"> <a name="$(c.anchor)"></a> <h1>$(c.fullname)</h1> <table bgcolor="ffffff" border="0" cellspacing="4"> <tr> <th align=center colspan=2> </th> </tr> << # Output author tag if ($c->author()) { >><tr><th width=20% align=right>Author:</th><< >><td>$(c.author)</td></tr><< } # Output package version if ($c->version()) { >><tr><th width=20% align=right>Version:</th><< >><td>$(c.version)</td></tr><< } # Output Source file if ($c->sourcefile()) { >><tr><th width=20% align=right>Source:</th><< >><td>$(c.sourcefile)</td></tr><< } # Output base class list if ($c->baseclasses()) { >><tr><th width=20% align=right>Base classes:</th> <td><< my @t = (); foreach $b ($c->baseclasses()) { my $name = $b->name(); if ($url = $b->url()) { push @t, "<a href=\"$url\">$name</a>"; } else { push @t, $name; } } print join( ', ', @t ); >></td></tr> << } # Output subclasses list if ($c->subclasses()) { >><tr><th width=20% align=right>Subclasses:</th> <td><< my @t = (); foreach $s ($c->subclasses()) { my $name = $s->name(); if ($url = $s->url()) { push @t, "<a href=\"$url\">$name</a>"; } else { push @t, $name; } } print join( ', ', @t ); >></td></tr><< } # Output main class description >></tr> </table> <p> << print &processDescription( $c->description() ); # Output "see also" information if ($c->seealso()) { >><p><dt><b>See Also</b><dd> << my @r = (); foreach $a ($c->seealso()) { my $name = $a->name(); if ($url = $a->url()) { push @r, "<a href=\"$url\">$name</a>"; } else { push @r, $name; } } print join( ',', @r ); >><p> << } # Output class member index if ($c->members()) { print "<h2>Member Index</h2>\n"; print "<ul>"; foreach $m ($c->members()) { >><li><a href="$(m.url)">$(m.fullname)</a> << } >></ul><< } # Output class member variable documentation if ($c->membervars()) { print "<h2>Class Variables</h2>\n"; print "<blockquote>\n"; foreach $m ($c->membervars()) { &variable( $m ); } print "</blockquote>\n"; } # Output class member function documentation if ($c->memberfuncs()) { print "<h2>Class Methods</h2>\n"; print "<blockquote>\n"; foreach $m ($c->memberfuncs()) { &function( $m ); } print "</blockquote>\n"; } } # Output global variables if ($p->globalvars()) { >><h2>Global Variables</h2> <blockquote> << foreach $m ($p->globalvars()) { &variable( $m ); } print "</blockquote>\n"; } # Output global functions if ($p->globalfuncs()) { >><h2>Global Functions</h2> <blockquote> << foreach $m ($p->globalfuncs()) { &function( $m ); } print "</blockquote>\n"; } >> <hr size=4> $copyright<br> Generated by <a href="$scandocURL"><b>ScanDoc $majorVersion.$minorVersion</b></a><br> Last Updated: $date<br> </body> </html> << } # end of foreach (packages) loop ###################################################################### ## Subroutine to generate documentation for a member function or global function sub function { local ($f) = @_; if ($f->keywords()) { >><!-- $(f.keywords) --> << } >> <a name="$(f.anchor)"></a> <dl> <dt> <b><img src="$bullet2_image" width=19 height=17 align=texttop>$(f.fullname);</b> <dd> << print &processDescription( $f->description() ); >> <p><dl> << if ($f->params()) { >> <dt><b>Parameters</b><dd> <table width="85%"> << foreach $a ($f->params()) { >><tr valign=top><th align=right> $(a.name)</th><td><< print &processDescription( $a->description() ); >></td></tr> << } >></table> << } if ($f->returnValue()) { >><dt><b>Return Value</b> <dd><< print &processDescription( $f->returnValue() ); >><p><< } if ($f->exceptions()) { >><dt><b>Exceptions</b><dd> <table width=85%><tr><td colspan=2><hr size=3></td></tr> << foreach $a ($f->exceptions()) { >><tr valign=top><th align=right> $(a.name)</th><td><< print &processDescription( $a->description() ); >></td></tr> << } >><tr><td colspan=2><hr size=3></td></tr></table> << } if ($f->seealso()) { >><dt><b>See Also</b><dd> << my @r = (); foreach $a ($f->seealso()) { my $name = $a->name(); if ($url = $a->url()) { push @r, "<a href=\"$url\">$name</a>"; } else { push @r, $name; } } print join( ',', @r ); >><p><< } >></dl></dl> << } ###################################################################### ## Subroutine to generate documentation for a member variable or global variable. sub variable { local ($v) = @_; if ($v->keywords()) { print "<!-- $(v.keywords) -->"; } >> <a name="$(v.name)"></a> <dl><dt> <b><img src="$bullet2_image" width=19 height=17 align=texttop>$(v.fullname);</b> <dd> <<print &processDescription( $v->description() );>> <p><dl> << if ($v->seealso()) { >><dt><b>See Also</b><dd> << $comma = 0; foreach $a ($v->seealso()) { if ($comma) { print ","; } $comma = 1; >><a href="$(a.url)">$(a.name)</a> << } >><p> << } >></dl></dl> << } ###################################################################### sub processDescription { local ($_) = @_; s/^\s+//; # Remove whitespace from beginning s/\s+$/\n/; # Remove whitespace from end s/\n\n/<p>\n/g; # Replace multiple CR's with paragraph markers s:\@heading(.*)\n:<p><h2>$1</h2>:; # Handle heading text # Handle embedded image tags s:\@caution:<p><img src=\"${image_directory}/caution.gif\" align=left>:; s:\@warning:<p><img src=\"${image_directory}/warning.gif\" align=left>:; s:\@bug:<p><img src=\"${image_directory}/bug.gif\">:; s:\@tip:<p><img src=\"${image_directory}/tip.gif\">:; return $_; }