diff --git a/mdformat_mkdocs/mdit_plugins/__init__.py b/mdformat_mkdocs/mdit_plugins/__init__.py index 6136f85..10b1543 100644 --- a/mdformat_mkdocs/mdit_plugins/__init__.py +++ b/mdformat_mkdocs/mdit_plugins/__init__.py @@ -2,3 +2,4 @@ from ._content_tabs import CONTENT_TAB_MARKERS, content_tabs_plugin from ._mkdocs_admon import MKDOCS_ADMON_MARKERS, mkdocs_admon_plugin +from ._wikilink import wikilink_plugin diff --git a/mdformat_mkdocs/mdit_plugins/_wikilink.py b/mdformat_mkdocs/mdit_plugins/_wikilink.py new file mode 100644 index 0000000..888ef16 --- /dev/null +++ b/mdformat_mkdocs/mdit_plugins/_wikilink.py @@ -0,0 +1,32 @@ +"""Copied from `mdformat-wikilink`. + +https://github.com/tmr232/mdformat-wikilink/blob/d095be227a3cefc18d6fd823d9eb6fdfeaa5c895/src/mdformat_wikilink/mdit_wikilink_plugin.py + +""" + +import re + +from markdown_it import MarkdownIt +from markdown_it.rules_inline import StateInline + +LINK_PATTERN = re.compile(r"\[\[([^[|\]\n])+(\|[^]\n]+)?]]") + + +def _wikilink_inline(state: StateInline, silent: bool) -> bool: + match = LINK_PATTERN.match(state.src[state.pos :]) + if not match: + return False + + if silent: + return True + + token = state.push("wikilink", "", 0) + token.content = match.group() + + state.pos += match.end() + + return True + + +def wikilink_plugin(md: MarkdownIt) -> None: + md.inline.ruler.push("wikilink", _wikilink_inline) diff --git a/mdformat_mkdocs/plugin.py b/mdformat_mkdocs/plugin.py index a6be146..25b99f5 100644 --- a/mdformat_mkdocs/plugin.py +++ b/mdformat_mkdocs/plugin.py @@ -7,12 +7,13 @@ from typing import Mapping from markdown_it import MarkdownIt +from mdformat.renderer import RenderContext, RenderTreeNode from mdformat.renderer.typing import Postprocess, Render from mdformat_admon import RENDERERS as ADMON_RENDERS from ._normalize_list import normalize_list as unbounded_normalize_list from ._postprocess_inline import postprocess_inline -from .mdit_plugins import content_tabs_plugin, mkdocs_admon_plugin +from .mdit_plugins import content_tabs_plugin, mkdocs_admon_plugin, wikilink_plugin _ALIGN_SEMANTIC_BREAKS_IN_LISTS = False """user-specified flag for toggling semantic breaks. @@ -36,6 +37,7 @@ def update_mdit(mdit: MarkdownIt) -> None: """No changes to markdown parsing are necessary.""" mdit.use(mkdocs_admon_plugin) mdit.use(content_tabs_plugin) + mdit.use(wikilink_plugin) global _ALIGN_SEMANTIC_BREAKS_IN_LISTS # noqa: PLW0603 _ALIGN_SEMANTIC_BREAKS_IN_LISTS = mdit.options["mdformat"].get( @@ -44,6 +46,10 @@ def update_mdit(mdit: MarkdownIt) -> None: ) +def _render_wikilink(node: RenderTreeNode, context: RenderContext) -> str: # noqa: ARG001 + return node.content + + # A mapping from `RenderTreeNode.type` to a `Render` function that can # render the given `RenderTreeNode` type. These override the default # `Render` funcs defined in `mdformat.renderer.DEFAULT_RENDERERS`. @@ -52,6 +58,7 @@ def update_mdit(mdit: MarkdownIt) -> None: "admonition_mkdocs_title": ADMON_RENDERS["admonition_title"], "content_tab_mkdocs": ADMON_RENDERS["admonition"], "content_tab_mkdocs_title": ADMON_RENDERS["admonition_title"], + "wikilink": _render_wikilink, }