aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/rst/roles.py
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2018-04-10 20:45:02 +0100
committerGravatar Gareth Coles <[email protected]>2018-04-10 20:45:02 +0100
commit99058c1f1d4dadb37b6189729e2e143590d2ff8b (patch)
treed7b398e67902cab544a9ebdfb7bf2351599fa9a1 /pysite/rst/roles.py
parentpadding should be on the nav, not the container. my bad. (diff)
Wiki page text role
Diffstat (limited to 'pysite/rst/roles.py')
-rw-r--r--pysite/rst/roles.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/pysite/rst/roles.py b/pysite/rst/roles.py
index 414832df..3d0155e0 100644
--- a/pysite/rst/roles.py
+++ b/pysite/rst/roles.py
@@ -81,3 +81,39 @@ def url_for_role(_role: str, rawtext: str, text: str, lineno: int, inliner: Inli
prb = inliner.problematic(text, rawtext, msg)
return [prb], [msg]
+
+
+def page_role(_role: str, rawtext: str, text: str, lineno: int, inliner: Inliner,
+ options: dict = None, _content: dict = None):
+ if options is None:
+ options = {}
+
+ set_classes(options)
+
+ if "/" in text:
+ parts = [escape(x) for x in text.split("/")]
+ else:
+ msg = inliner.reporter.error("Page specification must be in the form <page_slug>/<text>", line=lineno)
+ prb = inliner.problematic(text, rawtext, msg)
+
+ return [prb], [msg]
+
+ if len(parts) != 2:
+ msg = inliner.reporter.error("Page specification must be in the form <page_slug>/<text>", line=lineno)
+ prb = inliner.problematic(text, rawtext, msg)
+
+ return [prb], [msg]
+ else:
+ try:
+ url = url_for("wiki.page", page=parts[0])
+ name = parts[1]
+
+ html = f"""<a href="{url}">{name}</a>"""
+
+ node = nodes.raw(html, html, format="html", **options)
+ return [node], []
+ except Exception as e:
+ msg = inliner.reporter.error(str(e), line=lineno)
+ prb = inliner.problematic(text, rawtext, msg)
+
+ return [prb], [msg]