Kaydet (Commit) 381832ea authored tarafından Fred Drake's avatar Fred Drake

Drop xmllib in favor of SAX.

üst 1e53fa79
...@@ -22,16 +22,11 @@ import re ...@@ -22,16 +22,11 @@ import re
import string import string
import sys import sys
import UserList import UserList
import xml.sax
import xml.sax.saxutils import xml.sax.saxutils
from types import ListType, StringType, TupleType from types import ListType, StringType, TupleType
try:
from xml.parsers.xmllib import XMLParser
except ImportError:
from xmllib import XMLParser
from esistools import encode from esistools import encode
...@@ -439,14 +434,11 @@ class Parameter: ...@@ -439,14 +434,11 @@ class Parameter:
self.implied = 0 self.implied = 0
class TableParser(XMLParser): class TableHandler(xml.sax.handler.ContentHandler):
def __init__(self, table=None): def __init__(self):
if table is None: self.__table = {}
table = {}
self.__table = table
self.__current = None
self.__buffer = '' self.__buffer = ''
XMLParser.__init__(self) self.__methods = {}
def get_table(self): def get_table(self):
for entry in self.__table.values(): for entry in self.__table.values():
...@@ -457,6 +449,27 @@ class TableParser(XMLParser): ...@@ -457,6 +449,27 @@ class TableParser(XMLParser):
entry.has_content = 1 entry.has_content = 1
return self.__table 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): def start_environment(self, attrs):
name = attrs["name"] name = attrs["name"]
self.__current = TableEntry(name, environment=1) self.__current = TableEntry(name, environment=1)
...@@ -517,15 +530,11 @@ class TableParser(XMLParser): ...@@ -517,15 +530,11 @@ class TableParser(XMLParser):
p.text = self.__buffer p.text = self.__buffer
self.__current.parameters.append(p) self.__current.parameters.append(p)
def handle_data(self, data):
self.__buffer = self.__buffer + data
def load_table(fp, table=None): def load_table(fp):
parser = TableParser(table=table) ch = TableHandler()
parser.feed(fp.read()) xml.sax.parse(fp, ch)
parser.close() return ch.get_table()
return parser.get_table()
def main(): def main():
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment