From ab032152044e0a435ca2c122a951a0c5388bd7a3 Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Thu, 13 May 1999 18:36:54 +0000 Subject: [PATCH] make_index_entry(): Remove. Not only did this override the l2hinit.perl version of the function (which overrode a version in latex2html), but do_cmd_index() was overridden. Since do_cmd_index() was the only caller, we can trash this. define_indexing_macro(): New function used during setup to support more dynamic dispatch for indexing. process_index_macros(): New function; implement dynamic dispatching of indexing support functions, allowing many targets used in indexing to be shared by multiple index entries. I.e., something like \index{foo}\bifuncindex{bar} can now share a single target anchor. These indexing changes reduce the amount of clutter in the generated HTML files. In the reference manual, this cuts the number of targets by 44%. Targets are less affected when generated by environments rather than macros. --- Doc/perl/python.perl | 199 ++++++++++++++++++++++++------------------- 1 file changed, 111 insertions(+), 88 deletions(-) diff --git a/Doc/perl/python.perl b/Doc/perl/python.perl index 67bac7262fe..12c7d0a1a7d 100644 --- a/Doc/perl/python.perl +++ b/Doc/perl/python.perl @@ -308,7 +308,8 @@ sub do_cmd_withsubitem{ } # This is the prologue macro which is required to start writing the -# mod\jobname.idx file; we can just ignore it. +# mod\jobname.idx file; we can just ignore it. (Defining this suppresses +# a warning that \makemodindex is unknown.) # sub do_cmd_makemodindex{ return @_[0]; } @@ -336,13 +337,6 @@ sub gen_link{ return ""; } -sub make_index_entry{ - my($str) = @_; - my($name,$aname,$ahref) = new_link_info(); - add_index_entry($str, $ahref); - return "$aname$anchor_invisible_mark"; -} - sub add_index_entry{ # add an entry to the index structures; ignore the return value my($str,$ahref) = @_; @@ -358,90 +352,119 @@ sub new_link_info{ return ($name, $aname, $ahref); } -sub do_cmd_index{ +$IndexMacroPattern = ''; +sub define_indexing_macro{ + my $count = @_; + my $i = 0; + for (; $i < $count; ++$i) { + my $name = @_[$i]; + my $cmd = "idx_cmd_$name"; + die "\nNo function $cmd() defined!\n" + if (!defined &$cmd); + eval ("sub do_cmd_$name { return process_index_macros(" + . "\@_[0], '$name'); }"); + if (length($IndexMacroPattern) == 0) { + $IndexMacroPattern = "$name"; + } + else { + $IndexMacroPattern .= "|$name"; + } + } +} + +$DEBUG_INDEXING = 0; +sub process_index_macros{ local($_) = @_; - my $str = next_argument(); - # + my $cmdname = @_[1]; # This is what triggered us in the first place; + # we know it's real, so just process it. my($name,$aname,$ahref) = new_link_info(); - add_index_entry("$str", $ahref); + my $cmd = "idx_cmd_$cmdname"; + print "\nIndexing: \\$cmdname" + if $DEBUG_INDEXING; + &$cmd($ahref); # modifies $_ and adds index entries + while (/^[\s\n]*\\($IndexMacroPattern)" . $_; } -sub do_cmd_kwindex{ - local($_) = @_; +define_indexing_macro('index'); +sub idx_cmd_index{ my $str = next_argument(); - # - my($name,$aname,$ahref) = new_link_info(); - add_index_entry("$str!keyword", $ahref); - add_index_entry("keyword!$str", $ahref); - return "$aname$anchor_invisible_mark" . $_; + add_index_entry("$str", @_[0]); } -sub do_cmd_indexii{ - local($_) = @_; +define_indexing_macro('kwindex'); +sub idx_cmd_kwindex{ + my $str = next_argument(); + add_index_entry("$str!keyword", @_[0]); + add_index_entry("keyword!$str", @_[0]); +} + +define_indexing_macro('indexii'); +sub idx_cmd_indexii{ my $str1 = next_argument(); my $str2 = next_argument(); - # - my($name,$aname,$ahref) = new_link_info(); - add_index_entry("$str1!$str2", $ahref); - add_index_entry("$str2!$str1", $ahref); - return "$aname$anchor_invisible_mark" . $_; + add_index_entry("$str1!$str2", @_[0]); + add_index_entry("$str2!$str1", @_[0]); } -sub do_cmd_indexiii{ - local($_) = @_; +define_indexing_macro('indexiii'); +sub idx_cmd_indexiii{ my $str1 = next_argument(); my $str2 = next_argument(); my $str3 = next_argument(); - # - my($name,$aname,$ahref) = new_link_info(); - add_index_entry("$str1!$str2 $str3", $ahref); - add_index_entry("$str2!$str3, $str1", $ahref); - add_index_entry("$str3!$str1 $str2", $ahref); - return "$aname$anchor_invisible_mark" . $_; + add_index_entry("$str1!$str2 $str3", @_[0]); + add_index_entry("$str2!$str3, $str1", @_[0]); + add_index_entry("$str3!$str1 $str2", @_[0]); } -sub do_cmd_indexiv{ - local($_) = @_; +define_indexing_macro('indexiv'); +sub idx_cmd_indexiv{ my $str1 = next_argument(); my $str2 = next_argument(); my $str3 = next_argument(); my $str4 = next_argument(); - # - my($name,$aname,$ahref) = new_link_info(); - add_index_entry("$str1!$str2 $str3 $str4", $ahref); - add_index_entry("$str2!$str3 $str4, $str1", $ahref); - add_index_entry("$str3!$str4, $str1 $str2", $ahref); - add_index_entry("$str4!$$str1 $str2 $str3", $ahref); - return "$aname$anchor_invisible_mark" . $_; + add_index_entry("$str1!$str2 $str3 $str4", @_[0]); + add_index_entry("$str2!$str3 $str4, $str1", @_[0]); + add_index_entry("$str3!$str4, $str1 $str2", @_[0]); + add_index_entry("$str4!$$str1 $str2 $str3", @_[0]); } -sub do_cmd_ttindex{ - local($_) = @_; +define_indexing_macro('ttindex'); +sub idx_cmd_ttindex{ my $str = next_argument(); my $entry = $str . get_indexsubitem(); - return make_index_entry($entry) . $_; + add_index_entry($entry, @_[0]); } sub my_typed_index_helper{ - local($word,$_) = @_; + my($word,$ahref) = @_; my $str = next_argument(); - # - my($name,$aname,$ahref) = new_link_info(); add_index_entry("$str $word", $ahref); add_index_entry("$word!$str", $ahref); - return "$aname$anchor_invisible_mark" . $_; } -sub do_cmd_stindex{ return my_typed_index_helper('statement', @_); } -sub do_cmd_opindex{ return my_typed_index_helper('operator', @_); } -sub do_cmd_exindex{ return my_typed_index_helper('exception', @_); } -sub do_cmd_obindex{ return my_typed_index_helper('object', @_); } +define_indexing_macro('stindex', 'opindex', 'exindex', 'obindex'); +sub idx_cmd_stindex{ my_typed_index_helper('statement', @_[0]); } +sub idx_cmd_opindex{ my_typed_index_helper('operator', @_[0]); } +sub idx_cmd_exindex{ my_typed_index_helper('exception', @_[0]); } +sub idx_cmd_obindex{ my_typed_index_helper('object', @_[0]); } -sub my_parword_index_helper{ - local($word,$_) = @_; +define_indexing_macro('bifuncindex'); +sub idx_cmd_bifuncindex{ my $str = next_argument(); - return make_index_entry("$str ($word)") . $_; + add_index_entry("$str() (built-in function)", @_[0]); } @@ -483,30 +506,30 @@ sub my_module_index_helper{ return define_module($word, $name) . $_; } -sub ref_module_index_helper{ - local($word, $_) = @_; - my $str = next_argument(); - $word = "$word " if $word; - return make_mod_index_entry("$str (${word}module)", 'REF') . $_; -} - -sub do_cmd_bifuncindex{ - local($_) = @_; - my $str = next_argument(); - my $fname = "$str()"; - return make_index_entry("$fname (built-in function)") . $_; -} - sub do_cmd_modindex{ return my_module_index_helper('', @_); } sub do_cmd_bimodindex{ return my_module_index_helper('built-in', @_); } sub do_cmd_exmodindex{ return my_module_index_helper('extension', @_); } sub do_cmd_stmodindex{ return my_module_index_helper('standard', @_); } +sub ref_module_index_helper{ + local($word, $ahref) = @_; + my $str = next_argument(); + $word = "$word " if $word; + $str = "$str (${word}module)"; + # can't use add_index_entry() since the 2nd arg to gen_index_id() is used; + # just inline it all here + $str = gen_index_id($str, 'REF'); + $index{$str} .= $ahref; + write_idxfile($ahref, $str); +} + # these should be adjusted a bit.... -sub do_cmd_refmodindex{ return ref_module_index_helper('', @_); } -sub do_cmd_refbimodindex{ return ref_module_index_helper('built-in', @_); } -sub do_cmd_refexmodindex{ return ref_module_index_helper('extension', @_); } -sub do_cmd_refstmodindex{ return ref_module_index_helper('standard', @_); } +define_indexing_macro('refmodindex', 'refbimodindex', + 'refexmodindex', 'refstmodindex'); +sub idx_cmd_refmodindex{ return ref_module_index_helper('', @_); } +sub idx_cmd_refbimodindex{ return ref_module_index_helper('built-in', @_); } +sub idx_cmd_refexmodindex{ return ref_module_index_helper('extension', @_); } +sub idx_cmd_refstmodindex{ return ref_module_index_helper('standard', @_); } sub do_cmd_nodename{ return do_cmd_label(@_); } @@ -517,7 +540,7 @@ sub init_myformat{ } init_myformat(); -# similar to make_index_entry(), but includes the string in the result +# Create an index entry, but include the string in the target anchor # instead of the dummy filler. # sub make_str_index_entry{ @@ -825,11 +848,11 @@ sub do_env_tableii{ my $h2 = next_argument(); s/[\s\n]+//; $globals{'lineifont'} = $font; - return '' + return '
' . "\n " . "\n " - . "\n $th1$h1" - . "\n $th2$h2" + . "\n $th1$h1\ \ " + . "\n $th2$h2\ \ " . "\n " . "\n " . $_ @@ -863,12 +886,12 @@ sub do_env_tableiii{ my $h3 = next_argument(); s/[\s\n]+//; $globals{'lineifont'} = $font; - return '
' + return '
' . "\n " . "\n " - . "\n $th1$h1" - . "\n $th2$h2" - . "\n $th3$h3" + . "\n $th1$h1\ \ " + . "\n $th2$h2\ \ " + . "\n $th3$h3\ \ " . "\n " . "\n " . $_ @@ -905,13 +928,13 @@ sub do_env_tableiv{ my $h4 = next_argument(); s/[\s\n]+//; $globals{'lineifont'} = $font; - return '
' + return '
' . "\n " . "\n " - . "\n $th1$h1" - . "\n $th2$h2" - . "\n $th3$h3" - . "\n $th4$h4" + . "\n $th1$h1\ \ " + . "\n $th2$h2\ \ " + . "\n $th3$h3\ \ " + . "\n $th4$h4\ \ " . "\n " . "\n " . $_