feature: First tag implementation

This commit is contained in:
Prof. Dr. Matthias Jung DL9MJ
2024-12-07 20:20:49 +01:00
parent fbb26a8dd1
commit 2b05db77a4
3 changed files with 48 additions and 2 deletions
+7 -2
View File
@@ -1,12 +1,14 @@
from mistletoe import HtmlRenderer from mistletoe import HtmlRenderer
from renderer.comment import Comment from renderer.comment import Comment
from renderer.tag import Tag
from renderer.quote import Quote from renderer.quote import Quote
from renderer.underline import Underline
class FiftyOhmHtmlRenderer(HtmlRenderer): class FiftyOhmHtmlRenderer(HtmlRenderer):
def __init__(self): def __init__(self):
super().__init__(Comment, Quote) super().__init__(Comment, Quote, Underline, Tag)
def render_comment(): def render_comment():
return None return None
@@ -15,4 +17,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
return f"„{self.render_inner(token)}“" return f"„{self.render_inner(token)}“"
def render_underline(self, token): def render_underline(self, token):
return f"<u>{self.render_inner(token)}</u>" return f"<u>{self.render_inner(token)}</u>"
def render_tag(self, token):
return f'<div class="{token.tagtype}">{self.render_inner(token)}</div>'
+27
View File
@@ -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
+14
View File
@@ -0,0 +1,14 @@
import mistletoe
from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer
def test_tag_html() :
assertions = {
"<margin>\nFoo\n</margin>" : '<div class="margin"><p>Foo</p></div>\n',
"<indepth>\nFoo\n</indepth>" : '<div class="indepth"><p>Foo</p></div>\n',
}
for assertion in assertions:
assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion]