Added module synopsis support with one (big) caveat:  All the modules are
listed in each chapter that has a \localmoduletable.  This will be fixed,
and everything else seems to be working fine.
diff --git a/Doc/perl/python.perl b/Doc/perl/python.perl
index 3f34539..7af1909 100644
--- a/Doc/perl/python.perl
+++ b/Doc/perl/python.perl
@@ -416,15 +416,20 @@
 $THIS_MODULE = '';
 $THIS_CLASS = '';
 
-sub my_module_index_helper{
-    local($word, $_) = @_;
-    my($str,$br_id) = next_argument_id();
-    swallow_newline();
+sub define_module{
+    my($word,$name) = @_;
     my $section_tag = join('', @curr_sec_id);
     $word = "$word " if $word;
-    $THIS_MODULE = "$str";
+    $THIS_MODULE = "$name";
     make_mod_index_entry("SECTION$section_tag",
-			 "<tt>$str</tt> (${word}module)", 'DEF') . $_;
+			 "<tt>$name</tt> (${word}module)", 'DEF');
+}
+
+sub my_module_index_helper{
+    local($word, $_) = @_;
+    my $name = next_argument();
+    swallow_newline();
+    define_module($word, $name) . $_;
 }
 
 sub ref_module_index_helper{
@@ -690,15 +695,16 @@
     "<dt><b>$member</b><dd>" . $_;
 }
 
