summaryrefslogtreecommitdiff
path: root/src/lxml
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2019-04-22 09:51:29 +0200
committerStefan Behnel <stefan_ml@behnel.de>2019-04-22 09:51:29 +0200
commitab44c355560aac6d1202364df996036f91f64346 (patch)
tree9b58dd7335c56ec533f6077ec7eab080c887f928 /src/lxml
parent260ea114cecfafcf848bfec11f75336c57e555d4 (diff)
downloadpython-lxml-ab44c355560aac6d1202364df996036f91f64346.tar.gz
Tighten conditions under which we need to overwrite the parser start/end even callbacks: no namespace parsing => no namespace callbacks.
Diffstat (limited to 'src/lxml')
-rw-r--r--src/lxml/saxparser.pxi24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/lxml/saxparser.pxi b/src/lxml/saxparser.pxi
index 75d4e633..2d8e92c7 100644
--- a/src/lxml/saxparser.pxi
+++ b/src/lxml/saxparser.pxi
@@ -109,7 +109,8 @@ cdef class _SaxParserContext(_ParserContext):
self._connectEvents(c_ctxt)
cdef void _connectTarget(self, xmlparser.xmlParserCtxt* c_ctxt):
- """wrap original SAX2 callbacks to call into parser target"""
+ """Wrap original SAX2 callbacks to call into parser target.
+ """
sax = c_ctxt.sax
self._origSaxStart = sax.startElementNs = NULL
self._origSaxStartNoNs = sax.startElement = NULL
@@ -154,28 +155,37 @@ cdef class _SaxParserContext(_ParserContext):
c_ctxt.replaceEntities = 1
cdef void _connectEvents(self, xmlparser.xmlParserCtxt* c_ctxt):
- """wrap original SAX2 callbacks to collect parse events"""
+ """Wrap original SAX2 callbacks to collect parse events without parser target.
+ """
sax = c_ctxt.sax
self._origSaxStartDocument = sax.startDocument
sax.startDocument = _handleSaxStartDocument
+
+ # only override "start" event handler if needed
self._origSaxStart = sax.startElementNs
- self._origSaxStartNoNs = sax.startElement
- # only override start event handler if needed
- if self._event_filter == 0 or \
+ if self._event_filter == 0 or c_ctxt.html or \
self._event_filter & (PARSE_EVENT_FILTER_START |
PARSE_EVENT_FILTER_END |
PARSE_EVENT_FILTER_START_NS |
PARSE_EVENT_FILTER_END_NS):
sax.startElementNs = <xmlparser.startElementNsSAX2Func>_handleSaxStart
+
+ self._origSaxStartNoNs = sax.startElement
+ if self._event_filter == 0 or c_ctxt.html or \
+ self._event_filter & (PARSE_EVENT_FILTER_START |
+ PARSE_EVENT_FILTER_END):
sax.startElement = <xmlparser.startElementSAXFunc>_handleSaxStartNoNs
+ # only override "end" event handler if needed
self._origSaxEnd = sax.endElementNs
- self._origSaxEndNoNs = sax.endElement
- # only override end event handler if needed
if self._event_filter == 0 or \
self._event_filter & (PARSE_EVENT_FILTER_END |
PARSE_EVENT_FILTER_END_NS):
sax.endElementNs = <xmlparser.endElementNsSAX2Func>_handleSaxEnd
+
+ self._origSaxEndNoNs = sax.endElement
+ if self._event_filter == 0 or \
+ self._event_filter & PARSE_EVENT_FILTER_END:
sax.endElement = <xmlparser.endElementSAXFunc>_handleSaxEndNoNs
self._origSaxComment = sax.comment