Use a subclass of buildindex.Node to clean up the HTML and get the
ordering fixed up (this makes sure that "xml.dom" comes before
"xml.dom.minidom" in the Module Index, which was not true before because
some HTML cruft crept into the data structures).
diff --git a/Doc/tools/mkmodindex b/Doc/tools/mkmodindex
index 257e30a..3bc4b95 100755
--- a/Doc/tools/mkmodindex
+++ b/Doc/tools/mkmodindex
@@ -48,6 +48,23 @@
         print __doc__ % {"program": program}
 
 
+class Node(buildindex.Node):
+    annotation = ""
+
+    def __init__(self, link, str, seqno):
+        parts = str.split(None, 1)
+        if parts[0].endswith("</tt>"):
+            self.modname = parts[0][:-5]
+        else:
+            self.modname = parts[0]
+        if len(parts) == 2:
+            self.annotation = parts[1]
+        buildindex.Node.__init__(self, link, self.modname, seqno)
+
+    def __str__(self):
+        return '<tt class="module">%s</tt> %s' \
+               % (self.modname, self.annotation)
+
 _rx = re.compile(
     "<dt><a href='(module-.*\.html)#l2h-\d+'><tt class='module'>"
     "([a-zA-Z_][a-zA-Z0-9_.]*</tt>(\s*<em>"
@@ -83,10 +100,7 @@
                 basename, modname = m.group(1, 2)
                 has_plat_flag = has_plat_flag or m.group(3)
                 linkfile = os.path.join(dirname, basename)
-                nodes.append(buildindex.Node(
-                    '<a href="%s">' % linkfile,
-                    "<tt class=module>%s</tt>" % modname,
-                    seqno))
+                nodes.append(Node('<a href="%s">' % linkfile, modname, seqno))
                 seqno = seqno + 1
         ifp.close()
     #