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