From 07bc7e39df8f9e66514bc78b3b6896e8a0d70d8d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 25 Jun 2019 07:08:38 +0200 Subject: [PATCH] Allow entities to overlap, like: bold and italic --- pyrogram/client/style/html.py | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/pyrogram/client/style/html.py b/pyrogram/client/style/html.py index 1748fa58..f861412b 100644 --- a/pyrogram/client/style/html.py +++ b/pyrogram/client/style/html.py @@ -37,8 +37,7 @@ class Parser(HTMLParser): self.text = "" self.entities = [] - self.temp_entities = [] - self.tags = [] + self.tag_entities = {} def handle_starttag(self, tag, attrs): attrs = dict(attrs) @@ -81,30 +80,22 @@ class Parser(HTMLParser): else: return - self.tags.append(tag) - self.temp_entities.append(entity(offset=len(self.text), length=0, **extra)) + if tag not in self.tag_entities: + self.tag_entities[tag] = [] + + self.tag_entities[tag].append(entity(offset=len(self.text), length=0, **extra)) def handle_data(self, data): data = html.unescape(data) - for entity in self.temp_entities: - entity.length += len(data) + for entities in self.tag_entities.values(): + for entity in entities: + entity.length += len(data) self.text += data def handle_endtag(self, tag): - try: - 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()) + self.entities.append(self.tag_entities[tag].pop()) def error(self, message): pass