summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extendedimage.py40
1 files changed, 40 insertions, 0 deletions
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'<img src="{element.src}" title="{element.title}" alt="{element.alt}" />'
+
+ if element.href != "":
+ img = f'<a href="{element.href}">{img}</a>'
+
+ if element.figcaption != "":
+ img = f"<figure>{img}<figcaption>{element.figcaption}</figcaption></figure>"
+
+ return img
+
+
+ExtendedImage = MarkoExtension(
+ elements=[ExtendedImage],
+ renderer_mixins=[ExtendedImageRenderer]
+)