diff --git a/renderer/document.py b/renderer/document.py
new file mode 100644
index 0000000..615a799
--- /dev/null
+++ b/renderer/document.py
@@ -0,0 +1,10 @@
+import mistletoe
+
+
+class Document(mistletoe.Document):
+ def __init__(self, *args, **kwargs):
+ # references must exist before super().__init__ tokenizes the lines,
+ # since ReferencedToken reads it from _root_node during tokenization.
+ self.references: dict[str, str] = {}
+
+ super().__init__(*args, **kwargs)
diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py
index 8817d14..9e4fad2 100644
--- a/renderer/fifty_ohm_html_renderer.py
+++ b/renderer/fifty_ohm_html_renderer.py
@@ -1,22 +1,22 @@
import re
from jinja2 import Environment, FileSystemLoader
-from mistletoe import Document, HtmlRenderer
+from mistletoe import HtmlRenderer
from .comment import BlockComment
from .dash import Dash
+from .document import Document
from .formula import Formula
from .halfwidth_spaces import HalfwidthSpaces
+from .image import Image
from .include import Include
from .index import Index
from .morse import Morse
from .nonbreaking_spaces import NonbreakingSpaces, NonbreakingSpacesDots
-from .photo import Photo
-from .picture import Picture
from .qso import Qso
from .question import Question
from .quote import Quote
-from .references import References
+from .reference import Reference
from .table import Table, TableBody, TableCell, TableHeader, TableRow
from .tag import Tag
from .underline import Underline
@@ -28,8 +28,6 @@ table_alignment = {"l": "left", "c": "center", "r": "right"}
class FiftyOhmHtmlRenderer(HtmlRenderer):
margin_anchor_id = 0
margin_id = 0
- section_url = "section.html"
- ref_id = 0
def __init__(
self,
@@ -55,10 +53,9 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
HalfwidthSpaces,
NonbreakingSpaces,
NonbreakingSpacesDots,
- References,
+ Reference,
Question,
- Picture,
- Photo,
+ Image,
Table,
TableHeader,
TableRow,
@@ -83,18 +80,22 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
self.section = section
# Set section URL if provided, otherwise use default
- if section_url is not None:
- self.section_url = section_url
+ self.section_url = section_url if section_url is not None else "section.html"
- # Figure map: stores ref -> hierarchical number mapping
- self.figure_map = {}
-
- # Single unified counter for all figure types (pictures, photos, tables)
- self.figure_counter = 0
+ self.references: dict[str, str] = {}
# Keep track of index ids already emitted in this document.
self.index_anchor_ids = set()
+ def _format_reference_label(self, marker: str):
+ if marker in self.references:
+ label = self.references[marker]
+ if self.edition and self.chapter and self.section:
+ label = f"{self.edition}-{self.chapter}.{self.section}.{label}"
+ return label
+ else:
+ return None
+
def render_dash(self, token):
return " – "
@@ -209,53 +210,18 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
lookup = {"": "", " ": " "}
return f"{lookup[token.first]}{token.second}{lookup[token.third]}"
- def collect_figures(self, document):
- """First pass: collect all figures and assign hierarchical numbers."""
- self.figure_counter = 0
- self.figure_map = {}
-
- self._collect_figures_recursive(document)
-
- def _collect_figures_recursive(self, token):
- """Recursively traverse the document tree to collect figures."""
- if hasattr(token, "children") and token.children is not None:
- for child in token.children:
- # Check if this is a Picture, Photo, or Table token
- if isinstance(child, Picture | Photo | Table):
- # Get the reference ID (ref for Picture/Photo, name for Table)
- ref_id = getattr(child, "ref", None) or getattr(child, "name", None)
-
- if ref_id: # Only number figures with a reference ID
- self.figure_counter += 1
- hierarchical_num = self._format_figure_number(self.figure_counter)
- self.figure_map[ref_id] = hierarchical_num
- child.number = hierarchical_num
- else:
- child.number = ""
-
- # Recurse into children
- self._collect_figures_recursive(child)
-
- def _format_figure_number(self, counter):
- """Format the hierarchical figure number based on context."""
- if self.edition and self.chapter and self.section:
- return f"{self.edition}-{self.chapter}.{self.section}.{counter}"
- else:
- # Fallback for tests or when context is not provided
- return str(counter)
-
- def render_references(self, token):
+ def render_reference(self, token: Reference):
# Look up the figure number from the map
- figure_num = self.figure_map.get(token.first, "?")
+ label = self._format_reference_label(token.marker) or "?"
return (
- f'{figure_num}"
+ f'{label}'
)
def render_question(self, token):
return self.question_renderer(token.question_number)
def render_document(self, token: Document) -> str:
+ self.references.update(token.references)
self.footnotes.update(token.footnotes)
inner = self.render_inner(token, "\n")
return f"{inner}\n" if inner else ""
@@ -264,36 +230,38 @@ class FiftyOhmHtmlRenderer(HtmlRenderer):
# Filter out None values, so block tokens can return None to not be rendered.
return base.join(filter(lambda x: x is not None, [self.render(child) for child in token.children]))
- @staticmethod
- def render_picture_helper(id, ref, text, number, alt_text):
- return f"""
-
-
\n'
+ f"
-
Der DARC e. V. unterstützt Dich auf deinem Weg zum Amateurfunkzeugnis und ist die größte Interessensvertretung der Funkamateure in Deutschland.
@@ -121,9 +121,9 @@In Zusammenarbeit mit DL2YMR ist ein Videokurs für die Klasse N entstanden, der auf seinem YouTube-Kanal abrufbar ist. Weiterhin gibt es noch Vorlesungen für N+E sowie A.
Die Lernhinhalte für die Klasse N gibt es auch als gedrucktes Buch. Es ist passend zum Online-Kurs ausgelegt.
Einige unserer Ortsverbände bieten Präsenz- oder Onlinekurse mit erfahrenen Ausbildern an. Finde heraus, ob es einen für dich passenden Kurs bei dir in der Nähe gibt!
Unsere Ausbildungspaten sind erfahrene Funkamateure, die dich gerne unterstützen. Sie können mit dir auch praktisch üben und nützliche Tipps für die Praxis geben.
Den Fragenkatalog mit den amtlichen Prüfungsfragen gibt es digital bei der Bundesnetzagentur. Beim DARC-Verlag kann man auch eine gedruckte Version bestellen.
Zum Trainieren der Fragen gibt es die 50Ohm App. Sie ist passend zum Online-Kurs ausgelegt.
Lorem Ipsum
\n\n" + r"$$a \cdot b$$" + "\n\n", } - with FiftyOhmHtmlRenderer() as renderer: - for assertion in assertions: - assert renderer.render(Document(assertion)) == assertions[assertion] + for assertion in assertions: + assert render_html(assertion) == assertions[assertion] diff --git a/test/test_halfwidth_spaces.py b/test/test_halfwidth_spaces.py index b2e29c7..75453dc 100644 --- a/test/test_halfwidth_spaces.py +++ b/test/test_halfwidth_spaces.py @@ -1,9 +1,8 @@ import mistletoe import pytest -from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer from renderer.fifty_ohm_latex_renderer import FiftyOhmLaTeXRenderer -from test.util import paragraph +from test.util import paragraph, render_html @pytest.mark.html @@ -11,7 +10,7 @@ def test_halfwidth_space_html(): input = "Dies ist z.B. ein Test. D.h. hier sollten d.h. Spaces ersetzt worden sein." target = "Dies ist z. B. ein Test. D. h. hier sollten d. h. Spaces ersetzt worden sein." - assert mistletoe.markdown(input, FiftyOhmHtmlRenderer) == paragraph(target) + assert render_html(input) == paragraph(target) @pytest.mark.latex diff --git a/test/test_hierarchical_numbering.py b/test/test_hierarchical_numbering.py index 2974182..08a0376 100644 --- a/test/test_hierarchical_numbering.py +++ b/test/test_hierarchical_numbering.py @@ -1,13 +1,13 @@ -import mistletoe import pytest +from renderer.document import Document from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer from renderer.fifty_ohm_html_slide_renderer import FiftyOhmHtmlSlideRenderer @pytest.mark.html def test_hierarchical_picture_numbering(): - """Test that pictures get hierarchical numbers in format edition-chapter.section.counter""" + """Pictures get hierarchical numbers in format edition-chapter.section.counter""" markdown_text = """ [picture:123:pic1:First picture] @@ -20,30 +20,26 @@ Reference to second: [ref:pic2] """ renderer = FiftyOhmHtmlRenderer(edition="E", chapter="2", section="3") - doc = mistletoe.Document(markdown_text) + doc = Document(markdown_text) - # First pass: collect figures - renderer.collect_figures(doc) + # Counter is assigned in document order during parsing. + assert doc.references["pic1"] == "1" + assert doc.references["pic2"] == "2" - # Verify figure map - assert renderer.figure_map["pic1"] == "E-2.3.1" - assert renderer.figure_map["pic2"] == "E-2.3.2" - - # Second pass: render result = renderer.render(doc) - # Verify hierarchical numbers in output + # Hierarchical numbers in the figure captions. assert "Abbildung E-2.3.1:" in result assert "Abbildung E-2.3.2:" in result - # Verify references are resolved + # References are resolved to the same numbers. assert ">E-2.3.1" in result assert ">E-2.3.2" in result @pytest.mark.html def test_hierarchical_photo_numbering(): - """Test that photos get hierarchical numbers""" + """Photos get hierarchical numbers from the shared counter""" markdown_text = """ [photo:789:photo1:First photo] @@ -53,12 +49,10 @@ Reference: [ref:photo1] """ renderer = FiftyOhmHtmlRenderer(edition="N", chapter="1", section="2") - doc = mistletoe.Document(markdown_text) + doc = Document(markdown_text) - renderer.collect_figures(doc) - - assert renderer.figure_map["photo1"] == "N-1.2.1" - assert renderer.figure_map["photo2"] == "N-1.2.2" + assert doc.references["photo1"] == "1" + assert doc.references["photo2"] == "2" result = renderer.render(doc) @@ -69,7 +63,7 @@ Reference: [ref:photo1] @pytest.mark.html def test_hierarchical_table_numbering(): - """Test that tables with names get hierarchical numbers""" + """Tables with names get hierarchical numbers from the shared counter""" markdown_text = """ | Header 1 | Header 2 | | Data 1 | Data 2 | @@ -83,12 +77,10 @@ Reference: [ref:table1] """ renderer = FiftyOhmHtmlRenderer(edition="A", chapter="3", section="1") - doc = mistletoe.Document(markdown_text) + doc = Document(markdown_text) - renderer.collect_figures(doc) - - assert renderer.figure_map["table1"] == "A-3.1.1" - assert renderer.figure_map["table2"] == "A-3.1.2" + assert doc.references["table1"] == "1" + assert doc.references["table2"] == "2" result = renderer.render(doc) @@ -99,7 +91,7 @@ Reference: [ref:table1] @pytest.mark.html def test_mixed_figure_types_share_counter(): - """Test that pictures, photos, and tables share a single unified counter""" + """Pictures, photos, and tables share a single unified counter in document order""" markdown_text = """ [picture:1:pic1:Picture one] @@ -115,19 +107,16 @@ References: [ref:pic1], [ref:photo1], [ref:tab1], [ref:pic2] """ renderer = FiftyOhmHtmlRenderer(edition="E", chapter="5", section="2") - doc = mistletoe.Document(markdown_text) + doc = Document(markdown_text) - renderer.collect_figures(doc) - - # All types share the same counter - assert renderer.figure_map["pic1"] == "E-5.2.1" - assert renderer.figure_map["photo1"] == "E-5.2.2" - assert renderer.figure_map["tab1"] == "E-5.2.3" - assert renderer.figure_map["pic2"] == "E-5.2.4" + # All types share the same counter, assigned in document order. + assert doc.references["pic1"] == "1" + assert doc.references["photo1"] == "2" + assert doc.references["tab1"] == "3" + assert doc.references["pic2"] == "4" result = renderer.render(doc) - # Verify all references are resolved with correct numbers assert "Abbildung E-5.2.1:" in result # pic1 assert "Abbildung E-5.2.2:" in result # photo1 assert "Tabelle E-5.2.3:" in result # tab1 @@ -136,7 +125,7 @@ References: [ref:pic1], [ref:photo1], [ref:tab1], [ref:pic2] @pytest.mark.slide def test_slide_renderer_adds_s_suffix(): - """Test that slide renderer adds 'S' suffix to edition""" + """The slide renderer adds an 'S' suffix to the edition""" markdown_text = """ [picture:1:pic1:Slide picture] @@ -144,17 +133,11 @@ Reference: [ref:pic1] """ renderer = FiftyOhmHtmlSlideRenderer(edition="E", chapter="2", section="1") - doc = mistletoe.Document(markdown_text) - # Verify edition has S suffix + # Edition gains the S suffix. assert renderer.edition == "ES" - renderer.collect_figures(doc) - - # Verify hierarchical number includes S - assert renderer.figure_map["pic1"] == "ES-2.1.1" - - result = renderer.render(doc) + result = renderer.render(Document(markdown_text)) assert "Abbildung ES-2.1.1:" in result assert ">ES-2.1.1" in result @@ -162,49 +145,38 @@ Reference: [ref:pic1] @pytest.mark.html def test_fallback_numbering_without_context(): - """Test that numbering falls back to simple counter when context is missing""" + """Numbering falls back to a simple counter when context is missing""" markdown_text = """ [picture:1:pic1:Picture] Reference: [ref:pic1] """ - # No edition/chapter/section provided + # No edition/chapter/section provided. renderer = FiftyOhmHtmlRenderer() - doc = mistletoe.Document(markdown_text) - - renderer.collect_figures(doc) - - # Should fall back to simple counter - assert renderer.figure_map["pic1"] == "1" - - result = renderer.render(doc) + result = renderer.render(Document(markdown_text)) + # Falls back to the bare counter. assert "Abbildung 1:" in result assert ">1" in result @pytest.mark.html def test_unresolved_reference(): - """Test that references to non-existent figures show '?'""" + """References to non-existent figures show '?'""" markdown_text = """ Reference to non-existent: [ref:nonexistent] """ renderer = FiftyOhmHtmlRenderer(edition="E", chapter="1", section="1") - doc = mistletoe.Document(markdown_text) + result = renderer.render(Document(markdown_text)) - renderer.collect_figures(doc) - - result = renderer.render(doc) - - # Should show ? for unresolved reference assert ">?" in result @pytest.mark.html def test_table_without_name_not_numbered(): - """Test that tables without names are not numbered""" + """Tables without names are not numbered and do not consume a counter slot""" markdown_text = """ | Header 1 | Header 2 | | Data 1 | Data 2 | @@ -213,10 +185,12 @@ def test_table_without_name_not_numbered(): """ renderer = FiftyOhmHtmlRenderer(edition="E", chapter="1", section="1") - doc = mistletoe.Document(markdown_text) + doc = Document(markdown_text) - renderer.collect_figures(doc) + # Only the picture is registered. + assert doc.references == {"pic1": "1"} - # Only the picture should be numbered - assert renderer.figure_map["pic1"] == "E-1.1.1" - assert renderer.figure_counter == 1 + result = renderer.render(doc) + + assert "Abbildung E-1.1.1:" in result + assert "Tabelle" not in result diff --git a/test/test_html.py b/test/test_html.py index d60a04e..8d5a601 100644 --- a/test/test_html.py +++ b/test/test_html.py @@ -2,9 +2,9 @@ import json import pytest from jinja2 import Environment, FileSystemLoader -from mistletoe import Document import src.config as config +from renderer.document import Document from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer conf = config.Config() diff --git a/test/test_html_slides.py b/test/test_html_slides.py index 27ebbd5..f1729d1 100644 --- a/test/test_html_slides.py +++ b/test/test_html_slides.py @@ -3,9 +3,9 @@ import random import pytest from jinja2 import Environment, FileSystemLoader -from mistletoe import Document import src.config as config +from renderer.document import Document from renderer.fifty_ohm_html_slide_renderer import FiftyOhmHtmlSlideRenderer conf = config.Config() diff --git a/test/test_include.py b/test/test_include.py index 4b024a4..6db910b 100644 --- a/test/test_include.py +++ b/test/test_include.py @@ -1,6 +1,6 @@ import pytest -from mistletoe import Document +from renderer.document import Document from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer diff --git a/test/test_index.py b/test/test_index.py index ec538fd..4984dbf 100644 --- a/test/test_index.py +++ b/test/test_index.py @@ -1,9 +1,8 @@ import mistletoe import pytest -from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer from renderer.fifty_ohm_latex_renderer import FiftyOhmLaTeXRenderer -from test.util import paragraph +from test.util import paragraph, render_html @pytest.mark.html @@ -42,7 +41,7 @@ def test_index_html(): } for key, value in assertions.items(): - assert mistletoe.markdown(key, FiftyOhmHtmlRenderer) == paragraph(value) + assert render_html(key) == paragraph(value) @pytest.mark.latex diff --git a/test/test_morse.py b/test/test_morse.py index 8a80fc2..eb78051 100644 --- a/test/test_morse.py +++ b/test/test_morse.py @@ -1,8 +1,7 @@ -import mistletoe import pytest from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer -from test.util import paragraph +from test.util import paragraph, render_html @pytest.mark.html @@ -17,4 +16,4 @@ def test_morse_html(): } for assertion in assertions: - assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == paragraph(assertions[assertion]) + assert render_html(assertion) == paragraph(assertions[assertion]) diff --git a/test/test_nonbreaking_spaces.py b/test/test_nonbreaking_spaces.py index 68839d8..7a9d7c7 100644 --- a/test/test_nonbreaking_spaces.py +++ b/test/test_nonbreaking_spaces.py @@ -1,9 +1,8 @@ import mistletoe import pytest -from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer from renderer.fifty_ohm_latex_renderer import FiftyOhmLaTeXRenderer -from test.util import paragraph +from test.util import paragraph, render_html @pytest.mark.html @@ -11,7 +10,7 @@ def test_paragraph_html(): input = "Der Test befindet sich unter §2 vielleicht aber auch § 3." target = "Der Test befindet sich unter § 2 vielleicht aber auch § 3." - assert mistletoe.markdown(input, FiftyOhmHtmlRenderer) == paragraph(target) + assert render_html(input) == paragraph(target) @pytest.mark.html @@ -24,7 +23,7 @@ def test_three_points_html(): } for key, value in assertions.items(): - assert mistletoe.markdown(key, FiftyOhmHtmlRenderer) == paragraph(value) + assert render_html(key) == paragraph(value) @pytest.mark.html @@ -32,7 +31,7 @@ def test_absatz_html(): input = "Der Test befindet sich unter Abs.2 vielleicht aber auch Abs. 3." target = "Der Test befindet sich unter Abs. 2 vielleicht aber auch Abs. 3." - assert mistletoe.markdown(input, FiftyOhmHtmlRenderer) == paragraph(target) + assert render_html(input) == paragraph(target) @pytest.mark.html @@ -40,7 +39,7 @@ def test_class_html(): input = "Ich lerne für Klasse A, Klasse E und Klasse N." target = "Ich lerne für Klasse A, Klasse E und Klasse N." - assert mistletoe.markdown(input, FiftyOhmHtmlRenderer) == paragraph(target) + assert render_html(input) == paragraph(target) @pytest.mark.latex diff --git a/test/test_photo.py b/test/test_photo.py index 7e6d27b..5ea3e25 100644 --- a/test/test_photo.py +++ b/test/test_photo.py @@ -1,19 +1,17 @@ -import mistletoe import pytest +from renderer.document import Document from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer from renderer.fifty_ohm_latex_renderer import FiftyOhmLaTeXRenderer -from test.util import paragraph @pytest.mark.html def test_photo_html(): - assertions = { - "[photo:123:abc:Text]": FiftyOhmHtmlRenderer.render_photo_helper("123", "abc", "Text", "TODO", ""), - } + assertions = {"[photo:123:abc:Text]": ("123", "abc", "Text", "A-5.7.1", "")} - for assertion in assertions: - assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == paragraph(assertions[assertion]) + with FiftyOhmHtmlRenderer(edition="A", chapter="5", section="7") as renderer: + for assertion in assertions: + assert renderer.render(Document(assertion)) == renderer.render_photo_helper(*assertions[assertion]) + "\n" @pytest.mark.latex @@ -22,5 +20,6 @@ def test_photo_latex(): "[photo:123:abc:Text]": FiftyOhmLaTeXRenderer.render_photo_helper("123", "abc", "Text", "TODO"), } - for assertion in assertions: - assert mistletoe.markdown(assertion, FiftyOhmLaTeXRenderer) == "\n" + assertions[assertion] + "\n" + with FiftyOhmLaTeXRenderer() as renderer: + for assertion in assertions: + assert renderer.render(Document(assertion)) == assertions[assertion] diff --git a/test/test_picture.py b/test/test_picture.py index d9bb240..0c6d391 100644 --- a/test/test_picture.py +++ b/test/test_picture.py @@ -1,19 +1,17 @@ -import mistletoe import pytest +from renderer.document import Document from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer from renderer.fifty_ohm_latex_renderer import FiftyOhmLaTeXRenderer -from test.util import paragraph @pytest.mark.html def test_picture_html(): - assertions = { - "[picture:0:abc:Text]": FiftyOhmHtmlRenderer.render_picture_helper("0", "abc", "Text", "TODO", ""), - } + assertions = {"[picture:0:abc:Text]": ("0", "abc", "Text", "A-5.7.1", "")} - for assertion in assertions: - assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == paragraph(assertions[assertion]) + with FiftyOhmHtmlRenderer(edition="A", chapter="5", section="7") as renderer: + for assertion in assertions: + assert renderer.render(Document(assertion)) == renderer.render_picture_helper(*assertions[assertion]) + "\n" @pytest.mark.latex @@ -22,5 +20,6 @@ def test_picture_latex(): "[picture:0:abc:Text]": FiftyOhmLaTeXRenderer.render_picture_helper("0", "abc", "Text", "TODO"), } - for assertion in assertions: - assert mistletoe.markdown(assertion, FiftyOhmLaTeXRenderer) == "\n" + assertions[assertion] + "\n" + with FiftyOhmLaTeXRenderer() as renderer: + for assertion in assertions: + assert renderer.render(Document(assertion)) == assertions[assertion] diff --git a/test/test_qso.py b/test/test_qso.py index 50bdfa2..b34ab23 100644 --- a/test/test_qso.py +++ b/test/test_qso.py @@ -1,8 +1,7 @@ -import mistletoe import pytest from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer -from renderer.fifty_ohm_html_slide_renderer import FiftyOhmHtmlSlideRenderer +from test.util import render_html, render_slide @pytest.mark.html @@ -21,7 +20,7 @@ def test_qso_html(): } for assertion in assertions: - assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == assertions[assertion] + assert render_html(assertion) == assertions[assertion] @pytest.mark.slide @@ -31,4 +30,4 @@ def test_qso_slide(): } for assertion in assertions: - assert mistletoe.markdown(assertion, FiftyOhmHtmlSlideRenderer) == assertions[assertion] + assert render_slide(assertion) == assertions[assertion] diff --git a/test/test_question.py b/test/test_question.py index 3b9fdd3..a1f8226 100644 --- a/test/test_question.py +++ b/test/test_question.py @@ -1,8 +1,8 @@ import json import pytest -from mistletoe import Document +from renderer.document import Document from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer from renderer.fifty_ohm_latex_renderer import FiftyOhmLaTeXRenderer from test.util import paragraph diff --git a/test/test_quote.py b/test/test_quote.py index 64ff664..d69bcb2 100644 --- a/test/test_quote.py +++ b/test/test_quote.py @@ -1,9 +1,8 @@ import mistletoe import pytest -from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer from renderer.fifty_ohm_latex_renderer import FiftyOhmLaTeXRenderer -from test.util import paragraph +from test.util import paragraph, render_html @pytest.mark.html @@ -18,7 +17,7 @@ def test_quote_html(): } for assertion in assertions: - assert mistletoe.markdown(assertion, FiftyOhmHtmlRenderer) == paragraph(assertions[assertion]) + assert render_html(assertion) == paragraph(assertions[assertion]) @pytest.mark.latex diff --git a/test/test_references.py b/test/test_references.py index 5011685..8272059 100644 --- a/test/test_references.py +++ b/test/test_references.py @@ -1,8 +1,6 @@ -import mistletoe import pytest -from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer -from test.util import paragraph +from test.util import paragraph, render_html @pytest.mark.html @@ -15,4 +13,4 @@ def test_references_html(): } for key, value in assertions.items(): - assert mistletoe.markdown(key, FiftyOhmHtmlRenderer) == paragraph(value) + assert render_html(key) == paragraph(value) diff --git a/test/test_table.py b/test/test_table.py index bdccb15..6047571 100644 --- a/test/test_table.py +++ b/test/test_table.py @@ -1,6 +1,6 @@ import pytest -from mistletoe import Document +from renderer.document import Document from renderer.fifty_ohm_html_renderer import FiftyOhmHtmlRenderer from renderer.fifty_ohm_latex_renderer import FiftyOhmLaTeXRenderer @@ -15,7 +15,7 @@ def test_table_html(): "| l: a |\n| b |\n| c |": '| a | \n
|---|
| b | \n
| c | \n
| a | \n
|---|
| b | \n
| c | \n
| a | \n
|---|
| b | \n
| a | \n
|---|
| b | \n
| a | \n
|---|
| b | \n
| a | \n
|---|
| a | \n
|---|
| \n\n▄\n\n▄▄▄\n\n | \n
| abc | \nabc | \nabc | \n
|---|---|---|
| 123 | \n456 | \n789 | \n
| 987 | \n654 | \n321 | \n
{text}
\n" + + +def render_html(markdown): + """Render markdown with the HTML renderer through the project's Document.""" + with FiftyOhmHtmlRenderer() as renderer: + return renderer.render(Document(markdown)) + + +def render_slide(markdown): + """Render markdown with the slide renderer through the project's Document.""" + with FiftyOhmHtmlSlideRenderer() as renderer: + return renderer.render(Document(markdown))