diff --git a/renderer/fifty_ohm_html_renderer.py b/renderer/fifty_ohm_html_renderer.py index c73a511..2e316bd 100644 --- a/renderer/fifty_ohm_html_renderer.py +++ b/renderer/fifty_ohm_html_renderer.py @@ -6,6 +6,7 @@ from .dash import Dash from .formula import Formula from .halfwidth_spaces import HalfwidthSpaces from .include import Include +from .index import Index from .morse import Morse from .nonbreaking_spaces import NonbreakingSpaces, NonbreakingSpacesDots from .photo import Photo @@ -64,6 +65,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): Qso, Include, Formula, + Index, *extras, **kwargs, ) @@ -332,3 +334,7 @@ class FiftyOhmHtmlRenderer(HtmlRenderer): def render_formula(self, token): return f"\n$${token.formula}$$\n" + + def render_index(self, token): + # For HTML just ignore the index + return "" diff --git a/renderer/fifty_ohm_latex_renderer.py b/renderer/fifty_ohm_latex_renderer.py index 508983e..86989ca 100644 --- a/renderer/fifty_ohm_latex_renderer.py +++ b/renderer/fifty_ohm_latex_renderer.py @@ -3,6 +3,7 @@ from mistletoe.latex_renderer import LaTeXRenderer from .comment import BlockComment from .dash import Dash from .halfwidth_spaces import HalfwidthSpaces +from .index import Index from .nonbreaking_spaces import NonbreakingSpaces, NonbreakingSpacesDots from .photo import Photo from .picture import Picture @@ -32,6 +33,7 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer): TableRow, TableHeader, TableCell, + Index, ) self.question_renderer = question_renderer @@ -148,3 +150,9 @@ class FiftyOhmLaTeXRenderer(LaTeXRenderer): def render_table_cell(self, token: TableCell): return self.render_inner(token) + + def render_index(self, token): + if token.second: + return f"\\index{{{token.first}!{token.second}}}" + else: + return f"\\index{{{token.first}}}" diff --git a/renderer/index.py b/renderer/index.py new file mode 100644 index 0000000..606dc55 --- /dev/null +++ b/renderer/index.py @@ -0,0 +1,16 @@ +import re + +from mistletoe.span_token import SpanToken + + +class Index(SpanToken): + """ + Resolve index commands + Identifies "[index:term:subterm]" or "[index:term]" + """ + + pattern = re.compile(r"[ \t]*\[index:([^:\]\s](?:[^:\]\s]| )*)(?::([^:\]\s](?:[^:\]\s]| )*))?\]") + + def __init__(self, match_object): + self.first = match_object.group(1) + self.second = match_object.group(2) diff --git a/test/test_index.py b/test/test_index.py new file mode 100644 index 0000000..2c2e74b --- /dev/null +++ b/test/test_index.py @@ -0,0 +1,34 @@ +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 + + +@pytest.mark.html +def test_index_html(): + assertions = { + "Im Betrieb werden Yagi-Antennen [index:Antenne:Yagi-Antenne] oft gedreht": "Im Betrieb werden Yagi-Antennen oft gedreht", # noqa: E501 + "Im Betrieb werden Yagi-Antennen[index:Antenne:Yagi-Antenne] oft gedreht": "Im Betrieb werden Yagi-Antennen oft gedreht", # noqa: E501 + "Im Betrieb werden Yagi-Antennen [index:Antenne] oft gedreht": "Im Betrieb werden Yagi-Antennen oft gedreht", + "Im Betrieb werden Yagi-Antennen[index:Antenne] oft gedreht": "Im Betrieb werden Yagi-Antennen oft gedreht", + "Im Betrieb werden Yagi-Antennen[index:Test Antenne] oft gedreht": "Im Betrieb werden Yagi-Antennen oft gedreht", # noqa: E501 + } + + for key, value in assertions.items(): + assert mistletoe.markdown(key, FiftyOhmHtmlRenderer) == paragraph(value) + + +@pytest.mark.latex +def test_index_latex(): + assertions = { + "Im Betrieb werden Yagi-Antennen [index:Antenne:Yagi-Antenne] oft gedreht": "Im Betrieb werden Yagi-Antennen\\index{Antenne!Yagi-Antenne} oft gedreht", # noqa: E501 + "Im Betrieb werden Yagi-Antennen[index:Antenne:Yagi-Antenne] oft gedreht": "Im Betrieb werden Yagi-Antennen\\index{Antenne!Yagi-Antenne} oft gedreht", # noqa: E501 + "Im Betrieb werden Yagi-Antennen [index:Antenne] oft gedreht": "Im Betrieb werden Yagi-Antennen\\index{Antenne} oft gedreht", # noqa: E501 + "Im Betrieb werden Yagi-Antennen[index:Antenne] oft gedreht": "Im Betrieb werden Yagi-Antennen\\index{Antenne} oft gedreht", # noqa: E501 + "Im Betrieb werden Yagi-Antennen [index:Test Antenne] oft gedreht": "Im Betrieb werden Yagi-Antennen\\index{Test Antenne} oft gedreht", # noqa: E501 + } + + for key, value in assertions.items(): + assert mistletoe.markdown(key, FiftyOhmLaTeXRenderer) == "\n" + value + "\n"