Make parse_formatted output links in a nicer way than markdown

This commit is contained in:
Tulir Asokan 2020-05-08 11:49:56 +03:00
parent 98eeb6a808
commit 341b3db99e

View file

@ -18,12 +18,24 @@ from html import escape
import attr import attr
from mautrix.client import Client as MatrixClient, SyncStream from mautrix.client import Client as MatrixClient, SyncStream
from mautrix.util.formatter import parse_html from mautrix.util.formatter import MatrixParser, MarkdownString, EntityType
from mautrix.util import markdown from mautrix.util import markdown
from mautrix.types import (EventType, MessageEvent, Event, EventID, RoomID, MessageEventContent, from mautrix.types import (EventType, MessageEvent, Event, EventID, RoomID, MessageEventContent,
MessageType, TextMessageEventContent, Format, RelatesTo) MessageType, TextMessageEventContent, Format, RelatesTo)
class HumanReadableString(MarkdownString):
def format(self, entity_type: EntityType, **kwargs) -> 'MarkdownString':
if entity_type == EntityType.URL and kwargs['url'] != self.text:
self.text = f"{self.text} ({kwargs['url']})"
return self
return super(HumanReadableString, self).format(entity_type, **kwargs)
class MaubotHTMLParser(MatrixParser[HumanReadableString]):
e = HumanReadableString
def parse_formatted(message: str, allow_html: bool = False, render_markdown: bool = True def parse_formatted(message: str, allow_html: bool = False, render_markdown: bool = True
) -> Tuple[str, str]: ) -> Tuple[str, str]:
if render_markdown: if render_markdown:
@ -32,7 +44,7 @@ def parse_formatted(message: str, allow_html: bool = False, render_markdown: boo
html = message html = message
else: else:
return message, escape(message) return message, escape(message)
return parse_html(html), html return MaubotHTMLParser.parse(html).text, html
class MaubotMessageEvent(MessageEvent): class MaubotMessageEvent(MessageEvent):