diff --git a/.vscode/settings.json b/.vscode/settings.json
index 7c41002..1bb72f5 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,
diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py
index fa6a6ab..0695e89 100644
--- a/renderer/fifty_ohm_html_renderer.py
+++ b/renderer/fifty_ohm_html_renderer.py
@@ -1,12 +1,19 @@
from mistletoe import HtmlRenderer
+import textwrap
from renderer.comment import Comment
+from renderer.tag import Tag
from renderer.quote import Quote
+from renderer.underline import Underline
class FiftyOhmHtmlRenderer(HtmlRenderer):
+
+ margin_anchor_id = 0
+ margin_id = 0
+
def __init__(self):
- super().__init__(Comment, Quote)
+ super().__init__(Comment, Quote, Underline, Tag)
def render_comment():
return None
@@ -15,4 +22,59 @@ 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_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
+ )
+
\ 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"{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