mirror of
https://github.com/python/cpython
synced 2024-09-24 05:14:01 +00:00
support value-less attributes, using regex.group()
This commit is contained in:
parent
fd504d9f09
commit
cf9e27c72e
|
@ -173,8 +173,6 @@ def parse_starttag(self, i):
|
||||||
# Now parse the data between i+1 and j into a tag and attrs
|
# Now parse the data between i+1 and j into a tag and attrs
|
||||||
attrs = []
|
attrs = []
|
||||||
tagfind = regex.compile('[a-zA-Z][a-zA-Z0-9]*')
|
tagfind = regex.compile('[a-zA-Z][a-zA-Z0-9]*')
|
||||||
# XXX Should also support value-less attributes (e.g. ISMAP)
|
|
||||||
# XXX Should use regex.group()
|
|
||||||
attrfind = regex.compile(
|
attrfind = regex.compile(
|
||||||
'[ \t\n]+\([a-zA-Z][a-zA-Z0-9]*\)' +
|
'[ \t\n]+\([a-zA-Z][a-zA-Z0-9]*\)' +
|
||||||
'\([ \t\n]*=[ \t\n]*' +
|
'\([ \t\n]*=[ \t\n]*' +
|
||||||
|
@ -187,18 +185,12 @@ def parse_starttag(self, i):
|
||||||
while k < j:
|
while k < j:
|
||||||
l = attrfind.match(rawdata, k)
|
l = attrfind.match(rawdata, k)
|
||||||
if l < 0: break
|
if l < 0: break
|
||||||
regs = attrfind.regs
|
attrname, rest, attrvalue = attrfind.group(1, 2, 3)
|
||||||
a1, b1 = regs[1]
|
if not rest:
|
||||||
a2, b2 = regs[2]
|
attrvalue = attrname
|
||||||
a3, b3 = regs[3]
|
elif attrvalue[:1] == '\'' == attrvalue[-1:] or \
|
||||||
attrname = rawdata[a1:b1]
|
attrvalue[:1] == '"' == attrvalue[-1:]:
|
||||||
if '=' in rawdata[k:k+l]:
|
attrvalue = attrvalue[1:-1]
|
||||||
attrvalue = rawdata[a3:b3]
|
|
||||||
if attrvalue[:1] == '\'' == attrvalue[-1:] or \
|
|
||||||
attrvalue[:1] == '"' == attrvalue[-1:]:
|
|
||||||
attrvalue = attrvalue[1:-1]
|
|
||||||
else:
|
|
||||||
attrvalue = ''
|
|
||||||
attrs.append((string.lower(attrname), attrvalue))
|
attrs.append((string.lower(attrname), attrvalue))
|
||||||
k = k + l
|
k = k + l
|
||||||
j = j+1
|
j = j+1
|
||||||
|
@ -226,6 +218,8 @@ def parse_endtag(self, data):
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
self.unknown_endtag(tag)
|
self.unknown_endtag(tag)
|
||||||
return
|
return
|
||||||
|
# XXX Should invoke end methods when popping their
|
||||||
|
# XXX stack entry, not when encountering the tag!
|
||||||
if self.stack and self.stack[-1] == tag:
|
if self.stack and self.stack[-1] == tag:
|
||||||
del self.stack[-1]
|
del self.stack[-1]
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in a new issue