diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index be1a7ec..9dea785 100644 --- a/renderer/fifty_ohm_html_renderer.py +++ b/renderer/fifty_ohm_html_renderer.py @@ -2,6 +2,8 @@ import textwrap from mistletoe import Document, HtmlRenderer +from renderer.picture import Picture + from .comment import BlockComment from .dash import Dash from .halfwidth_spaces import HalfwidthSpaces @@ -35,6 +37,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): NonbreakingSpacesDots, References, Question, + Picture ) self.question_renderer = question_renderer @@ -168,3 +171,15 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): # Filter out None values, so block tokens can return None to not be rendered. inner = "\n".join(filter(lambda x: x is not None, [self.render(child) for child in token.children])) return f"{inner}\n" if inner else "" + + @staticmethod + def render_picture_helper(id, ref, text, number): + return f""" +
+ +
Abbildung {number}: {text}
+
+ """ + + def render_picture(self, token) : + return self.render_picture_helper(token.id, token.ref, token.text, token.number) \ No newline at end of file diff --git a/renderer/fifty_ohm_latex_renderer.py b/renderer/fifty_ohm_latex_renderer.py index 16e481b..94f5725 100644 --- a/renderer/fifty_ohm_latex_renderer.py +++ b/renderer/fifty_ohm_latex_renderer.py @@ -1,5 +1,7 @@ from mistletoe.latex_renderer import LaTeXRenderer +from renderer.picture import Picture + from .comment import BlockComment from .dash import Dash from .halfwidth_spaces import HalfwidthSpaces @@ -22,6 +24,7 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer): NonbreakingSpaces, NonbreakingSpacesDots, Question, + Picture ) self.question_renderer = question_renderer @@ -92,3 +95,12 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer): def render_question(self, token): return self.question_renderer(token.question_number) + + @staticmethod + def render_picture_helper(id, ref, text, number): + return rf"""\DARCimage{{1.0\linewidth}}{{{id}include}} +\captionof{{figure}}{{{text}}} +\label{{{ref}}}""" + + def render_picture(self, token) : + return self.render_picture_helper(token.id, token.ref, token.text, token.number) \ No newline at end of file diff --git a/renderer/picture.py b/renderer/picture.py new file mode 100644 index 0000000..acfe82c --- /dev/null +++ b/renderer/picture.py @@ -0,0 +1,19 @@ +import re + +from mistletoe.span_token import SpanToken + + +class Picture(SpanToken): + """ + Span token for pictures. + Example: [picture:727:amplitude_periode_halbwellen:Positive und negative Halbwellen einer Sinusschwingung] + """ + + parse_inner = False + pattern = re.compile(r"\[picture:(\d+):(.+):(.+)\]") + + def __init__(self, match_object): + self.id = match_object.group(1) + self.ref = match_object.group(2) + self.text = match_object.group(3) + self.number = "TODO" \ No newline at end of file diff --git a/test/test_picture.py b/test/test_picture.py new file mode 100644 index 0000000..23aef01 --- /dev/null +++ b/test/test_picture.py @@ -0,0 +1,26 @@ +import mistletoe +import pytest + +from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer +from renderer.fifty_ohm_latex_renderer import FiftyOhmLaTeXRenderer +from test.util import paragraph + + +@pytest.mark.html +def test_picture_html(): + assertions = { + "[picture:123:abc:Text]": FiftyOhmHtmlRenderer.render_picture_helper("123", "abc", "Text", "TODO"), + } + + for assertion in assertions: + assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == paragraph(assertions[assertion]) + + +@pytest.mark.latex +def test_picture_latex(): + assertions = { + "[picture:123:abc:Text]": FiftyOhmLaTeXRenderer.render_picture_helper("123", "abc", "Text", "TODO"), + } + + for assertion in assertions: + assert mistletoe.markdown(assertion, FiftyOhmLaTeXRenderer) == "\n" + assertions[assertion] + "\n"