From 2b05db77a472f062084254c0fb21a6b5c4afd2f4 Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Sat, 7 Dec 2024 20:20:49 +0100 Subject: [PATCH 1/7] feature: First tag implementation --- renderer/fifty_ohm_html_renderer.py | 9 +++++++-- renderer/tag.py | 27 +++++++++++++++++++++++++++ test/test_tag.py | 14 ++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 renderer/tag.py create mode 100644 test/test_tag.py diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index fa6a6ab..0a73fed 100644 --- a/renderer/fifty_ohm_html_renderer.py +++ b/renderer/fifty_ohm_html_renderer.py @@ -1,12 +1,14 @@ from mistletoe import HtmlRenderer from renderer.comment import Comment +from renderer.tag import Tag from renderer.quote import Quote +from renderer.underline import Underline class FiftyOhmHtmlRenderer(HtmlRenderer): def __init__(self): - super().__init__(Comment, Quote) + super().__init__(Comment, Quote, Underline, Tag) def render_comment(): return None @@ -15,4 +17,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): return f"„{self.render_inner(token)}“" def render_underline(self, token): - return f"{self.render_inner(token)}" \ No newline at end of file + return f"{self.render_inner(token)}" + + def render_tag(self, token): + return f'
{self.render_inner(token)}
' \ No newline at end of file diff --git a/renderer/tag.py b/renderer/tag.py new file mode 100644 index 0000000..05d089b --- /dev/null +++ b/renderer/tag.py @@ -0,0 +1,27 @@ +import re + +from mistletoe.block_token import BlockToken, tokenize + + +class Tag(BlockToken): + + @staticmethod + def start(line): + return re.match(r"^\s*<[^>]+>", line) + + @classmethod + def read(cls, lines): + child_lines = [] + first_line = next(lines) + + tagtype = re.match(r"^\s*<([^>]+)>", first_line).group(1) + + for line in lines: + if line.startswith(f""): + break + else : + child_lines.append(line) + return tagtype, tokenize(child_lines) + + def __init__(self, match): + self.tagtype, self.children = match \ No newline at end of file diff --git a/test/test_tag.py b/test/test_tag.py new file mode 100644 index 0000000..57b4bfe --- /dev/null +++ b/test/test_tag.py @@ -0,0 +1,14 @@ +import mistletoe + +from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer + + +def test_tag_html() : + + assertions = { + "\nFoo\n" : '

Foo

\n', + "\nFoo\n" : '

Foo

