diff --git a/Doc/tools/sgmlconv/latex2esis.py b/Doc/tools/sgmlconv/latex2esis.py
index f922b40..f3c39f5 100755
--- a/Doc/tools/sgmlconv/latex2esis.py
+++ b/Doc/tools/sgmlconv/latex2esis.py
@@ -13,6 +13,8 @@
 import StringIO
 import sys
 
+from esistools import encode
+
 
 class Error(Exception):
     pass
@@ -27,28 +29,18 @@
 _comment_rx = re.compile("%+ ?(.*)\n *")
 _text_rx = re.compile(r"[^]%\\{}]+")
 _optional_rx = re.compile(r"\s*[[]([^]]*)[]]")
-_parameter_rx = re.compile("[ \n]*{([^}]*)}")
+# _parameter_rx is this complicated to allow {...} inside a parameter;
+# this is useful to match tabular layout specifications like {c|p{24pt}}
+_parameter_rx = re.compile("[ \n]*{(([^{}}]|{[^}]*})*)}")
 _token_rx = re.compile(r"[a-zA-Z][a-zA-Z0-9.-]*$")
 _start_group_rx = re.compile("[ \n]*{")
 _start_optional_rx = re.compile("[ \n]*[[]")
 
 
-_charmap = {}
-for c in map(chr, range(256)):
-    _charmap[c] = c
-_charmap["\n"] = r"\n"
-_charmap["\\"] = r"\\"
-del c
-
-def encode(s):
-    return string.join(map(_charmap.get, s), '')
-
-
 ESCAPED_CHARS = "$%#^ {}&~"
 
 
-def subconvert(line, ofp, table, discards, autoclosing, knownempty,
-               endchar=None):
+def subconvert(line, ofp, table, discards, autoclosing, endchar=None):
     stack = []
     while line:
         if line[0] == endchar and not stack:
@@ -87,8 +79,8 @@
                 del stack[-1]
             else:
                 print stack
-                print envname
-                raise LaTeXFormatError("environment close doesn't match")
+                raise LaTeXFormatError(
+                    "environment close for %s doesn't match" % envname)
             line = line[m.end():]
             continue
         m = _begin_macro_rx.match(line)
@@ -122,7 +114,6 @@
             #
             conversion = table.get(macroname, ([], 0, 0, 0))
             params, optional, empty, environ = conversion
-            empty = empty or knownempty(macroname)
             if empty:
                 ofp.write("e\n")
             if not numbered:
@@ -150,7 +141,7 @@
                 if m:
                     line = line[m.end():]
                     line = subconvert(line, ofp, table, discards,
-                                      autoclosing, knownempty, endchar="]")
+                                      autoclosing, endchar="]")
                 line = "}" + line
                 continue
             # handle attribute mappings here:
@@ -258,12 +249,9 @@
                                + string.join(stack))
 
 
-def convert(ifp, ofp, table={}, discards=(), autoclosing=(), knownempties=()):
-    d = {}
-    for gi in knownempties:
-        d[gi] = gi
+def convert(ifp, ofp, table={}, discards=(), autoclosing=()):
     try:
-        subconvert(ifp.read(), ofp, table, discards, autoclosing, d.has_key)
+        subconvert(ifp.read(), ofp, table, discards, autoclosing)
     except IOError, (err, msg):
         if err != errno.EPIPE:
             raise
@@ -280,9 +268,11 @@
         usage()
         sys.exit(2)
     convert(ifp, ofp, {
-        # entries are name
-        #          -> ([list of attribute names], first_is_optional, empty)
+        # entries have the form:
+        # name: ([attribute names], first_is_optional, empty, isenv)
+        "appendix": ([], 0, 1, 0),
         "bifuncindex": (["name"], 0, 1, 0),
+        "catcode": ([], 0, 1, 0),
         "cfuncdesc": (["type", "name", ("args",)], 0, 0, 1),
         "chapter": ([("title",)], 0, 0, 0),
         "chapter*": ([("title",)], 0, 0, 0),
@@ -305,7 +295,14 @@
         "input": (["source"], 0, 1, 0),
         "item": ([("leader",)], 1, 0, 0),
         "label": (["id"], 0, 1, 0),
+        "labelwidth": ([], 0, 1, 0),
+        "LaTeX": ([], 0, 1, 0),
+        "leftmargin": ([], 0, 1, 0),
         "leq": ([], 0, 1, 0),
+        "localmoduletable": ([], 0, 1, 0),
+        "makeindex": ([], 0, 1, 0), 
+        "makemodindex": ([], 0, 1, 0), 
+        "maketitle": ([], 0, 1, 0),
         "manpage": (["name", "section"], 0, 1, 0),
         "memberdesc": (["class", "name"], 1, 0, 1),
         "methoddesc": (["class", "name", ("args",)], 1, 0, 1),
@@ -323,10 +320,12 @@
         "subparagraph": ([("title",)], 0, 0, 0),
         "subsection": ([("title",)], 0, 0, 0),
         "subsubsection": ([("title",)], 0, 0, 0),
+        "list": (["bullet", "init"], 0, 0, 1),
         "tableii": (["colspec", "style", "head1", "head2"], 0, 0, 1),
         "tableiii": (["colspec", "style", "head1", "head2", "head3"], 0, 0, 1),
         "tableiv": (["colspec", "style", "head1", "head2", "head3", "head4"],
                     0, 0, 1),
+        "version": ([], 0, 1, 0),
         "versionadded": (["version"], 0, 1, 0),
         "versionchanged": (["version"], 0, 1, 0),
         "withsubitem": (["text"], 0, 0, 0),
@@ -355,10 +354,7 @@
             discards=["fi", "ifhtml", "makeindex", "makemodindex", "maketitle",
                       "noindent", "tableofcontents"],
             autoclosing=["chapter", "section", "subsection", "subsubsection",
-                         "paragraph", "subparagraph", ],
-            knownempties=["appendix",
-                          "maketitle", "makeindex", "makemodindex",
-                          "localmoduletable"])
+                         "paragraph", "subparagraph", ])
 
 
 if __name__ == "__main__":
