$INFO = 1; # 0 = do not make a "About this document..." section
$MAX_LINK_DEPTH = 3;
+$NUMBERED_FOOTNOTES = 1;
+
# Python documentation uses section numbers to support references to match
# in the printed and online versions.
#
$SHOW_SECTION_NUMBERS = 1;
-$HTML_VERSION = '3.0';
$ICONSERVER = '../icons';
-# This replacement adds the "BORDER=0" attribute to the generated icon
-# markup. This is done for no better reason than that it looks better.
-#
-sub img_tag {
- local($icon) = @_;
- ( ($icon =~ /(gif)/) ?
- do {
- $icon =~ /(up|next|previous|next_page|previous_page|change_begin|change_end|change_delete|contents|index)/;
- join('','<img ',$iconsizes{$1},' align=bottom alt="',$1,
- '" src="',$ICONSERVER,"/$icon",'" border=0>')
- } :
- $icon);
-}
+$CHILDLINE = "\n<p><hr>\n";
+$VERBOSITY = 0;
-# This replacement for process_command() is needed to add the case for
-# "\,"; it is unfortunate we need to do it this way.
-#
-sub process_command {
- local ($cmd_rx, *ref_contents) = @_;
- local($ref_before, $cmd, $after);
- local($cmd_sub, $cmd_msub, $cmd_trans, $mathentity);
- local (@open_font_tags,@open_size_tags);
- $ref_contents = &convert_iso_latin_chars($ref_contents);
- for (;;) { # Do NOT use the o option
- last unless ($ref_contents =~ /$cmd_rx/ );
- ($ref_before, $cmd, $after) = ($`, $1, "$2$'");
- print(".");
-# $after =~ s/^[ ]+/ /o; Collapse all spaces that follow a command
- if ($cmd =~ /[a-zA-Z]$/) { # Eat redundant spaces that follow a command
- $after =~ s/^[ \t]+//o; }
- else {
- $after =~ s/^[ \t]+/ /o; }
- if ( $cmd = &normalize($cmd) ) {
- ($cmd_sub, $cmd_msub, $cmd_trans, $mathentity) =
- ("do_cmd_$cmd", "do_math_cmd_$cmd",
- $declarations{$cmd}, $mathentities{$cmd});
- if (defined &$cmd_sub) {
- # $ref_before may also be modified ...
- if ($cmd =~ /$sizechange_rx/o) {
- $after = &$cmd_sub($after, @open_size_tags);
- } else {
- $after = &$cmd_sub($after, @open_font_tags);
- };
- }
- elsif (defined &$cmd_msub) {
- # $ref_before may also be modified ...
- $after = &$cmd_msub($after, @open_font_tags);
- if ( !$math_mode ) {
- $after = "<math>" . $after . "</math>";
- ++$commands_outside_math{$cmd};
- };
- }
- elsif ($cmd_trans) { # One to one transform
- $cmd_trans =~ m|</.*$|;
- $after = $` . $after . $&;
- push(@open_font_tags, $cmd) if ($cmd =~ /$fontchange_rx/o);
- push(@open_size_tags, $cmd) if ($cmd =~ /$sizechange_rx/o);}
- elsif ($mathentity) {
- if ( $math_mode ) {
- $after = "&$mathentity;" . $after;
- } else {
- $after = "<math>&$mathentity;</math>" . $after;
- ++$commands_outside_math{$cmd};
- }; }
- # Here's the hack:
- elsif ($cmd == ',' && ! $AUX_FILE) {
- $ref_before = $ref_before . ",";
- }
- elsif ($ignore{$cmd}) { # Ignored command
- print "."}
- elsif ($cmd =~ /^the(.+)$/) { # Counter
- $counter = $1;
- $after = &do_cmd_thecounter($after);}
- else {
- # Do not add if reading an auxiliary file
- ++$unknown_commands{$cmd} unless $AUX_FILE;
- }
- }
- $ref_contents = join('', $ref_before, $after);
- }
- $ref_contents;
-}
sub top_navigation_panel {
($PREVIOUS_TITLE ? "<b> Previous:</b> $PREVIOUS_TITLE\n" : undef) .
# Line Break, horizontal rule (3-d dividing line) and new paragraph
- "<br><hr><p></div>\n"
+ "<br><hr><p></div>"
}
sub bot_navigation_panel {
# Start with a horizontal rule (3-d dividing line)
- "\n<div class=navigation><hr>".
+ "<div class=navigation><hr>".
# Now add a few buttons with a space between them
"$NEXT\n$UP\n$PREVIOUS\n$CONTENTS\n$INDEX $CUSTOM_BUTTONS" .
# ... and the ``previous'' title
($PREVIOUS_TITLE ? "<b> Previous:</b> $PREVIOUS_TITLE\n" : undef) .
- "</div>\n"
+ "</div>"
}
+# sub make_section_heading {
+# local($text, $level, $anchors) = @_;
+# local($section_tag) = join('', @curr_sec_id);
+# local($align,$pre_anchors);
+# # separate any invisible anchors or alignment, if this has not already been done
+# if (!($anchors)){ ($anchors,$text) = &extract_anchors($text) }
+# else {
+# $anchors =~ s/(ALIGN=\"\w*\")/$align = " $1";''/e;
+# $anchors = &translate_commands($anchors) if ($anchors =~ /\\/);
+# }
+# if (!($text)) {
+# # anchor to a single `.' only
+# $text = "<a name=SECTION$section_tag>.</a>$anchors\n";
+# } elsif ($anchors) {
+# # keep it short and simple!
+# $text = "<a name=SECTION$section_tag>$text</a>";
+# } elsif (!($text =~ /<A[^\w]/io)) {
+# # no embedded anchors, so anchor it all
+# $text = "<a name=SECTION$section_tag>\n" . $text . "</a>";
+# } else {
+# # there are embedded anchors; these cannot be nested
+# local ($tmp) = $text;
+# $tmp =~ s/<//o ; # find 1st <
+# if ($`) { # anchor text before the first <
+# # $text = "<A NAME=\"SECTION$section_tag\">\n" . $` . "</A>\n<" . $';
+# $text = "<a name=SECTION$section_tag>\n" . $` . "</a>";
+# $pre_anchors = "<" . $';
+# if ($pre_anchors =~ /^(<A NAME=\"[^\"]+>${anchor_invisible_mark}<\/A>\s*)+$/) {
+# $pre_anchors .= "\n"
+# } else { $text .= $pre_anchors; $pre_anchors = '' }
+# } else {
+# # $text starts with a tag
+# local($after,$tmp) = ($','');
+# if ( $after =~ /^A[^\w]/i ) {
+# # it is an anchor already, so need a separate line
+# $text = "<a name=SECTION$section_tag>$anchor_invisible_mark</a><br>\n$text";
+# } else {
+# # Is it a tag enclosing the anchor ?
+# $after =~ s/^(\w)*[\s|>]/$tmp = $1;''/eo;
+# if ($after =~ /<A.*<\/$tmp>/) {
+# # it encloses an anchor, so use anchor_mark + break
+# $text = "<a name=SECTION$section_tag>$anchor_invisible_mark</a><br>\n$text";
+# } else {
+# # take up to the anchor
+# $text =~ s/^(.*)<A([^\w])/"<a name=SECTION$section_tag>$1<A$2"/oe;
+# }
+# }
+# }
+# }
+# "$pre_anchors\n<$level$align>$text\n<\/$level>";
+# }
+
+
sub gen_index_id {
# this is used to ensure common index key generation and a stable sort
local($str,$extra) = @_;
sprintf("%s###%s%010d", $str, $extra, ++$global{'max_id'});
}
-sub make_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
- $str = gen_index_id($str, '');
- $index{$str} .= &make_half_href("$CURRENT_FILE#$br_id");
- "<a name=\"$br_id\">$anchor_invisible_mark<\/a>";
-}
-
-sub add_idx {
- print "\nDoing the index ...";
- local($key, $str, @keys, $index, $level, $count, @previous, @current);
- @keys = keys %index;
- @keys = sort keysort @keys;
- $level = 0;
- foreach $key (@keys) {
- @current = split(/!/, $key);
- $count = 0;
- while ($current[$count] eq $previous[$count]) {
- $count++;
- }
- while ($count > $level) {
- $index .= "<dl compact>\n";
- $level++;
- }
- while ($count < $level) {
- $index .= "</dl>\n";
- $level--;
- }
- foreach $term (@current[$count .. $#current-1]) {
- # need to "step in" a little
- $index .= "<dt>" . $term . "\n<dl compact>\n";
- $level++;
- }
- $str = $current[$#current];
- $str =~ s/\#\#\#\d+$//o; # Remove the unique id's
- $str =~ s/\#\#\#[DR]EF\d+$//o; # Remove the unique id's
- if (&index_key_eq(join('',@current), join('',@previous))) {
- $index .= ",\n$index{$key}" . $cross_ref_visible_mark . "</a>"; }
- else {
- $index .= "\n<dt>$index{$key}" . $str . "</a>"; }
- @previous = @current;
- }
- while ($count < $level) {
- $index .= "</dl>\n";
- $level--;
- }
- s/$idx_mark/<dl compact>$index<\/dl>/o;
-}
-
-
-sub index_key_eq {
- local($a,$b) = @_;
- $a = &clean_key($a);
- $a =~ s/\#\#\#\d+$//o; # Remove the unique id's
- $a =~ s/\#\#\#[dr]ef\d+$//o; # Remove the unique id's
- $b = &clean_key($b);
- $b =~ s/\#\#\#\d+$//o; # Remove the unique id's
- $b =~ s/\#\#\#[dr]ef\d+$//o; # Remove the unique id's
- $a eq $b;
-}
+# sub make_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
+# $str = gen_index_id($str, '');
+# $index{$str} .= &make_half_href("$CURRENT_FILE#$br_id");
+# "<a name=\"$br_id\">$anchor_invisible_mark<\/a>";
+# }
+
+# sub add_idx {
+# print "\nDoing the index ...";
+# local($key, $str, @keys, $index, $level, $count, @previous, @current);
+# @keys = keys %index;
+# @keys = sort keysort @keys;
+# $level = 0;
+# foreach $key (@keys) {
+# @current = split(/!/, $key);
+# $count = 0;
+# while ($current[$count] eq $previous[$count]) {
+# $count++;
+# }
+# while ($count > $level) {
+# $index .= "<dl compact>\n";
+# $level++;
+# }
+# while ($count < $level) {
+# $index .= "</dl>\n";
+# $level--;
+# }
+# foreach $term (@current[$count .. $#current-1]) {
+# # need to "step in" a little
+# $index .= "<dt>" . $term . "\n<dl compact>\n";
+# $level++;
+# }
+# $str = $current[$#current];
+# $str =~ s/\#\#\#\d+$//o; # Remove the unique id's
+# $str =~ s/\#\#\#[DR]EF\d+$//o; # Remove the unique id's
+# if (&index_key_eq(join('',@current), join('',@previous))) {
+# $index .= ",\n$index{$key}" . $cross_ref_visible_mark . "</a>"; }
+# else {
+# $index .= "\n<dt>$index{$key}" . $str . "</a>"; }
+# @previous = @current;
+# }
+# while ($count < $level) {
+# $index .= "</dl>\n";
+# $level--;
+# }
+# s/$idx_mark/<dl compact>$index<\/dl>/o;
+# }
+
+
+# sub index_key_eq {
+# local($a,$b) = @_;
+# $a = &clean_key($a);
+# $a =~ s/\#\#\#\d+$//o; # Remove the unique id's
+# $a =~ s/\#\#\#[dr]ef\d+$//o; # Remove the unique id's
+# $b = &clean_key($b);
+# $b =~ s/\#\#\#\d+$//o; # Remove the unique id's
+# $b =~ s/\#\#\#[dr]ef\d+$//o; # Remove the unique id's
+# $a eq $b;
+# }
# need to remove leading <...>
-sub clean_key {
- local ($_) = @_;
- tr/A-Z/a-z/;
- s/\s//;
- s/^<[a-z][-._a-z0-9]*>//; # Remove leading <gi>
- $_
-}
+# sub clean_key {
+# local ($_) = @_;
+# tr/A-Z/a-z/;
+# s/\s//;
+# s/^<[a-z][-._a-z0-9]*>//; # Remove leading <gi>
+# $_;
+# }
$idx_module_mark = '<tex2html_idx_module_mark>';
}
-sub remove_general_markers {
- s/$lof_mark/<UL>$figure_captions<\/UL>/o;
- s/$lot_mark/<UL>$table_captions<\/UL>/o;
- &replace_citations if /$bbl_mark/;
- &add_toc if (/$toc_mark/);
- &add_idx if (/$idx_mark/);
- &add_module_idx if (/$idx_module_mark/);
- &replace_cross_references if /$cross_ref_mark/;
- &replace_external_references if /$external_ref_mark/;
- &replace_cite_references if /$cite_mark/;
- if (defined &replace_user_references) {
- &replace_user_references if /$user_ref_mark/;
- }
-}
+# sub remove_general_markers {
+# s/$lof_mark/<UL>$figure_captions<\/UL>/o;
+# s/$lot_mark/<UL>$table_captions<\/UL>/o;
+# &replace_citations if /$bbl_mark/;
+# &add_toc if (/$toc_mark/);
+# &add_idx if (/$idx_mark/);
+# &add_module_idx if (/$idx_module_mark/);
+# &replace_cross_references if /$cross_ref_mark/;
+# &replace_external_references if /$external_ref_mark/;
+# &replace_cite_references if /$cite_mark/;
+# if (defined &replace_user_references) {
+# &replace_user_references if /$user_ref_mark/;
+# }
+# }
# In addition to the standard stuff, add label to allow named node files.
sub do_cmd_tableofcontents {
local($_) = @_;
- $tocfile = $CURRENT_FILE;
$TITLE = $toc_title;
+ $tocfile = $CURRENT_FILE;
+ local($closures,$reopens) = &preserve_open_tags();
&anchor_label("contents",$CURRENT_FILE,$_); # this is added
- join('', '<P>', &make_section_heading($toc_title, "H2"), $toc_mark, $_);
+ join('', "<BR>\n", $closures
+ , &make_section_heading($toc_title, "H2"), $toc_mark
+ , $reopens, $_);
}
-
# In addition to the standard stuff, add label to allow named node files.
sub do_cmd_listoffigures {
local($_) = @_;
$TITLE = $lof_title;
$loffile = $CURRENT_FILE;
- &anchor_label("figures",$CURRENT_FILE,$_); # this is added
- join('', '<P>' , &make_section_heading($lof_title, "H2"), $lof_mark, $_);
-}
-
+ local($closures,$reopens) = &preserve_open_tags();
+ &anchor_label("lof",$CURRENT_FILE,$_); # this is added
+ join('', "<BR>\n", $closures
+ , &make_section_heading($lof_title, "H2"), $lof_mark
+ , $reopens, $_);
+}
# In addition to the standard stuff, add label to allow named node files.
sub do_cmd_listoftables {
local($_) = @_;
$TITLE = $lot_title;
$lotfile = $CURRENT_FILE;
- &anchor_label("tables",$CURRENT_FILE,$_); # this is added
- join('', '<P>' , &make_section_heading($lot_title, "H2"), $lot_mark, $_);
+ local($closures,$reopens) = &preserve_open_tags();
+ &anchor_label("lot",$CURRENT_FILE,$_); # this is added
+ join('', "<BR>\n", $closures
+ , &make_section_heading($lot_title, "H2"), $lot_mark
+ , $reopens, $_);
}
-
# In addition to the standard stuff, add label to allow named node files.
sub do_cmd_textohtmlinfopage {
local($_) = @_;
- if ($INFO) {
+ if ($INFO) { #
&anchor_label("about",$CURRENT_FILE,$_); # this is added
- }
+ } #
( ($INFO == 1)
- ? join('', "<STRONG>$t_title</STRONG><P>\nThis document was generated using the <A HREF=\"$TEX2HTMLADDRESS\"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version $TEX2HTMLVERSION Copyright © 1993, 1994, 1995, 1996, <A HREF=\"$AUTHORADDRESS\">Nikos Drakos</A>, Computer Based Learning Unit, University of Leeds. <P> The command line arguments were: <BR>
-<STRONG>latex2html</STRONG> <tt>$argv</tt>. <P>The translation was initiated by $address_data[0] on $address_data[1]", $_)
- : join('',$INFO,$_))
+ ? join('', $close_all
+ , "<STRONG>$t_title</STRONG><P>\nThis document was generated using the\n"
+ , "<A HREF=\"$TEX2HTMLADDRESS\"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A>"
+ , " translator Version $TEX2HTMLVERSION\n"
+ , "<P>Copyright © 1993, 1994, 1995, 1996, 1997,\n"
+ , "<A HREF=\"$AUTHORADDRESS\">Nikos Drakos</A>, \n"
+ , "Computer Based Learning Unit, University of Leeds.\n"
+ , "<P>The command line arguments were: <BR>\n "
+ , "<STRONG>latex2html</STRONG> <tt>$argv</tt>.\n"
+ , "<P>The translation was initiated by $address_data[0] on $address_data[1]"
+ , $open_all, $_)
+ : join('', $close_all, $INFO,"\n", $open_all, $_))
}
-# $idx_mark will be replaced with the real index at the end.
-# In addition to the standard stuff, add label to allow named node files.
+# $idx_mark will be replaced with the real index at the end
sub do_cmd_textohtmlindex {
local($_) = @_;
$TITLE = $idx_title;
$idxfile = $CURRENT_FILE;
+ if (%index_labels) { &make_index_labels(); }
+ if (($SHORT_INDEX) && (%index_segment)) { &make_preindex(); }
+ else { $preindex = ''; }
+ local($heading) = join('',&make_section_heading($idx_title, "H2"),
+ $idx_mark);
+ local($pre,$post) = &minimize_open_tags($heading);
&anchor_label("genindex",$CURRENT_FILE,$_); # this is added
- join('','<P>' , &make_section_heading($idx_title, "H2"), $idx_mark, $_);
+ join('',"<BR>\n" , $pre, $_);
}
# $idx_module_mark will be replaced with the real index at the end
# it.
sub add_bbl_and_idx_dummy_commands {
- local($id);
+ local($id) = $global{'max_id'};
+
+ $section_commands{'textohtmlmoduleindex'} = 2;
+
s/([\\]begin\s*$O\d+$C\s*thebibliography)/$bbl_cnt++; $1/eg;
-#print STDERR "\nthebibliography: $bbl_cnt\n";
- #if ($bbl_cnt == 1) {
- s/([\\]begin\s*$O\d+$C\s*thebibliography)/do { $id = ++$global{'max_id'}; "\\bibliography$O$id$C$O$id$C $1"}/geo;
+ s/([\\]begin\s*$O\d+$C\s*thebibliography)/$id++; "\\bibliography$O$id$C$O$id$C $1"/geo
+ #if ($bbl_cnt == 1)
+ ;
#}
- local(@parts) = split(/\\begin\s*$O\d+$C\s*theindex/);
- if (scalar(@parts) == 3) {
- print "\n&add_bbl_and_idx_dummy_commands ==> adding module index";
- s/([\\]begin\s*$O\d+$C\s*theindex)/\\textohtmlmoduleindex $1/o;
- }
+ #----------------------------------------------------------------------#
+ # (FLD) This was added #
+ local(@parts) = split(/\\begin\s*$O\d+$C\s*theindex/); #
+ if (scalar(@parts) == 3) { #
+ print "\n&add_bbl_and_idx_dummy_commands ==> adding module index"; #
+ s/([\\]begin\s*$O\d+$C\s*theindex)/\\textohtmlmoduleindex $1/o; #
+ } #
+ #----------------------------------------------------------------------#
+ $global{'max_id'} = $id;
s/([\\]begin\s*$O\d+$C\s*theindex)/\\textohtmlindex $1/o;
s/[\\]printindex/\\textohtmlindex /o;
&lib_add_bbl_and_idx_dummy_commands() if defined(&lib_add_bbl_and_idx_dummy_commands);
# etc. must appear in the contents table at the same level as the outermost
# sectioning command. This subroutine finds what is the outermost level and
# sets the above to the same level;
-sub set_depth_levels {
- $section_headings['textohtmlmoduleindex'] = 'h1';
- # Sets $outermost_level
- local($level);
- foreach $level ("part", "chapter", "section", "subsection",
- "subsubsection", "paragraph") {
- last if (($outermost_level) = /\\($level)$delimiter_rx/);
- }
- $level = ($outermost_level ? $section_commands{$outermost_level} :
- do {$outermost_level = 'section'; 3;});
- $MAX_SPLIT_DEPTH = $MAX_SPLIT_DEPTH + $level;
- %section_commands = ('tableofcontents', $level, 'listoffigures', $level,
- 'listoftables', $level, 'bibliography', $level,
- 'textohtmlindex', $level,
- 'textohtmlmoduleindex', $level,
- %section_commands);
+
+%section_commands = ('textohtmlmoduleindex', 2, %section_commands);
+
+# sub set_depth_levels {
+# # Sets $outermost_level
+# local($level);
+# #RRM: do not alter user-set value for $MAX_SPLIT_DEPTH
+# foreach $level ("part", "chapter", "section", "subsection",
+# "subsubsection", "paragraph") {
+# last if (($outermost_level) = /\\($level)$delimiter_rx/);
+# }
+# $level = ($outermost_level ? $section_commands{$outermost_level} :
+# do {$outermost_level = 'section'; 3;});
+
+# #RRM: but calculate value for $MAX_SPLIT_DEPTH when a $REL_DEPTH was given
+# if ($REL_DEPTH && $MAX_SPLIT_DEPTH) {
+# $MAX_SPLIT_DEPTH = $level + $MAX_SPLIT_DEPTH;
+# } elsif (!($MAX_SPLIT_DEPTH)) { $MAX_SPLIT_DEPTH = 1 };
+
+# %unnumbered_section_commands = (
+# 'tableofcontents', $level
+# , 'listoffigures', $level
+# , 'listoftables', $level
+# , 'bibliography', $level
+# , 'textohtmlindex', $level
+# , 'textohtmlmoduleindex', $level
+# );
+
+# %section_commands = (
+# %unnumbered_section_commands
+# , %section_commands
+# );
+# }
+
+
+# Fix from Ross Moore for ']' in \item[...]; this can be removed once the next
+# patch to LaTeX2HTML is released and tested.
+#
+sub protect_useritems {
+ local(*_) = @_;
+ local($preitems, $thisitem);
+ while (/\\item\s*\[/) {
+ $preitems .= $`; $_ = $';
+ $thisitem = $&.'<<'.++$global{'max_id'}.'>>';
+ s/^(((($O|$OP)\d+($C|$CP)).*\3|<[^<>]*>|[^\]<]+)*)\]/$thisitem.=$1;''/e;
+ $preitems .= $thisitem.'<<'.$global{'max_id'}.'>>]'; s/^]//;
+ }
+ $_ = $preitems . $_;
}
-
+
1; # This must be the last line