Convert most uses of the string module to string methods.
(string.join() lives!)
diff --git a/Doc/tools/sgmlconv/esis2sgml.py b/Doc/tools/sgmlconv/esis2sgml.py
index 7bda929..458a074 100755
--- a/Doc/tools/sgmlconv/esis2sgml.py
+++ b/Doc/tools/sgmlconv/esis2sgml.py
@@ -97,7 +97,7 @@
             data = esistools.decode(data)
             data = escape(data)
             if not inverbatim:
-                data = string.replace(data, "---", "—")
+                data = data.replace("---", "—")
             ofp.write(data)
             if "\n" in data:
                 lastopened = None
@@ -139,7 +139,7 @@
             lastempty = 0
             inverbatim = 0
         elif type == "A":
-            name, type, value = string.split(data, " ", 2)
+            name, type, value = data.split(" ", 2)
             name = map_gi(name, _attr_map)
             attrs[name] = esistools.decode(value)
         elif type == "e":
@@ -165,7 +165,7 @@
             line = fp.readline()
             if not line:
                 break
-            gi = string.strip(line)
+            gi = line.strip()
             if gi:
                 d[gi] = gi
     fp = open(EMPTIES_FILENAME, "w")
@@ -177,9 +177,9 @@
 
 
 def update_gi_map(map, names, fromsgml=1):
-    for name in string.split(names, ","):
+    for name in names.split(","):
         if fromsgml:
-            uncased = string.lower(name)
+            uncased = name.lower()
         else:
             uncased = name
         map[uncased] = name
@@ -211,7 +211,7 @@
         elif opt in ("-x", "--xml"):
             xml = 1
         elif opt in ("-a", "--autoclose"):
-            autoclose = string.split(arg, ",")
+            autoclose = arg.split(",")
         elif opt == "--elements-map":
             elem_names = ("%s,%s" % (elem_names, arg))[1:]
         elif opt == "--attributes-map":
@@ -241,9 +241,9 @@
         # stream but set up conversion tables to get the case right on output
         global _normalize_case
         _normalize_case = string.lower
-        update_gi_map(_elem_map, string.split(elem_names, ","))
-        update_gi_map(_attr_map, string.split(attr_names, ","))
-        update_gi_map(_values_map, string.split(value_names, ","))
+        update_gi_map(_elem_map, elem_names.split(","))
+        update_gi_map(_attr_map, attr_names.split(","))
+        update_gi_map(_values_map, value_names.split(","))
     else:
         global map_gi
         map_gi = null_map_gi
diff --git a/Doc/tools/sgmlconv/esistools.py b/Doc/tools/sgmlconv/esistools.py
index 7feeada..6c7c0ae 100644
--- a/Doc/tools/sgmlconv/esistools.py
+++ b/Doc/tools/sgmlconv/esistools.py
@@ -1,7 +1,6 @@
 """Miscellaneous utility functions useful for dealing with ESIS streams."""
 
 import re
-import string
 
 import xml.dom.pulldom
 
@@ -182,7 +181,7 @@
         elif token == '?':
             if handler:
                 if ' ' in data:
-                    target, data = string.split(data, None, 1)
+                    target, data = data.split(None, 1)
                 else:
                     target, data = data, ""
                 handler.processingInstruction(target, decode(data))
diff --git a/Doc/tools/sgmlconv/latex2esis.py b/Doc/tools/sgmlconv/latex2esis.py
index c33c4d5..32115a8 100755
--- a/Doc/tools/sgmlconv/latex2esis.py
+++ b/Doc/tools/sgmlconv/latex2esis.py
@@ -109,7 +109,7 @@
         self.write = ofp.write
         self.ofp = ofp
         self.table = table
-        self.line = string.join(map(string.rstrip, ifp.readlines()), "\n")
+        self.line = string.join([s.rstrip() for s in ifp.readlines()], "\n")
         self.preamble = 1
 
     def convert(self):
@@ -170,7 +170,7 @@
                 entry = self.get_entry(macroname)
                 if entry.verbatim:
                     # magic case!
-                    pos = string.find(line, "\\end{%s}" % macroname)
+                    pos = line.find("\\end{%s}" % macroname)
                     text = line[m.end(1):pos]
                     stack.append(entry.name)
                     self.write("(%s\n" % entry.outputname)
@@ -410,7 +410,7 @@
 
 def skip_white(line):
     while line and line[0] in " %\n\t\r":
-        line = string.lstrip(line[1:])
+        line = line[1:].lstrip()
     return line
 
 
@@ -461,14 +461,14 @@
         self.__current.verbatim = attrs.get("verbatim") == "yes"
         if attrs.has_key("outputname"):
             self.__current.outputname = attrs.get("outputname")
-        self.__current.endcloses = string.split(attrs.get("endcloses", ""))
+        self.__current.endcloses = attrs.get("endcloses", "").split()
     def end_environment(self):
         self.end_macro()
 
     def start_macro(self, attrs):
         name = attrs["name"]
         self.__current = TableEntry(name)
-        self.__current.closes = string.split(attrs.get("closes", ""))
+        self.__current.closes = attrs.get("closes", "").split()
         if attrs.has_key("outputname"):
             self.__current.outputname = attrs.get("outputname")
     def end_macro(self):