diff --git a/mastodon/info.py b/mastodon/info.py index 913deaf..7540c48 100644 --- a/mastodon/info.py +++ b/mastodon/info.py @@ -138,20 +138,21 @@ class StatusParser(HTMLToTokensParser): @override def handle_a_endtag(self): - label, _attr = self._tag_stack.pop("a") + label, _attr = self._tag_stack["a"] href = _attr.get("href") if href: cls = _attr.get("class", "") if cls: - if "hashtag" in cls and href in self.tags: + if "hashtag" in cls and (href in self.tags or href.lower() in self.tags): tag = label[1:] if label.startswith("#") else label self.tokens.append(TagToken(tag=tag)) return - if "mention" in cls and href in self.mentions: + elif "mention" in cls and href in self.mentions: username = label[1:] if label.startswith("@") else label self.tokens.append(MentionToken(username=username, uri=href)) return - self.tokens.append(LinkToken(href=href, label=label)) + + super().handle_a_endtag() diff --git a/util/html.py b/util/html.py index 3854e17..540e287 100644 --- a/util/html.py +++ b/util/html.py @@ -20,7 +20,7 @@ class HTMLToTokensParser(HTMLParser): self.list_stack: list[tuple[str, int]] = [] def handle_a_endtag(self): - label, _attr = self._tag_stack.pop("a") + label, _attr = self._tag_stack["a"] href = _attr.get("href") if href: @@ -107,6 +107,7 @@ class HTMLToTokensParser(HTMLParser): case "a": if "a" in self._tag_stack: self.handle_a_endtag() + del self._tag_stack["a"] case "code": if not self.in_pre and self.in_code: self.append_text("`")