diff --git a/python/tests/unit/extensions/test_macros.py b/python/tests/unit/extensions/test_macros.py index 397c7e8..e9f0220 100644 --- a/python/tests/unit/extensions/test_macros.py +++ b/python/tests/unit/extensions/test_macros.py @@ -296,7 +296,7 @@ def test_load_module_rejects_non_package_like_module_names( ("md", "expected"), [ ({"macros": {"render_by_default": False}}, "
Value: {{ 1 + 1 }}
"), - ({"macros": {"render_by_default": True}}, "Value: 2\n
"), + ({"macros": {"render_by_default": True}}, "Value: 2
"), ], indirect=["md"], ) @@ -318,7 +318,7 @@ def test_preprocessor_respects_render_by_default( indirect=True, ) def test_preprocessor_renders_when_opted_in_by_page_meta(md: Markdown) -> None: - assert md.convert("Value: {{ 1 + 1 }}") == "Value: 2\n
" + assert md.convert("Value: {{ 1 + 1 }}") == "Value: 2
" @pytest.mark.parametrize( @@ -405,3 +405,35 @@ def test_preprocessor_renders_jinja_in_title_meta(md: Markdown) -> None: def test_preprocessor_strict_undefined_raises(md: Markdown) -> None: with pytest.raises(UndefinedError): md.convert("{{ missing_variable }}") + + +@pytest.mark.parametrize( + "md", + [ + { + "macros": { + "render_by_default": True, + "module_name": "main", + }, + "project_config": { + "markdown_extensions": {"pymdownx.superfences": {}} + }, + } + ], + indirect=True, +) +def test_macro_fenced_code_block_processed_by_superfences( + md: Markdown, + tmp_path: Path, +) -> None: + """A macro that outputs a fenced code block is processed by superfences.""" + (tmp_path / "main.py").write_text( + "def define_env(env):\n" + " @env.macro\n" + " def code_snippet(lang, code):\n" + " return f'```{lang}\\n{code}\\n```\\n'\n", + encoding="utf-8", + ) + result = md.convert("{{ code_snippet('python', 'x = 1 + 1') }}") + assert "python" not in result
+ assert "x = 1 + 1" not in result # we expect spans
diff --git a/python/zensical/extensions/macros.py b/python/zensical/extensions/macros.py
index 2006697..481a92c 100644
--- a/python/zensical/extensions/macros.py
+++ b/python/zensical/extensions/macros.py
@@ -374,7 +374,9 @@ class MacrosExtension(Extension):
md.preprocessors.register(
MacrosPreprocessor(md, config=config),
MacrosPreprocessor.name,
- priority=20,
+ # Before pymdownx.superfences'
+ # `fenced_code_block` (25) and `fenced_raw_block` (31.05)
+ priority=35,
)