mirror of
https://github.com/python/cpython.git
synced 2025-07-28 05:34:31 +00:00
#13358: HTMLParser now calls handle_data only once for each CDATA.
This commit is contained in:
parent
93bbb6a9a6
commit
00dc60beee
3 changed files with 27 additions and 3 deletions
|
@ -14,7 +14,6 @@ import re
|
|||
# Regular expressions used for parsing
|
||||
|
||||
interesting_normal = re.compile('[&<]')
|
||||
interesting_cdata = re.compile(r'<(/|\Z)')
|
||||
incomplete = re.compile('&[a-zA-Z#]')
|
||||
|
||||
entityref = re.compile('&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]')
|
||||
|
@ -125,8 +124,8 @@ class HTMLParser(markupbase.ParserBase):
|
|||
return self.__starttag_text
|
||||
|
||||
def set_cdata_mode(self, elem):
|
||||
self.interesting = interesting_cdata
|
||||
self.cdata_elem = elem.lower()
|
||||
self.interesting = re.compile(r'</\s*%s\s*>' % self.cdata_elem, re.I)
|
||||
|
||||
def clear_cdata_mode(self):
|
||||
self.interesting = interesting_normal
|
||||
|
@ -144,6 +143,8 @@ class HTMLParser(markupbase.ParserBase):
|
|||
if match:
|
||||
j = match.start()
|
||||
else:
|
||||
if self.cdata_elem:
|
||||
break
|
||||
j = n
|
||||
if i < j: self.handle_data(rawdata[i:j])
|
||||
i = self.updatepos(i, j)
|
||||
|
@ -212,7 +213,7 @@ class HTMLParser(markupbase.ParserBase):
|
|||
else:
|
||||
assert 0, "interesting.search() lied"
|
||||
# end while
|
||||
if end and i < n:
|
||||
if end and i < n and not self.cdata_elem:
|
||||
self.handle_data(rawdata[i:n])
|
||||
i = self.updatepos(i, n)
|
||||
self.rawdata = rawdata[i:]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue