From d0a873b8be0d6dd19f1c424782789b27a3649c45 Mon Sep 17 00:00:00 2001 From: Botond Hende Date: Mon, 15 Jul 2024 23:35:02 +0200 Subject: extended image module --- extendedimage.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 extendedimage.py (limited to 'extendedimage.py') diff --git a/extendedimage.py b/extendedimage.py new file mode 100644 index 0000000..b62f100 --- /dev/null +++ b/extendedimage.py @@ -0,0 +1,40 @@ +from marko import inline +from marko.helpers import MarkoExtension + + +class ExtendedImage(inline.InlineElement): + pattern = r'!\[(.*)\]\(((?:[^"\s\\]|\\.)+|"(?:[^"\\]|\\.)*")\s((?:[^"\s\\]|\\.)+|"(?:[^"\\]|\\.)*")\s((?:[^"\s\\]|\\.)+|"(?:[^"\\]|\\.)*")\s((?:[^"\s\\]|\\.)+|"(?:[^"\\]|\\.)*")\)' + parse_children = True + + def __init__(self, match): + self.alt = self.__strip_quotes(match.group(1)) + self.src = self.__strip_quotes(match.group(2)) + self.title = self.__strip_quotes(match.group(3)) + self.href = self.__strip_quotes(match.group(4)) + self.figcaption = self.__strip_quotes(match.group(5)) + + @staticmethod + def __strip_quotes(text: str) -> str: + if text.startswith('"'): + return text[1:-1] + + return text + + +class ExtendedImageRenderer: + def render_extended_image(self, element): + img = f'{element.alt}' + + if element.href != "": + img = f'{img}' + + if element.figcaption != "": + img = f"
{img}
{element.figcaption}
" + + return img + + +ExtendedImage = MarkoExtension( + elements=[ExtendedImage], + renderer_mixins=[ExtendedImageRenderer] +) -- cgit v1.2.3-70-g09d2