\n', + } + + for assertion in assertions: + assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion] From 63082d9d610b23d1e9e3209d74b6913edf4a322e Mon Sep 17 00:00:00 2001 From: Tim Grelka Date: Sat, 7 Dec 2024 21:37:18 +0100 Subject: [PATCH 2/7] feat: autofix ruff on save --- .vscode/settings.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 3e99ede..7c41002 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,5 +3,11 @@ "." ], "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true + "python.testing.pytestEnabled": true, + "[python]": { + "editor.codeActionsOnSave": { + "source.fixAll.ruff": "explicit", + "source.organizeImports.ruff": "explicit" + } + } } \ No newline at end of file From 17863ec1357d16ad627483181d050cd33ef1e42f Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Sat, 7 Dec 2024 22:35:52 +0100 Subject: [PATCH 3/7] refactor: increase verbosoty of tests --- .vscode/settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 3e99ede..ac3c7a4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,7 @@ { "python.testing.pytestArgs": [ - "." + ".", + "-vv" ], "python.testing.unittestEnabled": false, "python.testing.pytestEnabled": true From de782b53766ff58e613716848544f3bcb5ae888a Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Sat, 7 Dec 2024 22:36:25 +0100 Subject: [PATCH 4/7] feature: added thematic break and all tags --- renderer/fifty_ohm_html_renderer.py | 59 ++++++++++++++++++++++++++++- test/test_tag.py | 35 ++++++++++++++--- 2 files changed, 88 insertions(+), 6 deletions(-) diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index 0a73fed..0695e89 100644 --- a/renderer/fifty_ohm_html_renderer.py +++ b/renderer/fifty_ohm_html_renderer.py @@ -1,4 +1,5 @@ from mistletoe import HtmlRenderer +import textwrap from renderer.comment import Comment from renderer.tag import Tag @@ -7,6 +8,10 @@ from renderer.underline import Underline class FiftyOhmHtmlRenderer(HtmlRenderer): + + margin_anchor_id = 0 + margin_id = 0 + def __init__(self): super().__init__(Comment, Quote, Underline, Tag) @@ -19,5 +24,57 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): def render_underline(self, token): return f"{self.render_inner(token)}" + def render_thematic_break(self, token): + self.margin_anchor_id += 1 + return f'' + + @staticmethod + def render_tag_helper(type, content, margin_id, margin_anchor_id): + """ This function is used to render the different types of tags. It is + used in the HtmlRenderer class and also in the test class """ + return textwrap.dedent(f'''\ +
+ {content} +
+ + + ''') + def render_tag(self, token): - return f'
{self.render_inner(token)}
' \ No newline at end of file + if(token.tagtype == "latexonly"): + return "" + elif(token.tagtype == "webonly"): + return self.render_inner(token) + + self.margin_id += 1 + + if(token.tagtype == "webmargin"): + type = "margin" + elif(token.tagtype == "webtip"): + type = "tipp" + elif(token.tagtype == "webindepth"): + type = "indepth" + else : + type = token.tagtype + + return self.render_tag_helper( + type, + self.render_inner(token), + self.margin_id, + self.margin_anchor_id + ) + \ No newline at end of file diff --git a/test/test_tag.py b/test/test_tag.py index 57b4bfe..7843bff 100644 --- a/test/test_tag.py +++ b/test/test_tag.py @@ -2,13 +2,38 @@ import mistletoe from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer - -def test_tag_html() : - +def test_thematic_break_html() : assertions = { - "\nFoo\n" : '

Foo

\n', - "\nFoo\n" : '

Foo

\n', + "---" : '\n', + "---\n---" : '\n\n', } for assertion in assertions: assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion] + +def test_tag_html() : + + assertions = { + "\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,1)+'\n', + "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("webtipp","

Foo

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

Foo

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

Foo

\n', + "\nFoo\n" : "", + } + + for assertion in assertions: + assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion] + +def test_thematic_break_and_tag_html() : + + assertions = { + "---\n\nFoo\n" : '\n'+FiftyOhmHtmlRenderer.render_tag_helper("margin","

Foo

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

Foo

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

Foo

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

Foo

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

Foo

",2,2)+'\n', + } + + for assertion in assertions: + assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion] \ No newline at end of file From cdd61d463f48ce17696a91e9e0cb32842e272dee Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Sat, 7 Dec 2024 23:35:15 +0100 Subject: [PATCH 5/7] feature: add unit and danger tests --- test/test_tag.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/test_tag.py b/test/test_tag.py index 7843bff..ba6ab95 100644 --- a/test/test_tag.py +++ b/test/test_tag.py @@ -17,9 +17,11 @@ 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,1)+'\n', + "\nFoo\n" : FiftyOhmHtmlRenderer.render_tag_helper("tipp","

Foo

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

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', "\nFoo\n" : '

Foo

\n', "\nFoo\n" : "", } From ca0c223cdcaab044cff60b2201e3cf9499ee5f73 Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Sun, 8 Dec 2024 10:35:57 +0100 Subject: [PATCH 6/7] feature: add requirements.txt --- requirements.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..fa39cef --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +coverage==7.6.9 +iniconfig==2.0.0 +mistletoe==1.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 From d4db6a3353a1ae1c51235946a2d4bbbee1e59d45 Mon Sep 17 00:00:00 2001 From: "Prof. Dr. Matthias Jung DL9MJ" Date: Sun, 8 Dec 2024 10:36:13 +0100 Subject: [PATCH 7/7] feature: add drone-ci config --- .drone.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..01ba815 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,13 @@ +kind: pipeline +type: docker +name: default + +steps: +- name: 50ohm.de + image: debian:latest + environment: + commands: + - apt-get update && apt-get install -qyf --no-install-recommends python3 + - curl -LsSf https://astral.sh/uv/install.sh | sh + - pip install --break-system-packages `cat requirements.txt` + - cd test && pytest \ No newline at end of file