diff --git a/.vscode/settings.json b/.vscode/settings.json
index 3e99ede..1bb72f5 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,7 +1,14 @@
{
"python.testing.pytestArgs": [
- "."
+ ".",
+ "-vv"
],
"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
diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py
index ed2f077..24fd496 100644
--- a/renderer/fifty_ohm_html_renderer.py
+++ b/renderer/fifty_ohm_html_renderer.py
@@ -1,9 +1,12 @@
+import textwrap
+
from mistletoe import HtmlRenderer
from .comment import Comment
-from .unit import Unit
from .quote import Quote
-
+from .tag import Tag
+from .underline import Underline
+from .unit import Unit
units = {
"A": "A",
@@ -38,8 +41,11 @@ no_space_units = ["°", "%"]
class FiftyOhmHtmlRenderer(HtmlRenderer):
+ margin_anchor_id = 0
+ margin_id = 0
+
def __init__(self):
- super().__init__(Comment, Unit, Quote)
+ super().__init__(Comment, Unit, Quote, Underline, Tag)
def render_comment():
return None
@@ -57,3 +63,54 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
return f"{token.value}{unit}"
else:
return f"{token.value} {unit}"
+
+ 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):
+ 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
+ )
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"{tagtype}>"):
+ 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..ba6ab95
--- /dev/null
+++ b/test/test_tag.py
@@ -0,0 +1,41 @@
+import mistletoe
+
+from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer
+
+def test_thematic_break_html() :
+ assertions = {
+ "---" : '\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,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" : "",
+ }
+
+ 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