summaryrefslogtreecommitdiffstats
path: root/Doc/perl
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>1998-03-03 22:02:19 (GMT)
committerFred Drake <fdrake@acm.org>1998-03-03 22:02:19 (GMT)
commit6659c30b67da07573e4ab315d6fca1667b920a35 (patch)
treeaf961c46bf05d64ab1f5a7663018488bfcd0acb0 /Doc/perl
parent53525379daab30fc2ca83713df683fe113f0f8c2 (diff)
downloadcpython-6659c30b67da07573e4ab315d6fca1667b920a35.zip
cpython-6659c30b67da07573e4ab315d6fca1667b920a35.tar.gz
cpython-6659c30b67da07573e4ab315d6fca1667b920a35.tar.bz2
Convert LaTeX support to create a new class of documents. HTML generation
now requires LaTeX2HTML 98.1p1 or newer (& and is still in progress). This means that doing things to change the formatting of the manuals (at the "normal user" level, like A4 paper), can happen in just one place, rather than in each document file.
Diffstat (limited to 'Doc/perl')
-rw-r--r--Doc/perl/manual.perl13
-rw-r--r--Doc/perl/python.perl710
2 files changed, 723 insertions, 0 deletions
diff --git a/Doc/perl/manual.perl b/Doc/perl/manual.perl
new file mode 100644
index 0000000..edccba1
--- /dev/null
+++ b/Doc/perl/manual.perl
@@ -0,0 +1,13 @@
+# -*- perl -*-
+#
+# This implements the Python manual class. All it really needs to do it
+# load the "python" style. The style code is not moved into the class code
+# at this time, since we expect additional document class to be developed
+# for the Python documentation in the future. Appropriate relocations will
+# be made at that time.
+
+package main;
+
+require "python.perl";
+
+1; # sheesh....
diff --git a/Doc/perl/python.perl b/Doc/perl/python.perl
new file mode 100644
index 0000000..73c917e
--- /dev/null
+++ b/Doc/perl/python.perl
@@ -0,0 +1,710 @@
+# python.perl by Fred L. Drake, Jr. <fdrake@acm.org> -*- perl -*-
+#
+# Heavily based on Guido van Rossum's myformat.perl (now obsolete).
+#
+# Extension to LaTeX2HTML for documents using myformat.sty.
+# Subroutines of the form do_cmd_<name> here define translations
+# for LaTeX commands \<name> defined in the corresponding .sty file.
+
+package main;
+
+
+# words typeset in a special way (not in HTML though)
+
+sub do_cmd_ABC{ 'ABC' . @_[0]; }
+sub do_cmd_UNIX{ 'Unix'. @_[0]; }
+sub do_cmd_ASCII{ 'ASCII' . @_[0]; }
+sub do_cmd_POSIX{ 'POSIX' . @_[0]; }
+sub do_cmd_C{ 'C' . @_[0]; }
+sub do_cmd_Cpp{ 'C++' . @_[0]; }
+sub do_cmd_EOF{ 'EOF' . @_[0]; }
+sub do_cmd_NULL{ '<tt>NULL</tt>' . @_[0]; }
+
+sub do_cmd_e{ '&#92;' . @_[0]; }
+
+$AUTHOR_ADDRESS = '';
+$PYTHON_VERSION = '';
+
+sub do_cmd_version{ $PYTHON_VERSION . @_[0]; }
+sub do_cmd_release{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx//;
+ $PYTHON_VERSION = "$2";
+ $_;
+}
+
+sub do_cmd_authoraddress{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx//;
+ $AUTHOR_ADDRESS = "$2";
+ $_;
+}
+
+sub do_cmd_hackscore{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/_/;
+ $_;
+}
+
+sub do_cmd_optional{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/<\/var><big>\[<\/big><var>\2<\/var><big>\]<\/big><var>/;
+ $_;
+}
+
+sub do_cmd_varvars{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/<var>\2<\/var>/;
+ $_;
+}
+
+# texinfo-like formatting commands: \code{...} etc.
+
+sub do_cmd_code{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/<tt>\2<\/tt>/;
+ $_;
+}
+
+sub do_cmd_sectcode{ &do_cmd_code(@_); }
+sub do_cmd_module{ &do_cmd_code(@_); }
+sub do_cmd_keyword{ &do_cmd_code(@_); }
+sub do_cmd_exception{ &do_cmd_code(@_); }
+sub do_cmd_class{ &do_cmd_code(@_); }
+sub do_cmd_function{ &do_cmd_code(@_); }
+sub do_cmd_constant{ &do_cmd_code(@_); }
+sub do_cmd_member{ &do_cmd_code(@_); }
+sub do_cmd_method{ &do_cmd_code(@_); }
+sub do_cmd_email{ &do_cmd_code(@_); }
+sub do_cmd_program{ &do_cmd_code(@_); }
+sub do_cmd_cfunction{ &do_cmd_code(@_); }
+sub do_cmd_cdata{ &do_cmd_code(@_); }
+sub do_cmd_ctype{ &do_cmd_code(@_); }
+
+sub do_cmd_email{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/<tt><font face=sans-serif>\2<\/font><\/tt>/;
+ $_;
+}
+
+sub do_cmd_url{
+ # use the URL as both text and hyperlink
+ local($_) = @_;
+ s/$any_next_pair_pr_rx//;
+ local($url) = $2;
+ $url =~ s/~/&#126;/g;
+ "<tt><font face=sans-serif><a href=\"$url\">$url</a></font></tt>" . $_;
+}
+
+sub do_cmd_manpage{
+ # two parameters: \manpage{name}{section}
+ local($_) = @_;
+ local($any_next_pair_pr_rx3) = "$OP(\\d+)$CP([\\s\\S]*)$OP\\3$CP";
+ s/$next_pair_pr_rx$any_next_pair_pr_rx3/<i>\2<\/i>(\4)/;
+ $_;
+}
+
+sub do_cmd_rfc{
+ local($_) = @_;
+ s/$next_pair_pr_rx//;
+ local($br_id,$rfcnumber) = ($1, $2);
+
+ # Save the reference
+ local($nstr) = &gen_index_id("RFC!RFC $rfcnumber", '');
+ $index{$nstr} .= &make_half_href("$CURRENT_FILE#$br_id");
+ "<a name=\"$br_id\">RFC $rfcnumber<\/a>" .$_;
+}
+
+sub do_cmd_kbd{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/<kbd>\2<\/kbd>/;
+ $_;
+}
+
+sub do_cmd_key{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/<tt>\2<\/tt>/;
+ $_;
+}
+
+sub do_cmd_var{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/<i>\2<\/i>/;
+ $_;
+}
+
+sub do_cmd_dfn{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/<i>\2<\/i>/;
+ $_;
+}
+
+sub do_cmd_emph{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/<i>\2<\/i>/;
+ $_;
+}
+
+sub do_cmd_strong{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/<b>\2<\/b>/;
+ $_;
+}
+
+sub do_cmd_deprecated{
+ # two parameters: \deprecated{version}{whattodo}
+ local($_) = @_;
+ local($any_next_pair_pr_rx3) = "$OP(\\d+)$CP([\\s\\S]*)$OP\\3$CP";
+ local($release,$action) = ($2, $4);
+ s/$next_pair_pr_rx$any_next_pair_pr_rx3//;
+ "<b>Deprecated since release $release.</b>"
+ . "\n$action<p>"
+ . $_;
+}
+
+# file and samp are at the end of this file since they screw up fontlock.
+
+# index commands
+
+$INDEX_SUBITEM = "";
+
+sub get_indexsubitem{
+ $INDEX_SUBITEM ? " $INDEX_SUBITEM" : '';
+}
+
+sub do_cmd_setindexsubitem{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx//;
+ $INDEX_SUBITEM = $2;
+ $_;
+}
+
+sub do_cmd_indexii{
+ local($_) = @_;
+ s/$next_pair_pr_rx//o;
+ local($br_id1, $str1) = ($1, $2);
+ s/$next_pair_pr_rx//o;
+ local($br_id2, $str2) = ($1, $2);
+ join('', &make_index_entry($br_id1, "$str1 $str2"),
+ &make_index_entry($br_id2, "$str2, $str1"), $_);
+}
+
+sub do_cmd_indexiii{
+ local($_) = @_;
+ s/$next_pair_pr_rx//o;
+ local($br_id1, $str1) = ($1, $2);
+ s/$next_pair_pr_rx//o;
+ local($br_id2, $str2) = ($1, $2);
+ s/$next_pair_pr_rx//o;
+ local($br_id3, $str3) = ($1, $2);
+ join('', &make_index_entry($br_id1, "$str1 $str2 $str3"),
+ &make_index_entry($br_id2, "$str2 $str3, $str1"),
+ &make_index_entry($br_id3, "$str3, $str1 $str2"),
+ $_);
+}
+
+sub do_cmd_indexiv{
+ local($_) = @_;
+ s/$next_pair_pr_rx//o;
+ local($br_id1, $str1) = ($1, $2);
+ s/$next_pair_pr_rx//o;
+ local($br_id2, $str2) = ($1, $2);
+ s/$next_pair_pr_rx//o;
+ local($br_id3, $str3) = ($1, $2);
+ s/$next_pair_pr_rx//o;
+ local($br_id4, $str4) = ($1, $2);
+ join('', &make_index_entry($br_id1, "$str1 $str2 $str3 $str4"),
+ &make_index_entry($br_id2, "$str2 $str3 $str4, $str1"),
+ &make_index_entry($br_id3, "$str3 $str4, $str1 $str2"),
+ &make_index_entry($br_id4, "$str4, $str1 $str2 $str3"),
+ $_);
+}
+
+sub do_cmd_ttindex{ &do_cmd_index(@_); }
+
+sub my_typed_index_helper{
+ local($word, $_) = @_;
+ s/$next_pair_pr_rx//o;
+ local($br_id, $str) = ($1, $2);
+ join('', &make_index_entry($br_id, "$str $word"),
+ &make_index_entry($br_id, "$word, $str"), $_);
+}
+
+sub do_cmd_stindex{ &my_typed_index_helper('statement', @_); }
+sub do_cmd_opindex{ &my_typed_index_helper('operator', @_); }
+sub do_cmd_exindex{ &my_typed_index_helper('exception', @_); }
+sub do_cmd_obindex{ &my_typed_index_helper('object', @_); }
+
+sub my_parword_index_helper{
+ local($word, $_) = @_;
+ s/$next_pair_pr_rx//o;
+ local($br_id, $str) = ($1, $2);
+ &make_index_entry($br_id, "$str ($word)") . $_;
+}
+
+
+# Set this to true to strip out the <tt>...</tt> from index entries;
+# this is analogous to using the second definition of \idxcode{} from
+# myformat.sty.
+#
+# It is used from &make_mod_index_entry() and &make_str_index_entry().
+#
+$STRIP_INDEX_TT = 0;
+
+sub make_mod_index_entry{
+ local($br_id,$str,$define) = @_;
+ local($halfref) = &make_half_href("$CURRENT_FILE#$br_id");
+ # If TITLE is not yet available (i.e the \index command is in the title
+ # of the current section), use $ref_before.
+ $TITLE = $ref_before unless $TITLE;
+ # Save the reference
+ if ($define eq "DEF") {
+ local($nstr,$garbage) = split / /, $str, 2;
+ $Modules{$nstr} .= $halfref;
+ }
+ $str = &gen_index_id($str, $define);
+ if ($STRIP_INDEX_TT) {
+ $str =~ s/<tt>(.*)<\/tt>/\1/;
+ }
+ $index{$str} .= $halfref;
+ "<a name=\"$br_id\">$anchor_invisible_mark<\/a>";
+}
+
+sub my_module_index_helper{
+ local($word, $_) = @_;
+ s/$next_pair_pr_rx[\n]*//o;
+ local($br_id, $str) = ($1, $2);
+ local($section_tag) = join('', @curr_sec_id);
+ $word = "$word " if $word;
+ &make_mod_index_entry("SECTION$section_tag",
+ "<tt>$str</tt> (${word}module)", 'DEF');
+ $_;
+}
+
+sub ref_module_index_helper{
+ local($word, $_) = @_;
+ s/$next_pair_pr_rx//o;
+ local($br_id, $str) = ($1, $2);
+ $word = "$word " if $word;
+ &make_mod_index_entry($br_id, "<tt>$str</tt> (${word}module)", 'REF') . $_;
+}
+
+sub do_cmd_bifuncindex{ &my_parword_index_helper('built-in function', @_); }
+sub do_cmd_modindex{ &my_module_index_helper('', @_); }
+sub do_cmd_bimodindex{ &my_module_index_helper('built-in', @_); }
+sub do_cmd_exmodindex{ &my_module_index_helper('extension', @_); }
+sub do_cmd_stmodindex{ &my_module_index_helper('standard', @_); }
+
+# these should be adjusted a bit....
+sub do_cmd_refmodindex{ &ref_module_index_helper('', @_); }
+sub do_cmd_refbimodindex{ &ref_module_index_helper('built-in', @_); }
+sub do_cmd_refexmodindex{ &ref_module_index_helper('extension', @_); }
+sub do_cmd_refstmodindex{ &ref_module_index_helper('standard', @_); }
+
+sub do_cmd_nodename{ &do_cmd_label(@_); }
+
+sub init_myformat{
+ # XXX need some way for this to be called after &initialise; ???
+ $anchor_mark = '';
+ $icons{'anchor_mark'} = '';
+ # <<2>>...<<2>>
+ $any_next_pair_rx3 = "$O(\\d+)$C([\\s\\S]*)$O\\3$C";
+ $any_next_pair_rx5 = "$O(\\d+)$C([\\s\\S]*)$O\\5$C";
+ $any_next_pair_rx7 = "$O(\\d+)$C([\\s\\S]*)$O\\7$C";
+ $any_next_pair_rx9 = "$O(\\d+)$C([\\s\\S]*)$O\\9$C";
+ # <#2#>...<#2#>
+ $any_next_pair_pr_rx_3 = "$OP(\\d+)$CP([\\s\\S]*)$OP\\3$CP";
+ $any_next_pair_pr_rx_5 = "$OP(\\d+)$CP([\\s\\S]*)$OP\\5$CP";
+ $any_next_pair_pr_rx_7 = "$OP(\\d+)$CP([\\s\\S]*)$OP\\7$CP";
+ $any_next_pair_pr_rx_9 = "$OP(\\d+)$CP([\\s\\S]*)$OP\\9$CP";
+ if (defined &process_commands_wrap_deferred) {
+ &process_commands_wrap_deferred(<<THESE_COMMANDS);
+indexii # {} # {}
+indexiii # {} # {} # {}
+indexiv # {} # {} # {} # {}
+exindex # {}
+obindex # {}
+opindex # {}
+stindex # {}
+ttindex # {}
+bifuncindex # {}
+modindex # {}
+bimodindex # {}
+exmodindex # {}
+stmodindex # {}
+refmodindex # {}
+refbimodindex # {}
+refexmodindex # {}
+refstmodindex # {}
+rfc # {}
+THESE_COMMANDS
+ }
+}
+
+&init_myformat;
+
+# similar to make_index_entry(), but includes the string in the result
+# instead of the dummy filler.
+#
+sub make_str_index_entry{
+ local($br_id,$str) = @_;
+ # If TITLE is not yet available (i.e the \index command is in the title
+ # of the current section), use $ref_before.
+ $TITLE = $ref_before unless $TITLE;
+ # Save the reference
+ local($nstr) = &gen_index_id($str, '');
+ if ($STRIP_INDEX_TT) {
+ $nstr =~ s/<tt>(.*)<\/tt>/\1/;
+ }
+ $index{$nstr} .= &make_half_href("$CURRENT_FILE#$br_id");
+ "<a name=\"$br_id\">$str<\/a>";
+}
+
+# Changed from the stock version to indent {verbatim} sections,
+# and make them smaller, to better match the LaTeX version:
+
+# (Used with LaTeX2HTML 96.1*)
+sub replace_verbatim {
+ # Modifies $_
+ local($prefix,$suffix) = ("\n<p><dl><dd><pre><font size=-1>\n",
+ "</font></pre></dl>");
+ s/$verbatim_mark(verbatim)(\d+)/$prefix$verbatim{$2}$suffix/go;
+ s/$verbatim_mark(rawhtml)(\d+)/$verbatim{$2}/ego; # Raw HTML
+}
+
+# (Used with LaTeX2HTML 98.1)
+sub replace_verbatim_hook{
+ # Modifies $_
+ local($prefix,$suffix) = ("\n<p><dl><dd><font size=-1>",
+ "</font></dl>");
+ s/$math_verbatim_rx/&put_comment("MATH: ".$verbatim{$1})/eg;
+ s/$verbatim_mark(\w*[vV]erbatim\*?)(\d+)\#/$prefix$verbatim{$2}$suffix/go;
+ # Raw HTML, but replacements may have protected characters
+ s/$verbatim_mark(rawhtml)(\d+)#/&unprotect_raw_html($verbatim{$2})/eg;
+ s/$verbatim_mark$keepcomments(\d+)#/$verbatim{$2}/ego; # Raw TeX
+ s/$unfinished_mark$keepcomments(\d+)#/$verbatim{$2}/ego; # Raw TeX
+}
+
+sub do_env_cfuncdesc{
+ local($_) = @_;
+ local($return_type,$function_name,$arg_list,$idx) = ('', '', '', '');
+ local($cfuncdesc_rx) =
+ "$next_pair_rx$any_next_pair_rx3$any_next_pair_rx5";
+ if (/$cfuncdesc_rx/o) {
+ $return_type = "$2";
+ $function_name = "$4";
+ $arg_list = "$6";
+ $idx = &make_str_index_entry($3,
+ "<tt>$function_name</tt>" . &get_indexsubitem);
+ $idx =~ s/ \(.*\)//;
+ }
+ "<dl><dt>$return_type <b>$idx</b>"
+ . "(<var>$arg_list</var>)\n<dd>$'\n</dl>"
+}
+
+sub do_env_ctypedesc{
+ local($_) = @_;
+ local($type_name) = ('');
+ local($cfuncdesc_rx) = "$next_pair_rx";
+ if (/$cfuncdesc_rx/o) {
+ $type_name = "$2";
+ $idx = &make_str_index_entry($1,
+ "<tt>$type_name</tt>" . &get_indexsubitem);
+ $idx =~ s/ \(.*\)//;
+ }
+ "<dl><dt><b>$idx</b>\n<dd>$'\n</dl>"
+}
+
+sub do_env_cvardesc{
+ local($_) = @_;
+ local($var_type,$var_name,$idx) = ('', '', '');
+ local($cfuncdesc_rx) = "$next_pair_rx$any_next_pair_rx3";
+ if (/$cfuncdesc_rx/o) {
+ $var_type = "$2";
+ $var_name = "$4";
+ $idx = &make_str_index_entry($3,
+ "<tt>$var_name</tt>" . &get_indexsubitem);
+ $idx =~ s/ \(.*\)//;
+ }
+ "<dl><dt>$var_type <b>$idx</b>\n"
+ . "<dd>$'\n</dl>";
+}
+
+sub do_env_funcdesc{
+ local($_) = @_;
+ local($function_name,$arg_list,$idx) = ('', '', '');
+ local($funcdesc_rx) = "$next_pair_rx$any_next_pair_rx3";
+ if (/$funcdesc_rx/o) {
+ $function_name = "$2";
+ $arg_list = "$4";
+ $idx = &make_str_index_entry($3,
+ "<tt>$function_name</tt>" . &get_indexsubitem);
+ $idx =~ s/ \(.*\)//;
+ }
+ "<dl><dt><b>$idx</b> (<var>$arg_list</var>)\n<dd>$'\n</dl>";
+}
+
+sub do_env_funcdescni{
+ local($_) = @_;
+ local($function_name,$arg_list,$idx) = ('', '', '');
+ local($funcdesc_rx) = "$next_pair_rx$any_next_pair_rx3";
+ if (/$funcdesc_rx/o) {
+ $function_name = "$2";
+ $arg_list = "$4";
+ if ($STRIP_INDEX_TT) {
+ $idx = $function_name; }
+ else {
+ $idx = "<tt>$function_name</tt>"; }
+ }
+ "<dl><dt><b>$idx</b> (<var>$arg_list</var>)\n<dd>$'\n</dl>";
+}
+
+sub do_cmd_funcline{
+ local($_) = @_;
+ local($funcdesc_rx) = "$next_pair_pr_rx$OP(\\d+)$CP([\\s\\S]*)$OP\\3$CP";
+
+ s/$funcdesc_rx//o;
+ local($br_id, $function_name, $arg_list) = ($3, $2, $4);
+ local($idx) = &make_str_index_entry($br_id, "<tt>$function_name</tt>");
+
+ "<dt><b>$idx</b> (<var>$arg_list</var>)\n<dd>" . $_;
+}
+
+# Change this flag to index the opcode entries. I don't think it's very
+# useful to index them, since they're only presented to describe the dis
+# module.
+#
+$INDEX_OPCODES = 0;
+
+sub do_env_opcodedesc{
+ local($_) = @_;
+ local($opcode_name,$arg_list,$stuff,$idx) = ('', '', '', '');
+ local($opcodedesc_rx) = "$next_pair_rx$any_next_pair_rx3";
+ if (/$opcodedesc_rx/o) {
+ $opcode_name = "$2";
+ $arg_list = "$4";
+ if ($INDEX_OPCODES) {
+ $idx = &make_str_index_entry($3,
+ "<tt>$opcode_name</tt> (byte code instruction)");
+ $idx =~ s/ \(byte code instruction\)//;
+ }
+ else {
+ $idx = "<tt>$opcode_name</tt>";
+ }
+ }
+ $stuff = "<dl><dt><b>$idx</b>";
+ if ($arg_list) {
+ $stuff .= "&nbsp;&nbsp;&nbsp;&nbsp;<var>$arg_list</var>";
+ }
+ $stuff . "\n<dd>$'\n</dl>";
+}
+
+sub do_env_datadesc{
+ local($_) = @_;
+ local($idx) = '';
+ if (/$next_pair_rx/o) {
+ $idx = &make_str_index_entry($1, "<tt>$2</tt>" . &get_indexsubitem);
+ $idx =~ s/ \(.*\)//;
+ }
+ "<dl><dt><b>$idx</b>\n<dd>$'\n</dl>"
+}
+
+sub do_env_datadescni{
+ local($_) = @_;
+ local($idx) = '';
+ if (/$next_pair_rx/o) {
+ if ($STRING_INDEX_TT) {
+ $idx = "$2"; }
+ else {
+ $idx = "<tt>$2</tt>"; }
+ }
+ "<dl><dt><b>$idx</b>\n<dd>$'\n</dl>"
+}
+
+sub do_cmd_dataline{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx//o;
+ local($br_id, $data_name) = ($1, $2);
+ local($idx) = &make_str_index_entry($br_id, "<tt>$data_name</tt>"
+ . &get_indexsubitem);
+ $idx =~ s/ \(.*\)//;
+
+ "<dt><b>$idx</b>\n<dd>" . $_;
+}
+
+sub do_env_excdesc{ &do_env_datadesc(@_); }
+sub do_env_classdesc{ &do_env_funcdesc(@_); }
+sub do_env_fulllineitems{ &do_env_itemize(@_); }
+
+
+@col_aligns = ("<td>", "<td>", "<td>");
+
+sub setup_column_alignments{
+ local($_) = @_;
+ local($j1,$a1,$a2,$a3,$j4) = split(/[|]/,$_);
+ local($th1,$th2,$th3) = ('<th>', '<th>', '<th>');
+ $col_aligns[0] = (($a1 eq "c") ? "<td align=center>" : "<td>");
+ $col_aligns[1] = (($a2 eq "c") ? "<td align=center>" : "<td>");
+ $col_aligns[2] = (($a3 eq "c") ? "<td align=center>" : "<td>");
+ # return the aligned header start tags; only used for \begin{tableiii?}
+ $th1 = (($a1 eq "l") ? "<th align=left>"
+ : ($a1 eq "r" ? "<th align=right>" : "<th>"));
+ $th2 = (($a2 eq "l") ? "<th align=left>"
+ : ($a2 eq "r" ? "<th align=right>" : "<th>"));
+ $th3 = (($a3 eq "l") ? "<th align=left>"
+ : ($a3 eq "r" ? "<th align=right>" : "<th>"));
+ ($th1, $th2, $th3);
+}
+
+sub do_env_tableii{
+ local($_) = @_;
+ local($font,$h1,$h2) = ('', '', '');
+ local($tableiii_rx) =
+ "$next_pair_rx$any_next_pair_rx3$any_next_pair_rx5$any_next_pair_rx7";
+ if (/$tableiii_rx/o) {
+ $font = $4;
+ $h1 = $6;
+ $h2 = $8;
+ }
+ local($th1,$th2,$th3) = &setup_column_alignments($2);
+ $globals{"lineifont"} = $font;
+ "<table border align=center>"
+ . "\n <tr>$th1<b>$h1</b></th>"
+ . "\n $th2<b>$h2</b></th>$'"
+ . "\n</table>";
+}
+
+sub do_cmd_lineii{
+ local($_) = @_;
+ s/$next_pair_pr_rx//o;
+ local($c1) = $2;
+ s/$next_pair_pr_rx//o;
+ local($c2) = $2;
+ local($font) = $globals{"lineifont"};
+ local($c1align, $c2align) = @col_aligns[0,1];
+ "<tr>$c1align<$font>$c1</$font></td>\n"
+ . " $c2align$c2</td>$'";
+}
+
+sub do_env_tableiii{
+ local($_) = @_;
+ local($font,$h1,$h2,$h3) = ('', '', '', '');
+
+ local($tableiii_rx) =
+ "$next_pair_rx$any_next_pair_rx3$any_next_pair_rx5$any_next_pair_rx7"
+ . "$any_next_pair_rx9";
+ if (/$tableiii_rx/o) {
+ $font = $4;
+ $h1 = $6;
+ $h2 = $8;
+ $h3 = $10;
+ }
+ local($th1,$th2,$th3) = &setup_column_alignments($2);
+ $globals{"lineifont"} = $font;
+ "<table border align=center>"
+ . "\n <tr>$th1<b>$h1</b></th>"
+ . "\n $th2<b>$h2</b></th>"
+ . "\n $th3<b>$h3</b></th>$'"
+ . "\n</table>";
+}
+
+sub do_cmd_lineiii{
+ local($_) = @_;
+ s/$next_pair_pr_rx//o;
+ local($c1) = $2;
+ s/$next_pair_pr_rx//o;
+ local($c2) = $2;
+ s/$next_pair_pr_rx//o;
+ local($c3) = $2;
+ local($font) = $globals{"lineifont"};
+ local($c1align, $c2align, $c3align) = @col_aligns;
+ "<tr>$c1align<$font>$c1</$font></td>\n"
+ . " $c2align$c2</td>\n"
+ . " $c3align$c3</td>$'";
+}
+
+sub do_env_seealso{
+ "<p><b>See Also:</b></p>\n" . @_[0];
+}
+
+sub do_cmd_seemodule{
+ # Insert the right magic to jump to the module definition. This should
+ # work most of the time, at least for repeat builds....
+ local($_) = @_;
+ local($any_next_pair_pr_rx3) = "$OP(\\d+)$CP([\\s\\S]*)$OP\\3$CP";
+ s/$next_pair_pr_rx$any_next_pair_pr_rx3//;
+ local($module,$text,$node,$key) = ($2, $4, '', "module$2");
+ $key =~ s/_//g;
+ # XXX somewhat bogus computation of $node
+# $node = $external_labels{$key} unless
+# ($node = $ref_files{$key});
+ $node = $key;
+ "<p>Module <tt><b><a href=\"$node#$key\">$module</a></b></tt>"
+ . "&nbsp;&nbsp;&nbsp;($text)</p>"
+ . $_;
+}
+
+sub do_cmd_seetext{
+ "<p>" . @_[0];
+}
+
+
+sub do_cmd_maketitle {
+ local($_) = @_;
+ local($the_title) = '';
+ if ($t_title) {
+ $the_title .= "<h1 align=\"center\">$t_title</h1>";
+ } else { &write_warnings("\nThis document has no title."); }
+ if ($t_author) {
+ if ($t_authorURL) {
+ local($href) = &translate_commands($t_authorURL);
+ $href = &make_named_href('author', $href, "<strong>${t_author}</strong>");
+ $the_title .= "\n<p align=\"center\">$href</p>";
+ } else {
+ $the_title .= "\n<p align=\"center\"><strong>$t_author</strong></p>";
+ }
+ } else { &write_warnings("\nThere is no author for this document."); }
+ if ($t_institute) {
+ $the_title .= "\n<p align=\"center\"><small>$t_institute</small></p>";}
+ if ($AUTHOR_ADDRESS) {
+ $the_title .= "\n<p align=\"center\"><small>$AUTHOR_ADDRESS";
+ $the_title .= "</small></p>";}
+ if ($t_affil) {
+ $the_title .= "\n<p align=\"center\"><i>$t_affil</i></p>";}
+ if ($t_date) {
+ $the_title .= "\n<p align=\"center\"><strong>$t_date</strong>";
+ if ($PYTHON_VERSION) {
+ $the_title .= "<br><strong>Release $PYTHON_VERSION</strong>";}
+ $the_title .= "</p>"
+ }
+ if ($t_address) {
+ $the_title .= "<br>\n<p align=\"left\"><small>$t_address</small></p>";
+ } else { $the_title .= "\n<p align=\"left\">"}
+ if ($t_email) {
+ $the_title .= "\n<p align=\"left\"><small>$t_email</small></p>";
+ } else { $the_title .= "</p>" }
+ $the_title . "<p><hr>\n" . $_ ;
+}
+
+
+# These are located down here since they screw up fontlock.
+
+sub do_cmd_file{
+ # This uses a weird HTML construct to adjust the font to be
+ # reasonable match that used in the printed form as much as
+ # possible. The expected behavior is that a browser that doesn't
+ # understand "<font face=...>" markup will use courier (or whatever
+ # the font is for <tt>).
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/`<tt><font face=sans-serif>\2<\/font><\/tt>'/;
+ $_;
+}
+
+sub do_cmd_samp{
+ local($_) = @_;
+ s/$any_next_pair_pr_rx/`<tt>\2<\/tt>'/;
+ $_;
+}
+
+1; # This must be the last line