Convert the LaTeX "tie" (~) to a simple space.

Add support for some combining characters.

Remove unnecessary imports and dependencies on PyXML and esistools.
diff --git a/Doc/tools/sgmlconv/latex2esis.py b/Doc/tools/sgmlconv/latex2esis.py
index 325b0b1..379878a 100755
--- a/Doc/tools/sgmlconv/latex2esis.py
+++ b/Doc/tools/sgmlconv/latex2esis.py
@@ -16,17 +16,15 @@
 """
 __version__ = '$Revision$'
 
-import copy
 import errno
 import getopt
 import os
 import re
 import string
-import StringIO
 import sys
 import UserList
+import xml.sax.saxutils
 
-from esistools import encode
 from types import ListType, StringType, TupleType
 
 try:
@@ -50,12 +48,16 @@
         self.stack = stack[:]
         LaTeXFormatError.__init__(self, msg)
 
+def encode(s):
+    s = xml.sax.saxutils.escape(s)
+    return s.replace("\n", "\\n\n-")
+
 
 _begin_env_rx = re.compile(r"[\\]begin{([^}]*)}")
 _end_env_rx = re.compile(r"[\\]end{([^}]*)}")
 _begin_macro_rx = re.compile(r"[\\]([a-zA-Z]+[*]?) ?({|\s*\n?)")
 _comment_rx = re.compile("%+ ?(.*)\n[ \t]*")
-_text_rx = re.compile(r"[^]%\\{}]+")
+_text_rx = re.compile(r"[^]~%\\{}]+")
 _optional_rx = re.compile(r"\s*[[]([^]]*)[]]")
 # _parameter_rx is this complicated to allow {...} inside a parameter;
 # this is useful to match tabular layout specifications like {c|p{24pt}}
@@ -112,6 +114,9 @@
         self.line = string.join(map(string.rstrip, ifp.readlines()), "\n")
         self.preamble = 1
 
+    def write_ordinal(self, ordinal):
+        self.write("-\\%%%d;\n" % ordinal)
+
     def err_write(self, msg):
         if DEBUG:
             sys.stderr.write(str(msg) + "\n")
@@ -165,6 +170,12 @@
             if m:
                 # start of macro
                 macroname = m.group(1)
+                if macroname == "c":
+                    # Ugh!  This is a combining character...
+                    endpos = m.end()
+                    self.combining_char("c", line[endpos])
+                    line = line[endpos + 1:]
+                    continue
                 entry = self.get_entry(macroname)
                 if entry.verbatim:
                     # magic case!
@@ -290,6 +301,11 @@
                 del stack[-1]
                 line = line[1:]
                 continue
+            if line[0] == "~":
+                # don't worry about the "tie" aspect of this command
+                line = line[1:]
+                self.write("- \n")
+                continue
             if line[0] == "{":
                 stack.append("")
                 line = line[1:]
@@ -302,6 +318,14 @@
                 self.write("(BREAK\n)BREAK\n")
                 line = line[2:]
                 continue
+            if line[:2] == r"\_":
+                line = "_" + line[2:]
+                continue
+            if line[:2] in (r"\'", r'\"'):
+                # combining characters...
+                self.combining_char(line[1], line[2])
+                line = line[3:]
+                continue
             m = _text_rx.match(line)
             if m:
                 text = encode(m.group())
@@ -332,6 +356,18 @@
                                    + string.join(stack, ", "))
         # otherwise we just ran out of input here...
 
+    # This is a really limited table of combinations, but it will have
+    # to do for now.
+    _combinations = {
+        ("c", "c"): 0x00E7,
+        ("'", "e"): 0x00E9,
+        ('"', "o"): 0x00F6,
+        }
+
+    def combining_char(self, prefix, char):
+        ordinal = self._combinations[(prefix, char)]
+        self.write("-\\%%%d;\n" % ordinal)
+
     def start_macro(self, name):
         conversion = self.get_entry(name)
         parameters = conversion.parameters