From 38635a7abd8ee85172af1e06bd3b731a06570277 Mon Sep 17 00:00:00 2001 From: Tim Grelka Date: Sun, 16 Feb 2025 17:51:51 +0100 Subject: [PATCH 1/6] feat: detect and remove comments --- renderer/comment.py | 27 +++++++++++++++++---------- renderer/fifty_ohm_latex_renderer.py | 6 +----- test/test_comment.py | 11 ++++++----- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/renderer/comment.py b/renderer/comment.py index ee70ef3..dd3cb65 100644 --- a/renderer/comment.py +++ b/renderer/comment.py @@ -3,22 +3,29 @@ import re from mistletoe.block_token import BlockToken from mistletoe.span_token import SpanToken - -class SpanComment(SpanToken): - """ - Coment span token (% Eiersalat). - Identifies a comment in text. - """ - - pattern = re.compile(r"(%.*\n?)") +# class SpanComment(SpanToken): +# """ +# Coment span token (% Eiersalat). +# Identifies a comment in text. +# """ +# +# pattern = re.compile(r"(%.*\n?)") class BlockComment(BlockToken): + def __init__(self, match): + self.content = match + self.children = [] + @staticmethod def start(line): return line.startswith("%") + @classmethod + def check_interrupts_paragraph(cls, lines): + return cls.start(lines.peek()) + @classmethod def read(cls, lines): - next(lines) - return None + comment = re.match(r"%(.*)", next(lines)).group(1).strip() + return comment diff --git a/renderer/fifty_ohm_latex_renderer.py b/renderer/fifty_ohm_latex_renderer.py index 1e1c204..1661884 100644 --- a/renderer/fifty_ohm_latex_renderer.py +++ b/renderer/fifty_ohm_latex_renderer.py @@ -1,6 +1,6 @@ from mistletoe.latex_renderer import LaTeXRenderer -from .comment import BlockComment, SpanComment +from .comment import BlockComment from .dash import Dash from .halfwidth_spaces import HalfwidthSpaces from .nonbreaking_spaces import NonbreakingSpaces, NonbreakingSpacesDots @@ -14,7 +14,6 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer): super().__init__( Dash, BlockComment, - SpanComment, Quote, Underline, Tag, @@ -33,9 +32,6 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer): 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 rf"\enquote{{{self.render_inner(token)}}}" diff --git a/test/test_comment.py b/test/test_comment.py index 28c3612..07d46a4 100644 --- a/test/test_comment.py +++ b/test/test_comment.py @@ -9,14 +9,15 @@ from test.util import paragraph @pytest.mark.html def test_comment_html(): assertions = { - "%Comment\nBar": "Bar", - # TODO: This test is not working as expected. The comment should be removed - # "%Comment\n" : "a", - "Foo\n%Comment\nBar": "Foo\nBar", + # TODOD: Remove \n + "%Comment\nBar": paragraph("Bar"), + "%Comment\n": "", + "Foo 100 % Bar": paragraph("Foo 100% Bar"), + "Foo\n%Comment\nBar": paragraph("Foo") + paragraph("Bar"), } for assertion in assertions: - assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == paragraph(assertions[assertion]) + assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion] @pytest.mark.latex From fe7ded027801936d9b99b55642970fef42185c2a Mon Sep 17 00:00:00 2001 From: Tim Grelka Date: Sun, 16 Feb 2025 17:52:06 +0100 Subject: [PATCH 2/6] feat: render comments in LaTeX --- renderer/fifty_ohm_html_renderer.py | 18 ++++++++++-------- renderer/fifty_ohm_latex_renderer.py | 2 +- test/test_comment.py | 8 ++++---- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index db8a67d..231b882 100644 --- a/renderer/fifty_ohm_html_renderer.py +++ b/renderer/fifty_ohm_html_renderer.py @@ -1,8 +1,8 @@ import textwrap -from mistletoe import HtmlRenderer +from mistletoe import Document, HtmlRenderer -from .comment import BlockComment, SpanComment +from .comment import BlockComment from .dash import Dash from .halfwidth_spaces import HalfwidthSpaces from .morse import Morse @@ -24,7 +24,6 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): super().__init__( Dash, BlockComment, - SpanComment, Quote, Unit, Underline, @@ -40,10 +39,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): return " – " def render_block_comment(self, token): - return "" - - def render_span_comment(self, token): - return "" + return None def render_quote(self, token): return f"„{self.render_inner(token)}“" @@ -158,5 +154,11 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): lookup = {"": "", " ": " "} return f"{lookup[token.first]}{token.second}{lookup[token.third]}" - def render_references(self, token): + def render_references(self, token: References): return f'{self.ref_id}' + + def render_document(self, token: Document) -> str: + self.footnotes.update(token.footnotes) + # 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 "{}\n".format(inner) if inner else "" diff --git a/renderer/fifty_ohm_latex_renderer.py b/renderer/fifty_ohm_latex_renderer.py index 1661884..e67fb65 100644 --- a/renderer/fifty_ohm_latex_renderer.py +++ b/renderer/fifty_ohm_latex_renderer.py @@ -30,7 +30,7 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer): return " -- " def render_block_comment(self, token): - return "" # TODO propagate comments to the LaTeX document + return f"% {token.content}" def render_quote(self, token): return rf"\enquote{{{self.render_inner(token)}}}" diff --git a/test/test_comment.py b/test/test_comment.py index 07d46a4..464035c 100644 --- a/test/test_comment.py +++ b/test/test_comment.py @@ -23,10 +23,10 @@ def test_comment_html(): @pytest.mark.latex def test_comment_latex(): assertions = { - "%Comment\nBar": "\nBar\n", - # TODO: This test is not working as expected. The comment should be removed - # "%Comment\n" : "a", - "Foo\n%Comment\nBar": "\nFoo\nBar\n", + "%Comment\nBar": "% Comment\nBar\n", + "%Comment\n": "% Comment", + "Foo 100 % Bar": "\nFoo 100 \% Bar\n", + "Foo\n%Comment\nBar": "\nFoo\n% Comment\nBar\n", } for assertion in assertions: From fa3ba2973bc96c09abe93bcaaa5edb556d809bd5 Mon Sep 17 00:00:00 2001 From: Tim Grelka Date: Sun, 16 Feb 2025 17:56:26 +0100 Subject: [PATCH 3/6] fix: add line break after LaTeX comment --- renderer/fifty_ohm_latex_renderer.py | 2 +- test/test_comment.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/renderer/fifty_ohm_latex_renderer.py b/renderer/fifty_ohm_latex_renderer.py index e67fb65..802cd96 100644 --- a/renderer/fifty_ohm_latex_renderer.py +++ b/renderer/fifty_ohm_latex_renderer.py @@ -30,7 +30,7 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer): return " -- " def render_block_comment(self, token): - return f"% {token.content}" + return f"% {token.content}\n" def render_quote(self, token): return rf"\enquote{{{self.render_inner(token)}}}" diff --git a/test/test_comment.py b/test/test_comment.py index 464035c..d9dd87d 100644 --- a/test/test_comment.py +++ b/test/test_comment.py @@ -23,10 +23,10 @@ def test_comment_html(): @pytest.mark.latex def test_comment_latex(): assertions = { - "%Comment\nBar": "% Comment\nBar\n", - "%Comment\n": "% Comment", + "%Comment\nBar": "% Comment\n\nBar\n", + "%Comment\n": "% Comment\n", "Foo 100 % Bar": "\nFoo 100 \% Bar\n", - "Foo\n%Comment\nBar": "\nFoo\n% Comment\nBar\n", + "Foo\n%Comment\nBar": "\nFoo\n% Comment\n\nBar\n", } for assertion in assertions: From 27b447d5eaccbfd5c22eb9738ebc316b762a3c68 Mon Sep 17 00:00:00 2001 From: Tim Grelka Date: Sun, 16 Feb 2025 18:48:51 +0100 Subject: [PATCH 4/6] refactor: remove unused code --- renderer/comment.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/renderer/comment.py b/renderer/comment.py index dd3cb65..7626af8 100644 --- a/renderer/comment.py +++ b/renderer/comment.py @@ -3,14 +3,6 @@ import re from mistletoe.block_token import BlockToken from mistletoe.span_token import SpanToken -# class SpanComment(SpanToken): -# """ -# Coment span token (% Eiersalat). -# Identifies a comment in text. -# """ -# -# pattern = re.compile(r"(%.*\n?)") - class BlockComment(BlockToken): def __init__(self, match): From 6842fcad52d74aa3c2a1f132c22bc237f19788b1 Mon Sep 17 00:00:00 2001 From: Tim Grelka Date: Sun, 16 Feb 2025 18:56:46 +0100 Subject: [PATCH 5/6] refactor: use f string formatting --- renderer/fifty_ohm_html_renderer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index 231b882..0881c04 100644 --- a/renderer/fifty_ohm_html_renderer.py +++ b/renderer/fifty_ohm_html_renderer.py @@ -154,11 +154,11 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): lookup = {"": "", " ": " "} return f"{lookup[token.first]}{token.second}{lookup[token.third]}" - def render_references(self, token: References): + def render_references(self, token): return f'{self.ref_id}' def render_document(self, token: Document) -> str: self.footnotes.update(token.footnotes) # 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 "{}\n".format(inner) if inner else "" + return f"{inner}\n" if inner else "" From f2cf3231279982f74110b5d11c71accb7192b98c Mon Sep 17 00:00:00 2001 From: Tim Grelka Date: Sun, 16 Feb 2025 18:57:00 +0100 Subject: [PATCH 6/6] refactor: remove superflous comment --- test/test_comment.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_comment.py b/test/test_comment.py index d9dd87d..dedb47f 100644 --- a/test/test_comment.py +++ b/test/test_comment.py @@ -9,7 +9,6 @@ from test.util import paragraph @pytest.mark.html def test_comment_html(): assertions = { - # TODOD: Remove \n "%Comment\nBar": paragraph("Bar"), "%Comment\n": "", "Foo 100 % Bar": paragraph("Foo 100% Bar"),