summary refs log tree commit diff
path: root/doc/labelless-link-is-xref.lua
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2021-06-06 13:17:54 +0200
committerJan Tojnar <jtojnar@gmail.com>2021-06-07 06:34:59 +0200
commit3c78ad2561a831dcbe6e193465f787019638d56b (patch)
treea25b53f1a3f821f714bf0f11e1c5ae8939ac1c4e /doc/labelless-link-is-xref.lua
parentadecb00f5a07ce3f5cc97e7ccf5d814f70f6704f (diff)
downloadnixpkgs-3c78ad2561a831dcbe6e193465f787019638d56b.tar
nixpkgs-3c78ad2561a831dcbe6e193465f787019638d56b.tar.gz
nixpkgs-3c78ad2561a831dcbe6e193465f787019638d56b.tar.bz2
nixpkgs-3c78ad2561a831dcbe6e193465f787019638d56b.tar.lz
nixpkgs-3c78ad2561a831dcbe6e193465f787019638d56b.tar.xz
nixpkgs-3c78ad2561a831dcbe6e193465f787019638d56b.tar.zst
nixpkgs-3c78ad2561a831dcbe6e193465f787019638d56b.zip
doc: Use markdown syntax for xrefs
Syntax is taken from MyST:

https://myst-parser.readthedocs.io/en/latest/using/syntax.html#targets-and-cross-referencing
Diffstat (limited to 'doc/labelless-link-is-xref.lua')
-rw-r--r--doc/labelless-link-is-xref.lua24
1 files changed, 24 insertions, 0 deletions
diff --git a/doc/labelless-link-is-xref.lua b/doc/labelless-link-is-xref.lua
new file mode 100644
index 00000000000..67569b02091
--- /dev/null
+++ b/doc/labelless-link-is-xref.lua
@@ -0,0 +1,24 @@
+local function starts_with(start, str)
+  return str:sub(1, #start) == start
+end
+
+local function escape_xml_arg(arg)
+  amps = arg:gsub('&', '&amp;')
+  amps_quotes = amps:gsub('"', '&quot;')
+  amps_quotes_lt = amps_quotes:gsub('<', '&lt;')
+
+  return amps_quotes_lt
+end
+
+function Link(elem)
+  has_no_content = #elem.content == 0
+  targets_anchor = starts_with('#', elem.target)
+  has_no_attributes = elem.title == '' and elem.identifier == '' and #elem.classes == 0 and #elem.attributes == 0
+
+  if has_no_content and targets_anchor and has_no_attributes then
+    -- xref expects idref without the pound-sign
+    target_without_hash = elem.target:sub(2, #elem.target)
+
+    return pandoc.RawInline('docbook', '<xref linkend="' .. escape_xml_arg(target_without_hash) .. '" />')
+  end
+end