From 735f47971fc35edeaf8162a98a4c9d1830530949 Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Sat, 24 May 2025 12:38:15 +0200 Subject: [PATCH 1/2] feature: add qso rendering --- renderer/fifty_ohm_html_renderer.py | 10 ++++++++ renderer/qso.py | 38 +++++++++++++++++++++++++++++ test/test_qso.py | 17 +++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 renderer/qso.py create mode 100644 test/test_qso.py diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index 22c68e1..d0831aa 100644 --- a/renderer/fifty_ohm_html_renderer.py +++ b/renderer/fifty_ohm_html_renderer.py @@ -9,6 +9,7 @@ from .morse import Morse from .nonbreaking_spaces import NonbreakingSpaces, NonbreakingSpacesDots from .photo import Photo from .picture import Picture +from .qso import Qso from .question import Question from .quote import Quote from .references import References @@ -43,6 +44,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): Picture, Photo, Table, + Qso, ) self.question_renderer = question_renderer @@ -155,6 +157,14 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): return self.render_tag_helper(type, self.render_inner(token), self.margin_id, self.margin_anchor_id) + def render_qso(self, token): + self.margin_id += 1 + qso = "" + for child in token.children: + direction = "other" if child.received else "own" + qso += f'
{self.render_inner(child)}
' + return self.render_tag_helper("qso", qso, self.margin_id, self.margin_anchor_id) + def render_halfwidth_spaces(self, token): return f"{token.first}. {token.second}." diff --git a/renderer/qso.py b/renderer/qso.py new file mode 100644 index 0000000..6571696 --- /dev/null +++ b/renderer/qso.py @@ -0,0 +1,38 @@ +import re + +from mistletoe import span_token +from mistletoe.block_token import BlockToken + + +class Qso(BlockToken): + @staticmethod + def start(line): + return re.match(r"^\s*", line) + + @classmethod + def read(cls, lines): + child_lines = [] + + for line in lines: + if line.startswith(""): + continue + if line.startswith(""): + break + else: + child_lines.append(QsoLine(line)) + return child_lines + + def __init__(self, match): + self.children = match + +class QsoLine(BlockToken): + @classmethod + def parse_line(cls, line): + if line.startswith(">"): + return True, line[1:].strip() + else: + return False, line.strip() + + def __init__(self, match): + self.received, self.text = self.parse_line(match) + super().__init__(self.text, span_token.tokenize_inner) diff --git a/test/test_qso.py b/test/test_qso.py new file mode 100644 index 0000000..eb67881 --- /dev/null +++ b/test/test_qso.py @@ -0,0 +1,17 @@ +import mistletoe +import pytest + +from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer + + +@pytest.mark.html +def test_table_html(): + assertions = { + "\nfoo\n": FiftyOhmHtmlRenderer.render_tag_helper("qso", '
foo
', 1, 0) +"\n", + "\nfoo\n> bar\n": FiftyOhmHtmlRenderer.render_tag_helper("qso", '
foo
bar
', 1, 0) +"\n", + "\n*foo*\n> bar\n": FiftyOhmHtmlRenderer.render_tag_helper("qso", '
foo
bar
', 1, 0) +"\n", + } + + for assertion in assertions: + assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion] + From f9aeed4aca44d852fc3821ec7b1265028c25f027 Mon Sep 17 00:00:00 2001 From: Tim Grelka DA2TG Date: Sat, 24 May 2025 23:56:57 +0000 Subject: [PATCH 2/2] Angewendeter Vorschlag --- renderer/fifty_ohm_html_renderer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index d0831aa..dbf0154 100644 --- a/renderer/fifty_ohm_html_renderer.py +++ b/renderer/fifty_ohm_html_renderer.py @@ -162,7 +162,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): qso = "" for child in token.children: direction = "other" if child.received else "own" - qso += f'
{self.render_inner(child)}
' + qso += f'
{self.render_inner(child)}
\n' return self.render_tag_helper("qso", qso, self.margin_id, self.margin_anchor_id) def render_halfwidth_spaces(self, token):