summaryrefslogtreecommitdiffstats
path: root/Doc/tools/sgmlconv/latex2esis.py
diff options
context:
space:
mode:
Diffstat (limited to 'Doc/tools/sgmlconv/latex2esis.py')
-rwxr-xr-xDoc/tools/sgmlconv/latex2esis.py51
1 files changed, 30 insertions, 21 deletions
diff --git a/Doc/tools/sgmlconv/latex2esis.py b/Doc/tools/sgmlconv/latex2esis.py
index 28433c7..5bfc748 100755
--- a/Doc/tools/sgmlconv/latex2esis.py
+++ b/Doc/tools/sgmlconv/latex2esis.py
@@ -22,16 +22,11 @@ import re
import string
import sys
import UserList
+import xml.sax
import xml.sax.saxutils
from types import ListType, StringType, TupleType
-try:
- from xml.parsers.xmllib import XMLParser
-except ImportError:
- from xmllib import XMLParser
-
-
from esistools import encode
@@ -439,14 +434,11 @@ class Parameter:
self.implied = 0
-class TableParser(XMLParser):
- def __init__(self, table=None):
- if table is None:
- table = {}
- self.__table = table
- self.__current = None
+class TableHandler(xml.sax.handler.ContentHandler):
+ def __init__(self):
+ self.__table = {}
self.__buffer = ''
- XMLParser.__init__(self)
+ self.__methods = {}
def get_table(self):
for entry in self.__table.values():
@@ -457,6 +449,27 @@ class TableParser(XMLParser):
entry.has_content = 1
return self.__table
+ def startElement(self, tag, attrs):
+ try:
+ start, end = self.__methods[tag]
+ except KeyError:
+ start = getattr(self, "start_" + tag, None)
+ end = getattr(self, "end_" + tag, None)
+ self.__methods[tag] = (start, end)
+ if start:
+ start(attrs)
+
+ def endElement(self, tag):
+ start, end = self.__methods[tag]
+ if end:
+ end()
+
+ def endDocument(self):
+ self.__methods.clear()
+
+ def characters(self, data):
+ self.__buffer += data
+
def start_environment(self, attrs):
name = attrs["name"]
self.__current = TableEntry(name, environment=1)
@@ -517,15 +530,11 @@ class TableParser(XMLParser):
p.text = self.__buffer
self.__current.parameters.append(p)
- def handle_data(self, data):
- self.__buffer = self.__buffer + data
-
-def load_table(fp, table=None):
- parser = TableParser(table=table)
- parser.feed(fp.read())
- parser.close()
- return parser.get_table()
+def load_table(fp):
+ ch = TableHandler()
+ xml.sax.parse(fp, ch)
+ return ch.get_table()
def main():