[Python-checkins] python/dist/src/Lib/xml/sax expatreader.py,1.30,1.31
loewis@users.sourceforge.net
loewis@users.sourceforge.net
Sat, 25 Jan 2003 08:51:52 -0800
Update of /cvsroot/python/python/dist/src/Lib/xml/sax
In directory sc8-pr-cvs1:/tmp/cvs-serv28717
Modified Files:
expatreader.py
Log Message:
Merge with PyXML 1.28:
Wrap a lot of long lines.
Clean up a handler for expat.error.
If a lexical handler is set, make sure we call the startDTD() and
endDTD(). If the lexical handler is unset (by setting it to None),
remove the handlers from the underlying pyexpat parser object.
Closes SF bug #485584.
In namespaces mode, make sure we set up the qnames dictionary
correctly for the AttributesNSImpl instance passed to the
start-element-handler.
Closes SF bug #563399.
Support skippedEntity. Fixes #665486.
Index: expatreader.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/xml/sax/expatreader.py,v
retrieving revision 1.30
retrieving revision 1.31
diff -C2 -d -r1.30 -r1.31
*** expatreader.py 30 Jun 2002 07:27:30 -0000 1.30
--- expatreader.py 25 Jan 2003 16:51:50 -0000 1.31
***************
*** 1,4 ****
"""
! SAX driver for the Pyexpat C module. This driver works with
pyexpat.__version__ == '2.22'.
"""
--- 1,4 ----
"""
! SAX driver for the pyexpat C module. This driver works with
pyexpat.__version__ == '2.22'.
"""
***************
*** 83,87 ****
class ExpatParser(xmlreader.IncrementalParser, xmlreader.Locator):
! "SAX driver for the Pyexpat C module."
def __init__(self, namespaceHandling=0, bufsize=2**16-20):
--- 83,87 ----
class ExpatParser(xmlreader.IncrementalParser, xmlreader.Locator):
! """SAX driver for the pyexpat C module."""
def __init__(self, namespaceHandling=0, bufsize=2**16-20):
***************
*** 111,115 ****
self._parser.SetBase(source.getSystemId())
! # Redefined setContentHandle to allow changing handlers during parsing
def setContentHandler(self, handler):
--- 111,115 ----
self._parser.SetBase(source.getSystemId())
! # Redefined setContentHandler to allow changing handlers during parsing
def setContentHandler(self, handler):
***************
*** 146,159 ****
elif name == feature_validation:
if state:
! raise SAXNotSupportedException("expat does not support validation")
elif name == feature_external_pes:
if state:
! raise SAXNotSupportedException("expat does not read external parameter entities")
elif name == feature_namespace_prefixes:
if state:
! raise SAXNotSupportedException("expat does not report namespace prefixes")
else:
! raise SAXNotRecognizedException("Feature '%s' not recognized" %
! name)
def getProperty(self, name):
--- 146,162 ----
elif name == feature_validation:
if state:
! raise SAXNotSupportedException(
! "expat does not support validation")
elif name == feature_external_pes:
if state:
! raise SAXNotSupportedException(
! "expat does not read external parameter entities")
elif name == feature_namespace_prefixes:
if state:
! raise SAXNotSupportedException(
! "expat does not report namespace prefixes")
else:
! raise SAXNotRecognizedException(
! "Feature '%s' not recognized" % name)
def getProperty(self, name):
***************
*** 167,173 ****
return self._parser.GetInputContext()
else:
! raise SAXNotRecognizedException("This version of expat does not support getting the XML string")
else:
! raise SAXNotSupportedException("XML string cannot be returned when not parsing")
raise SAXNotRecognizedException("Property '%s' not recognized" % name)
--- 170,179 ----
return self._parser.GetInputContext()
else:
! raise SAXNotRecognizedException(
! "This version of expat does not support getting"
! " the XML string")
else:
! raise SAXNotSupportedException(
! "XML string cannot be returned when not parsing")
raise SAXNotRecognizedException("Property '%s' not recognized" % name)
***************
*** 200,206 ****
# except when invoked from close.
self._parser.Parse(data, isFinal)
! except expat.error:
! error_code = self._parser.ErrorCode
! exc = SAXParseException(expat.ErrorString(error_code), None, self)
# FIXME: when to invoke error()?
self._err_handler.fatalError(exc)
--- 206,211 ----
# except when invoked from close.
self._parser.Parse(data, isFinal)
! except expat.error, e:
! exc = SAXParseException(expat.ErrorString(e.code), e, self)
# FIXME: when to invoke error()?
self._err_handler.fatalError(exc)
***************
*** 222,232 ****
def _reset_lex_handler_prop(self):
! self._parser.CommentHandler = self._lex_handler_prop.comment
! self._parser.StartCdataSectionHandler = self._lex_handler_prop.startCDATA
! self._parser.EndCdataSectionHandler = self._lex_handler_prop.endCDATA
def reset(self):
if self._namespaces:
! self._parser = expat.ParserCreate(None, " ", intern = self._interning)
self._parser.StartElementHandler = self.start_element_ns
self._parser.EndElementHandler = self.end_element_ns
--- 227,250 ----
def _reset_lex_handler_prop(self):
! lex = self._lex_handler_prop
! parser = self._parser
! if lex is None:
! parser.CommentHandler = None
! parser.StartCdataSectionHandler = None
! parser.EndCdataSectionHandler = None
! parser.StartDoctypeDeclHandler = None
! parser.EndDoctypeDeclHandler = None
! else:
! parser.CommentHandler = lex.comment
! parser.StartCdataSectionHandler = lex.startCDATA
! parser.EndCdataSectionHandler = lex.endCDATA
! parser.StartDoctypeDeclHandler = self.start_doctype_decl
! parser.EndDoctypeDeclHandler = lex.endDTD
def reset(self):
if self._namespaces:
! self._parser = expat.ParserCreate(None, " ",
! intern=self._interning)
! self._parser.namespace_prefixes = 1
self._parser.StartElementHandler = self.start_element_ns
self._parser.EndElementHandler = self.end_element_ns
***************
*** 249,253 ****
# self._parser.NotStandaloneHandler =
self._parser.ExternalEntityRefHandler = self.external_entity_ref
! self._parser.SetParamEntityParsing(expat.XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE)
self._parsing = 0
--- 267,277 ----
# self._parser.NotStandaloneHandler =
self._parser.ExternalEntityRefHandler = self.external_entity_ref
! try:
! self._parser.SkippedEntityHandler = self.skipped_entity_handler
! except AttributeError:
! # This pyexpat does not support SkippedEntity
! pass
! self._parser.SetParamEntityParsing(
! expat.XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE)
self._parsing = 0
***************
*** 282,301 ****
pair = name.split()
if len(pair) == 1:
pair = (None, name)
else:
pair = tuple(pair)
newattrs = {}
for (aname, value) in attrs.items():
! apair = aname.split()
! if len(apair) == 1:
apair = (None, aname)
else:
! apair = tuple(apair)
newattrs[apair] = value
self._cont_handler.startElementNS(pair, None,
! AttributesNSImpl(newattrs, {}))
def end_element_ns(self, name):
--- 306,339 ----
pair = name.split()
if len(pair) == 1:
+ # no namespace
pair = (None, name)
+ elif len(pair) == 3:
+ pair = pair[0], pair[1]
else:
+ # default namespace
pair = tuple(pair)
newattrs = {}
+ qnames = {}
for (aname, value) in attrs.items():
! parts = aname.split()
! length = len(parts)
! if length == 1:
! # no namespace
! qname = aname
apair = (None, aname)
+ elif length == 3:
+ qname = "%s:%s" % (parts[2], parts[1])
+ apair = parts[0], parts[1]
else:
! # default namespace
! qname = parts[1]
! apair = tuple(parts)
newattrs[apair] = value
+ qnames[apair] = qname
self._cont_handler.startElementNS(pair, None,
! AttributesNSImpl(newattrs, qnames))
def end_element_ns(self, name):
***************
*** 303,306 ****
--- 341,346 ----
if len(pair) == 1:
pair = (None, name)
+ elif len(pair) == 3:
+ pair = pair[0], pair[1]
else:
pair = tuple(pair)
***************
*** 322,325 ****
--- 362,368 ----
self._cont_handler.endPrefixMapping(prefix)
+ def start_doctype_decl(self, name, pubid, sysid, has_internal_subset):
+ self._lex_handler_prop.startDTD(name, pubid, sysid)
+
def unparsed_entity_decl(self, name, base, sysid, pubid, notation_name):
self._dtd_handler.unparsedEntityDecl(name, pubid, sysid, notation_name)
***************
*** 349,352 ****
--- 392,401 ----
del self._entity_stack[-1]
return 1
+
+ def skipped_entity_handler(self, name, is_pe):
+ if is_pe:
+ # The SAX spec requires to report skipped PEs with a '%'
+ name = '%'+name
+ self._cont_handler.skippedEntity(name)
# ---