-@col_aligns = ("<td>", "<td>", "<td>");
+@col_aligns = ("<td>", "<td>", "<td>", "<td>");
 
 sub setup_column_alignments{
     local($_) = @_;
-    my($a1,$a2,$a3) = split(/[|]/,$_);
-    my($th1,$th2,$th3) = ('<th>', '<th>', '<th>');
+    my($a1,$a2,$a3,$a4) = split(/[|]/,$_);
+    my($th1,$th2,$th3,$th4) = ('<th>', '<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>');
+    $col_aligns[3] = (($a4 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>'));
@@ -706,12 +712,14 @@
 	    : ($a2 eq 'r' ? '<th align=right>' : '<th>'));
     $th3 = (($a3 eq 'l') ? '<th align=left>'
 	    : ($a3 eq 'r' ? '<th align=right>' : '<th>'));
-    ($th1, $th2, $th3);
+    $th4 = (($a4 eq 'l') ? '<th align=left>'
+	    : ($a4 eq 'r' ? '<th align=right>' : '<th>'));
+    ($th1, $th2, $th3, $th4);
 }
 
 sub do_env_tableii{
     local($_) = @_;
-    my($th1,$th2,$th3) = setup_column_alignments(next_argument());
+    my($th1,$th2,$th3,$th4) = setup_column_alignments(next_argument());
     my $font = next_argument();
     my $h1 = next_argument();
     my $h2 = next_argument();
@@ -742,7 +750,7 @@
 
 sub do_env_tableiii{
     local($_) = @_;
-    my($th1,$th2,$th3) = setup_column_alignments(next_argument());
+    my($th1,$th2,$th3,$th4) = setup_column_alignments(next_argument());
     my $font = next_argument();
     my $h1 = next_argument();
     my $h2 = next_argument();
@@ -768,36 +776,52 @@
 	$sfont = "<$font>";
 	$efont = "</$font>";
     }
-    my($c1align,$c2align,$c3align) = @col_aligns;
+    my($c1align,$c2align,$c3align) = @col_aligns[0,1,2];
     "<tr>$c1align$sfont$c1$efont</td>\n"
       . "      $c2align$c2</td>\n"
       . "      $c3align$c3</td>"
       . $_;
 }
 
-sub do_env_seealso{
-    "<p><b>See Also:</b></p>\n" . @_[0];
+sub do_env_tableiv{
+    local($_) = @_;
+    my($th1,$th2,$th3,$th4) = setup_column_alignments(next_argument());
+    my $font = next_argument();
+    my $h1 = next_argument();
+    my $h2 = next_argument();
+    my $h3 = next_argument();
+    my $h4 = next_argument();
+    $font = ''
+        if ($font eq 'textrm');
+    $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      $th4<b>$h4</b></th>"
+      . $_
+      . "\n</table>";
 }
 
-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....
+sub do_cmd_lineiv{
     local($_) = @_;
-    my $key = next_optional_argument();
-    my $module = next_argument();
-    my $text = next_argument();
-    $key = $module
-        unless $key;
-    "<p>Module <tt><b><a href=\"module-$key.html\">$module</a></b></tt>"
-      . "&nbsp;&nbsp;&nbsp;($text)</p>"
+    my $c1 = next_argument();
+    my $c2 = next_argument(); 
+    my $c3 = next_argument();
+    my $c4 = next_argument();
+    my($font,$sfont,$efont) = ($globals{'lineifont'}, '', '');
+    if ($font) {
+	$sfont = "<$font>";
+	$efont = "</$font>";
+    }
+    my($c1align,$c2align,$c3align,$c4align) = @col_aligns;
+    "<tr>$c1align$sfont$c1$efont</td>\n"
+      . "      $c2align$c2</td>\n"
+      . "      $c3align$c3</td>\n"
+      . "      $c4align$c4</td>"
       . $_;
 }
 
-sub do_cmd_seetext{
-    '<p>' . @_[0];
-}
-
-
 sub do_cmd_maketitle {
     local($_) = @_;
     my $the_title = '';
@@ -838,6 +862,94 @@
 
 
 #
+#  Module synopsis support
+#
+
+require SynopsisTable;
+
+$MY_CHAPTER_COUNTER = 0;
+
+sub get_chapter_id{
+    return $MY_CHAPTER_COUNTER;
+}
+
+sub get_synopsis_table{
+    my $chap = @_;
+    my $st = $ModuleSynopses{$chap};
+    if (!$st) {
+	$st = SynopsisTable->new();
+	$ModuleSynopses{$chap} = $st;
+    }
+    return $st;
+}
+
+sub do_cmd_declaremodule{
+    local($_) = @_;
+    my $key = next_optional_argument();
+    my $type = next_argument();
+    my $name = next_argument();
+    my $st = get_synopsis_table(get_chapter_id());
+    #
+    $key = $name unless $key;
+    $type = 'built-in' if $type eq 'builtin';
+    $st->declare($name, $key, $type);
+    define_module($type, $name);
+    anchor_label("module-$key",$CURRENT_FILE,$_)
+}
+
+sub do_cmd_modulesynopsis{
+    local($_) = @_;
+    my $st = get_synopsis_table(get_chapter_id());
+    $st->set_synopsis($THIS_MODULE, next_argument());
+    swallow_newline();
+    $_;
+}
+
+sub do_cmd_localmoduletable{
+    local($_) = @_;
+    $MY_CHAPTER_COUNTER = $MY_CHAPTER_COUNTER + 1;
+    my $chap = get_chapter_id();
+    "<tex2htmllocalmoduletable><$chap>" . $_;
+}
+
+sub process_all_localmoduletables{
+    while (/<tex2htmllocalmoduletable><(\d+)>/) {
+	my $chap = $1;
+	my $st = get_synopsis_table($chap);
+	my $data = $st->tohtml();
+	s/$&/$data/;
+    }
+}
+
+
+#
+#  "See also:" -- references placed at the end of a \section
+#
+
+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($_) = @_;
+    my $key = next_optional_argument();
+    my $module = next_argument();
+    my $text = next_argument();
+    $key = $module
+        unless $key;
+    "<p>Module <tt><b><a href=\"module-$key.html\">$module</a></b></tt>"
+      . "&nbsp;&nbsp;&nbsp;($text)</p>"
+      . $_;
+}
+
+sub do_cmd_seetext{
+    '<p>' . @_[0];
+}
+
+
+#
 #  Definition list support.
 #