mirror of
https://github.com/Mayuri-Chan/pyrofork.git
synced 2026-01-08 16:04:51 +00:00
Allow entities to overlap, like: <b>bold <i>and</b> italic</i>
This commit is contained in:
parent
df386b2f91
commit
07bc7e39df
1 changed files with 9 additions and 18 deletions
|
|
@ -37,8 +37,7 @@ class Parser(HTMLParser):
|
||||||
|
|
||||||
self.text = ""
|
self.text = ""
|
||||||
self.entities = []
|
self.entities = []
|
||||||
self.temp_entities = []
|
self.tag_entities = {}
|
||||||
self.tags = []
|
|
||||||
|
|
||||||
def handle_starttag(self, tag, attrs):
|
def handle_starttag(self, tag, attrs):
|
||||||
attrs = dict(attrs)
|
attrs = dict(attrs)
|
||||||
|
|
@ -81,30 +80,22 @@ class Parser(HTMLParser):
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.tags.append(tag)
|
if tag not in self.tag_entities:
|
||||||
self.temp_entities.append(entity(offset=len(self.text), length=0, **extra))
|
self.tag_entities[tag] = []
|
||||||
|
|
||||||
|
self.tag_entities[tag].append(entity(offset=len(self.text), length=0, **extra))
|
||||||
|
|
||||||
def handle_data(self, data):
|
def handle_data(self, data):
|
||||||
data = html.unescape(data)
|
data = html.unescape(data)
|
||||||
|
|
||||||
for entity in self.temp_entities:
|
for entities in self.tag_entities.values():
|
||||||
entity.length += len(data)
|
for entity in entities:
|
||||||
|
entity.length += len(data)
|
||||||
|
|
||||||
self.text += data
|
self.text += data
|
||||||
|
|
||||||
def handle_endtag(self, tag):
|
def handle_endtag(self, tag):
|
||||||
try:
|
self.entities.append(self.tag_entities[tag].pop())
|
||||||
start_tag = self.tags.pop()
|
|
||||||
except IndexError:
|
|
||||||
return
|
|
||||||
|
|
||||||
if start_tag != tag:
|
|
||||||
line, offset = self.getpos()
|
|
||||||
offset += 1
|
|
||||||
|
|
||||||
raise ValueError("Expected end tag </{}>, but found </{}> at {}:{}".format(start_tag, tag, line, offset))
|
|
||||||
|
|
||||||
self.entities.append(self.temp_entities.pop())
|
|
||||||
|
|
||||||
def error(self, message):
|
def error(self, message):
|
||||||
pass
|
pass
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue