From 13763f6c7fd5e8d84dd3c5d968ba803e96fdf6e4 Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Sun, 8 Dec 2024 16:58:47 +0100 Subject: [PATCH] feature: add latex renderer --- renderer/fifty_ohm_html_renderer.py | 4 +- renderer/fifty_ohm_latex_renderer.py | 97 ++++++++++++++++++++++++++++ test/test_tag.py | 4 +- 3 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 renderer/fifty_ohm_latex_renderer.py diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index 7e8b1e7..de7bbe2 100644 --- a/renderer/fifty_ohm_html_renderer.py +++ b/renderer/fifty_ohm_html_renderer.py @@ -74,8 +74,8 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): if(token.tagtype == "webmargin"): type = "margin" - elif(token.tagtype == "webtipp"): - type = "tipp" + elif(token.tagtype == "webtip"): + type = "tip" elif(token.tagtype == "webindepth"): type = "indepth" else : diff --git a/renderer/fifty_ohm_latex_renderer.py b/renderer/fifty_ohm_latex_renderer.py new file mode 100644 index 0000000..5e55998 --- /dev/null +++ b/renderer/fifty_ohm_latex_renderer.py @@ -0,0 +1,97 @@ +from mistletoe.latex_renderer import LaTeXRenderer + +from renderer.comment import BlockComment, SpanComment +from renderer.dash import Dash +from renderer.halfwidth_spaces import HalfwidthSpaces +from renderer.nonbreaking_spaces import NonbreakingSpaces, NonbreakingSpacesDots +from renderer.quote import Quote +from renderer.tag import Tag +from renderer.underline import Underline + + +class FiftyOhmLaTeXRenderer(LaTeXRenderer): + + def __init__(self): + super().__init__( + Dash, + BlockComment, + SpanComment, + Quote, + Underline, + Tag, + HalfwidthSpaces, + NonbreakingSpaces, + NonbreakingSpacesDots, + ) + + def render_document(self, token): + self.footnotes.update(token.footnotes) + return self.render_inner(token) + + def render_dash(self, token): + return " -- " + + def render_block_comment(self, token): + return "" # TODO propagate comments to the LaTeX document + + def render_span_comment(self, token): + return "" # TODO propagate comments to the LaTeX document + + def render_quote(self, token): + return fr"\enquote{{{self.render_inner(token)}}}" + + def render_emphasis(self, token): + return fr"\emph{{{self.render_inner(token)}}}" + + def render_underline(self, token): + return fr"\underline{{{self.render_inner(token)}}}" + + def render_thematic_break(self, token): + return "" + + def render_tag(self, token): # noqa: C901 + + tagtype = None + + match token.tagtype: + case "danger": + tagtype = "MarginDanger" + case "warning": + tagtype = "MarginWarning" + case "attention": + tagtype = "MarginAttention" + case "tip": + tagtype = "MarginTip" + case "webtip": + tagtype = "WebTip" + case "unit": + tagtype = "MarginUnit" + case "indepth": + tagtype = "MarginInDepth" + case "webindepth": + tagtype = "MarginWebInDepth" + case "webmargin": + tagtype = "WebMargin" + case "fullwidth": + tagtype = "FullWidth" + case "latexonly": + return self.render_inner(token) + case "webonly": + return "" + case _: + tagtype = "Margin" + + return fr"\{tagtype}{{{self.render_inner(token)}}}" + + def render_halfwidth_spaces(self, token): + return f"{token.first}.\,{token.second}." + + def render_nonbreaking_spaces(self, token): + return f"{token.first}~{token.second}" + + def render_nonbreaking_spaces_dots(self, token): + lookup = { + "" : "", + " " : "~" + } + return f"{lookup[token.first]}{token.second}{lookup[token.third]}" \ No newline at end of file diff --git a/test/test_tag.py b/test/test_tag.py index 40352cf..09e6193 100644 --- a/test/test_tag.py +++ b/test/test_tag.py @@ -19,8 +19,8 @@ def test_tag_html() : "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("margin","

Foo

",1,0)+'\n', "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("indepth","

Foo

",1,0)+'\n', "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("margin","

Foo

",1,0)+'\n', - "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("tipp","

Foo

",1,0)+'\n', - "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("tipp","

Foo

",1,0)+'\n', + "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("tip","

Foo

",1,0)+'\n', + "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("tip","

Foo

",1,0)+'\n', "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("indepth","

Foo

",1,0)+'\n', "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("unit","

Foo

",1,0)+'\n', "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("danger","

Foo

",1,0)+'\n',