feat: parse questions von @dl9mj

This commit is contained in:
Tim Grelka
2025-02-16 21:44:45 +01:00
parent 04a20e6121
commit 9ea98a941d
5 changed files with 87 additions and 6 deletions
+7 -1
View File
@@ -7,6 +7,7 @@ from .dash import Dash
from .halfwidth_spaces import HalfwidthSpaces
from .morse import Morse
from .nonbreaking_spaces import NonbreakingSpaces, NonbreakingSpacesDots
from .question import Question
from .quote import Quote
from .references import References
from .tag import Tag
@@ -20,7 +21,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
section_url = "section.html"
ref_id = 0
def __init__(self):
def __init__(self, question_renderer=None):
super().__init__(
Dash,
BlockComment,
@@ -33,7 +34,9 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
NonbreakingSpaces,
NonbreakingSpacesDots,
References,
Question,
)
self.question_renderer = question_renderer
def render_dash(self, token):
return " – "
@@ -157,6 +160,9 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
def render_references(self, token):
return f'<a href="{self.section_url}#ref_{token.first}" onclick="highlightRef(\'{token.first}\');">{self.ref_id}</a>'
def render_question(self, token):
return self.question_renderer(token.question_number)
def render_document(self, token: Document) -> str:
self.footnotes.update(token.footnotes)
# Filter out None values, so block tokens can return None to not be rendered.
+7 -1
View File
@@ -4,13 +4,14 @@ from .comment import BlockComment
from .dash import Dash
from .halfwidth_spaces import HalfwidthSpaces
from .nonbreaking_spaces import NonbreakingSpaces, NonbreakingSpacesDots
from .question import Question
from .quote import Quote
from .tag import Tag
from .underline import Underline
class FiftyOhmLaTeXRenderer(LaTeXRenderer):
def __init__(self):
def __init__(self, question_renderer=None):
super().__init__(
Dash,
BlockComment,
@@ -20,7 +21,9 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer):
HalfwidthSpaces,
NonbreakingSpaces,
NonbreakingSpacesDots,
Question,
)
self.question_renderer = question_renderer
def render_document(self, token):
self.footnotes.update(token.footnotes)
@@ -86,3 +89,6 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer):
def render_nonbreaking_spaces_dots(self, token):
lookup = {"": "", " ": "~"}
return f"{lookup[token.first]}{token.second}{lookup[token.third]}"
def render_question(self, token):
return self.question_renderer(token.question_number)
+24
View File
@@ -0,0 +1,24 @@
import re
from mistletoe.block_token import BlockToken
class Question(BlockToken):
@staticmethod
def start(line):
# Search for:
# [question:123]
return re.match(r"^\s*\[question:\d+\]", line)
@classmethod
def read(cls, lines):
first_line = next(lines)
question_number = re.match(r"^\s*\[question:(\d+)\]", first_line).group(1)
return question_number
@classmethod
def check_interrupts_paragraph(cls, lines):
return cls.start(lines.peek())
def __init__(self, match):
self.question_number = match