fix: wiki links now display clean page title instead of raw path
Some checks failed
Deploy Docs / deploy (push) Failing after 23s
Some checks failed
Deploy Docs / deploy (push) Failing after 23s
[[docs/contributing/index]] → displays as 'Contributing' (not 'docs/contributing/index') [[docs/strategies/collective-awakening]] → displays as 'Collective Awakening' Pipe syntax still overrides: [[page|custom text]] uses the custom text. Images keep raw filename as alt text.
This commit is contained in:
parent
a1db08f32e
commit
aac22735e4
1 changed files with 32 additions and 1 deletions
|
|
@ -93,6 +93,37 @@ def _url_from_link(link: str) -> str:
|
||||||
return "/" + "/".join(parts) + "/"
|
return "/" + "/".join(parts) + "/"
|
||||||
|
|
||||||
|
|
||||||
|
def _display_name(link: str) -> str:
|
||||||
|
"""Derive a human-readable title from a wiki link path.
|
||||||
|
|
||||||
|
``[[docs/contributing/index]]`` → ``Contributing``
|
||||||
|
``[[docs/strategies/collective-awakening]]`` → ``Collective Awakening``
|
||||||
|
``[[Contributing]]`` → ``Contributing``
|
||||||
|
"""
|
||||||
|
raw = link.strip()
|
||||||
|
|
||||||
|
# Strip .md extension
|
||||||
|
raw = re.sub(r"\.md$", "", raw, flags=re.IGNORECASE)
|
||||||
|
|
||||||
|
# Strip docs/ prefix
|
||||||
|
if raw.lower().startswith(_DOCS_PREFIX):
|
||||||
|
raw = raw[len(_DOCS_PREFIX) :]
|
||||||
|
|
||||||
|
parts = [p for p in raw.split("/") if p]
|
||||||
|
if not parts:
|
||||||
|
return link
|
||||||
|
|
||||||
|
# If the last component is "index", use the parent directory name
|
||||||
|
if parts[-1].lower() == "index":
|
||||||
|
name = parts[-2] if len(parts) >= 2 else parts[-1]
|
||||||
|
else:
|
||||||
|
name = parts[-1]
|
||||||
|
|
||||||
|
# Replace hyphens/underscores with spaces, title-case
|
||||||
|
name = name.replace("-", " ").replace("_", " ")
|
||||||
|
return name.title()
|
||||||
|
|
||||||
|
|
||||||
class WikilinksPreprocessor(Preprocessor):
|
class WikilinksPreprocessor(Preprocessor):
|
||||||
"""Preprocessor that converts [[wikilinks]] to root-relative [text](/url/)."""
|
"""Preprocessor that converts [[wikilinks]] to root-relative [text](/url/)."""
|
||||||
|
|
||||||
|
|
@ -121,7 +152,7 @@ class WikilinksPreprocessor(Preprocessor):
|
||||||
is_image = groups.get("image") or ""
|
is_image = groups.get("image") or ""
|
||||||
link = groups.get("link") or ""
|
link = groups.get("link") or ""
|
||||||
anchor = groups.get("anchor") or ""
|
anchor = groups.get("anchor") or ""
|
||||||
text = groups.get("text") or link or anchor
|
text = groups.get("text") or (link if is_image else _display_name(link)) or anchor
|
||||||
|
|
||||||
if not (link or text or anchor):
|
if not (link or text or anchor):
|
||||||
return match.group(0)
|
return match.group(0)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue