mirror of https://github.com/python/cpython
Drop xmllib in favor of SAX.
This commit is contained in:
parent
1e53fa7907
commit
381832ead5
|
@ -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():
|
||||
|
|
Loading…
Reference in New Issue