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"