From 09758ad306d2ab535d84cf6a546749945a1c312e Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Wed, 26 Feb 2025 21:23:03 +0100 Subject: [PATCH 1/4] First draft for pictures --- renderer/fifty_ohm_html_renderer.py | 15 +++++++++++++++ renderer/picture.py | 19 +++++++++++++++++++ test/test_picture.py | 27 +++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 renderer/picture.py create mode 100644 test/test_picture.py diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index be1a7ec..f4677b1 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) : + 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..4829ceb --- /dev/null +++ b/test/test_picture.py @@ -0,0 +1,27 @@ +import mistletoe +import pytest + +from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer +from test.util import paragraph + + +@pytest.mark.html +def test_underline_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_underline_latex(): +# assertions = { +# "Text": "\n\\underline{Text}\n", +# " Text Text ": "\n\\underline{ Text Text }\n", +# " Text *Text* ": "\n\\underline{ Text \emph{Text} }\n", +# } +# +# for assertion in assertions: +# assert mistletoe.markdown(assertion, FiftyOhmLaTeXRenderer) == assertions[assertion] From 49a11637c893c0ce4c8b30c4a4459ecb9521a258 Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Sun, 9 Mar 2025 22:35:10 +0100 Subject: [PATCH 2/4] Renamed Test --- test/test_picture.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_picture.py b/test/test_picture.py index 4829ceb..47fed4a 100644 --- a/test/test_picture.py +++ b/test/test_picture.py @@ -6,7 +6,7 @@ from test.util import paragraph @pytest.mark.html -def test_underline_html(): +def test_picture_html(): assertions = { "[picture:123:abc:Text]": FiftyOhmHtmlRenderer.render_picture_helper("123", "abc", "Text", "TODO"), } From 6e4809000aa25f543b06c290b3f7f017c831e1cc Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Mon, 10 Mar 2025 09:37:59 +0100 Subject: [PATCH 3/4] feature: added latex --- renderer/fifty_ohm_latex_renderer.py | 14 ++++++++++++++ test/test_picture.py | 19 +++++++++---------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/renderer/fifty_ohm_latex_renderer.py b/renderer/fifty_ohm_latex_renderer.py index 16e481b..21c3656 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,14 @@ 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 f""" + \DARCimage{{1.0\linewidth}}{{{id}include}} + \captionof{{figure}}{{{text}}} + \label{{{ref}}} + """ + + def render_picture(self, token) : + self.render_picture_helper(token.id, token.ref, token.text, token.number) \ No newline at end of file diff --git a/test/test_picture.py b/test/test_picture.py index 47fed4a..2c4b0f6 100644 --- a/test/test_picture.py +++ b/test/test_picture.py @@ -2,6 +2,7 @@ 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 @@ -15,13 +16,11 @@ def test_picture_html(): assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == paragraph(assertions[assertion]) -#@pytest.mark.latex -#def test_underline_latex(): -# assertions = { -# "Text": "\n\\underline{Text}\n", -# " Text Text ": "\n\\underline{ Text Text }\n", -# " Text *Text* ": "\n\\underline{ Text \emph{Text} }\n", -# } -# -# for assertion in assertions: -# assert mistletoe.markdown(assertion, FiftyOhmLaTeXRenderer) == 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) == assertions[assertion] From 326c925a56d249341743001c9e970994eee417c1 Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Mon, 10 Mar 2025 09:57:49 +0100 Subject: [PATCH 4/4] bugfix: Fixed bug --- renderer/fifty_ohm_html_renderer.py | 2 +- renderer/fifty_ohm_latex_renderer.py | 10 ++++------ test/test_picture.py | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index f4677b1..9dea785 100644 --- a/renderer/fifty_ohm_html_renderer.py +++ b/renderer/fifty_ohm_html_renderer.py @@ -182,4 +182,4 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): """ def render_picture(self, token) : - self.render_picture_helper(token.id, token.ref, token.text, token.number) \ No newline at end of file + 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 21c3656..94f5725 100644 --- a/renderer/fifty_ohm_latex_renderer.py +++ b/renderer/fifty_ohm_latex_renderer.py @@ -98,11 +98,9 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer): @staticmethod def render_picture_helper(id, ref, text, number): - return f""" - \DARCimage{{1.0\linewidth}}{{{id}include}} - \captionof{{figure}}{{{text}}} - \label{{{ref}}} - """ + return rf"""\DARCimage{{1.0\linewidth}}{{{id}include}} +\captionof{{figure}}{{{text}}} +\label{{{ref}}}""" def render_picture(self, token) : - self.render_picture_helper(token.id, token.ref, token.text, token.number) \ No newline at end of file + return self.render_picture_helper(token.id, token.ref, token.text, token.number) \ No newline at end of file diff --git a/test/test_picture.py b/test/test_picture.py index 2c4b0f6..23aef01 100644 --- a/test/test_picture.py +++ b/test/test_picture.py @@ -23,4 +23,4 @@ def test_picture_latex(): } for assertion in assertions: - assert mistletoe.markdown(assertion, FiftyOhmLaTeXRenderer) == assertions[assertion] + assert mistletoe.markdown(assertion, FiftyOhmLaTeXRenderer) == "\n" + assertions[assertion] + "\n"