2021-07-12 02:44:46 +00:00
|
|
|
--[[
|
|
|
|
Converts Link AST nodes with empty label to DocBook xref elements.
|
|
|
|
|
|
|
|
This is a temporary script to be able use cross-references conveniently
|
|
|
|
using syntax taken from MyST, while we still use docbook-xsl
|
|
|
|
for generating the documentation.
|
|
|
|
|
|
|
|
Reference: https://myst-parser.readthedocs.io/en/latest/using/syntax.html#targets-and-cross-referencing
|
|
|
|
]]
|
|
|
|
|
2021-06-06 11:17:54 +00:00
|
|
|
local function starts_with(start, str)
|
|
|
|
return str:sub(1, #start) == start
|
|
|
|
end
|
|
|
|
|
|
|
|
local function escape_xml_arg(arg)
|
|
|
|
amps = arg:gsub('&', '&')
|
|
|
|
amps_quotes = amps:gsub('"', '"')
|
|
|
|
amps_quotes_lt = amps_quotes:gsub('<', '<')
|
|
|
|
|
|
|
|
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
|