]> granicus.if.org Git - python/commitdiff
Drop xmllib in favor of SAX.
authorFred Drake <fdrake@acm.org>
Fri, 30 Nov 2001 19:30:03 +0000 (19:30 +0000)
committerFred Drake <fdrake@acm.org>
Fri, 30 Nov 2001 19:30:03 +0000 (19:30 +0000)
Doc/tools/sgmlconv/latex2esis.py

index 28433c740c4ac5ee7d1038f3b400cd4a99296aec..5bfc7484e0d2aafe306b2a6b7b05e6351232cea1 100755 (executable)
@@ -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():