Pull request #10: Feature/new tokens

Merge in FRAG/50ohm.de from feature/new-tokens to main

* commit '060e2de215d70a5eba53371c8fed99daf3fc2166':
  Angewendeter Vorschlag
  feature: add comment test
  feature: add dash renderer
  fix: Fixed bug that tag detects <u>
This commit is contained in:
Prof.Dr. Matthias Jung DL9MJ
2024-12-08 10:48:06 +00:00
7 changed files with 85 additions and 10 deletions
+11 -1
View File
@@ -1,7 +1,17 @@
import re
from mistletoe.block_token import BlockToken from mistletoe.block_token import BlockToken
from mistletoe.span_token import SpanToken
class Comment(BlockToken): class SpanComment(SpanToken):
"""
Coment span token (% Eiersalat).
Identifies a comment in text.
"""
pattern = re.compile(r'(%.*\n?)')
class BlockComment(BlockToken):
@staticmethod @staticmethod
def start(line): def start(line):
return line.startswith("%") return line.startswith("%")
+11
View File
@@ -0,0 +1,11 @@
import re
from mistletoe.span_token import SpanToken
class Dash(SpanToken):
"""
Dash span token ( - ).
Identifies a dash in a text.
"""
pattern = re.compile(r'(\s-\s)')
+15 -7
View File
@@ -1,9 +1,11 @@
from mistletoe import HtmlRenderer
import textwrap import textwrap
from renderer.comment import Comment from mistletoe import HtmlRenderer
from renderer.tag import Tag
from renderer.comment import BlockComment, SpanComment
from renderer.dash import Dash
from renderer.quote import Quote from renderer.quote import Quote
from renderer.tag import Tag
from renderer.underline import Underline from renderer.underline import Underline
@@ -13,10 +15,16 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
margin_id = 0 margin_id = 0
def __init__(self): def __init__(self):
super().__init__(Comment, Quote, Underline, Tag) super().__init__(Dash, BlockComment, SpanComment, Quote, Underline, Tag)
def render_comment(): def render_dash(self, token):
return None return " &ndash; "
def render_block_comment(self, token):
return ""
def render_span_comment(self, token):
return ""
def render_quote(self, token): def render_quote(self, token):
return f"„{self.render_inner(token)}“" return f"„{self.render_inner(token)}“"
@@ -64,7 +72,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
if(token.tagtype == "webmargin"): if(token.tagtype == "webmargin"):
type = "margin" type = "margin"
elif(token.tagtype == "webtip"): elif(token.tagtype == "webtipp"):
type = "tipp" type = "tipp"
elif(token.tagtype == "webindepth"): elif(token.tagtype == "webindepth"):
type = "indepth" type = "indepth"
+13 -1
View File
@@ -2,12 +2,24 @@ import re
from mistletoe.block_token import BlockToken, tokenize from mistletoe.block_token import BlockToken, tokenize
captures = [
"margin",
"indepth",
"webmargin",
"tipp",
"webtipp",
"webindepth",
"unit",
"danger",
"webonly",
"latexonly",
]
class Tag(BlockToken): class Tag(BlockToken):
@staticmethod @staticmethod
def start(line): def start(line):
return re.match(r"^\s*<[^>]+>", line) return re.match(r"^\s*<("+"|".join(captures)+r")+>", line)
@classmethod @classmethod
def read(cls, lines): def read(cls, lines):
+20
View File
@@ -0,0 +1,20 @@
import mistletoe
import pytest
from mistletoe.ast_renderer import AstRenderer
from renderer.comment import BlockComment, SpanComment
from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer
from test.util import paragraph
def test_comment_html(capsys) :
assertions = {
"%Comment\nBar" : "<p>Bar</p>\n",
# TODO: This test is not working as expected. The comment should be removed
#"%Comment\n" : "a",
"Foo\n%Comment\nBar" : "<p>Foo\nBar</p>\n",
}
for assertion in assertions:
assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion]
+14
View File
@@ -0,0 +1,14 @@
import mistletoe
from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer
from test.util import paragraph
def test_dash_html() :
assertions = {
"Foo - Bar" : "Foo &ndash; Bar",
}
for assertion in assertions:
assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == paragraph(assertions[assertion])
+1 -1
View File
@@ -18,7 +18,7 @@ def test_tag_html() :
"<indepth>\nFoo\n</indepth>" : FiftyOhmHtmlRenderer.render_tag_helper("indepth","<p>Foo</p>",1,0)+'\n', "<indepth>\nFoo\n</indepth>" : FiftyOhmHtmlRenderer.render_tag_helper("indepth","<p>Foo</p>",1,0)+'\n',
"<webmargin>\nFoo\n</webmargin>" : FiftyOhmHtmlRenderer.render_tag_helper("margin","<p>Foo</p>",1,0)+'\n', "<webmargin>\nFoo\n</webmargin>" : FiftyOhmHtmlRenderer.render_tag_helper("margin","<p>Foo</p>",1,0)+'\n',
"<tipp>\nFoo\n</tipp>" : FiftyOhmHtmlRenderer.render_tag_helper("tipp","<p>Foo</p>",1,0)+'\n', "<tipp>\nFoo\n</tipp>" : FiftyOhmHtmlRenderer.render_tag_helper("tipp","<p>Foo</p>",1,0)+'\n',
"<webtipp>\nFoo\n</webtipp>" : FiftyOhmHtmlRenderer.render_tag_helper("webtipp","<p>Foo</p>",1,0)+'\n', "<webtipp>\nFoo\n</webtipp>" : FiftyOhmHtmlRenderer.render_tag_helper("tipp","<p>Foo</p>",1,0)+'\n',
"<webindepth>\nFoo\n</webindepth>" : FiftyOhmHtmlRenderer.render_tag_helper("indepth","<p>Foo</p>",1,0)+'\n', "<webindepth>\nFoo\n</webindepth>" : FiftyOhmHtmlRenderer.render_tag_helper("indepth","<p>Foo</p>",1,0)+'\n',
"<unit>\nFoo\n</unit>" : FiftyOhmHtmlRenderer.render_tag_helper("unit","<p>Foo</p>",1,0)+'\n', "<unit>\nFoo\n</unit>" : FiftyOhmHtmlRenderer.render_tag_helper("unit","<p>Foo</p>",1,0)+'\n',
"<danger>\nFoo\n</danger>" : FiftyOhmHtmlRenderer.render_tag_helper("danger","<p>Foo</p>",1,0)+'\n', "<danger>\nFoo\n</danger>" : FiftyOhmHtmlRenderer.render_tag_helper("danger","<p>Foo</p>",1,0)+'\n',