# # Copyright (c) 2022 Tulir Asokan # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. from typing import Any import commonmark class HtmlEscapingRenderer(commonmark.HtmlRenderer): def __init__(self, allow_html: bool = False): super().__init__() self.allow_html = allow_html def lit(self, s: str) -> None: if self.allow_html: return super().lit(s) return super().lit(s.replace("<", "<").replace(">", ">")) def image(self, node: Any, entering: Any) -> None: prev = self.allow_html self.allow_html = True super().image(node, entering) self.allow_html = prev md_parser = commonmark.Parser() yes_html_renderer = commonmark.HtmlRenderer() no_html_renderer = HtmlEscapingRenderer() def render(message: str, allow_html: bool = False) -> str: parsed = md_parser.parse(message) # type: ignore if allow_html: return yes_html_renderer.render(parsed) # type: ignore else: return no_html_renderer.render(parsed) # type: ignore