Pull request #27: Feature/picture
Merge in FRAG/50ohm.de from feature/picture to main * commit '326c925a56d249341743001c9e970994eee417c1': bugfix: Fixed bug feature: added latex Renamed Test First draft for pictures
This commit is contained in:
@@ -2,6 +2,8 @@ import textwrap
|
|||||||
|
|
||||||
from mistletoe import Document, HtmlRenderer
|
from mistletoe import Document, HtmlRenderer
|
||||||
|
|
||||||
|
from renderer.picture import Picture
|
||||||
|
|
||||||
from .comment import BlockComment
|
from .comment import BlockComment
|
||||||
from .dash import Dash
|
from .dash import Dash
|
||||||
from .halfwidth_spaces import HalfwidthSpaces
|
from .halfwidth_spaces import HalfwidthSpaces
|
||||||
@@ -35,6 +37,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
|
|||||||
NonbreakingSpacesDots,
|
NonbreakingSpacesDots,
|
||||||
References,
|
References,
|
||||||
Question,
|
Question,
|
||||||
|
Picture
|
||||||
)
|
)
|
||||||
self.question_renderer = question_renderer
|
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.
|
# 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]))
|
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 ""
|
return f"{inner}\n" if inner else ""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def render_picture_helper(id, ref, text, number):
|
||||||
|
return f"""
|
||||||
|
<figure class="picture" id="ref_{ref}" name="{ref}">
|
||||||
|
<img src="img/picture_{id}.svg">
|
||||||
|
<figcaption>Abbildung {number}: {text}</figcaption>
|
||||||
|
</figure>
|
||||||
|
"""
|
||||||
|
|
||||||
|
def render_picture(self, token) :
|
||||||
|
return self.render_picture_helper(token.id, token.ref, token.text, token.number)
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
from mistletoe.latex_renderer import LaTeXRenderer
|
from mistletoe.latex_renderer import LaTeXRenderer
|
||||||
|
|
||||||
|
from renderer.picture import Picture
|
||||||
|
|
||||||
from .comment import BlockComment
|
from .comment import BlockComment
|
||||||
from .dash import Dash
|
from .dash import Dash
|
||||||
from .halfwidth_spaces import HalfwidthSpaces
|
from .halfwidth_spaces import HalfwidthSpaces
|
||||||
@@ -22,6 +24,7 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer):
|
|||||||
NonbreakingSpaces,
|
NonbreakingSpaces,
|
||||||
NonbreakingSpacesDots,
|
NonbreakingSpacesDots,
|
||||||
Question,
|
Question,
|
||||||
|
Picture
|
||||||
)
|
)
|
||||||
self.question_renderer = question_renderer
|
self.question_renderer = question_renderer
|
||||||
|
|
||||||
@@ -92,3 +95,12 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer):
|
|||||||
|
|
||||||
def render_question(self, token):
|
def render_question(self, token):
|
||||||
return self.question_renderer(token.question_number)
|
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)
|
||||||
@@ -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"
|
||||||
@@ -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"
|
||||||
Reference in New Issue
Block a user