from typing import override import cross.fragments as f from util.html import HTMLToFragmentsParser class StatusParser(HTMLToFragmentsParser): def __init__(self) -> None: super().__init__() @override def handle_a_endtag(self): current_end = len(self.text) start, _attr = self._tag_stack.pop("a") href = _attr.get('href') if href and current_end > start: cls = _attr.get('class', '') if cls: if 'hashtag' in cls: tag = self.text[start:current_end] tag = tag[1:] if tag.startswith('#') else tag self.fragments.append( f.TagFragment(start=start, end=current_end, tag=tag) ) return if 'mention' in cls: # TODO put the full acct in the fragment mention = self.text[start:current_end] mention = mention[1:] if mention.startswith('@') else mention self.fragments.append( f.MentionFragment(start=start, end=current_end, uri=mention) ) return self.fragments.append( f.LinkFragment(start=start, end=current_end, url=href) )