summaryrefslogtreecommitdiffstats
path: root/doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua
diff options
context:
space:
mode:
Diffstat (limited to 'doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua')
-rw-r--r--doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua36
1 files changed, 36 insertions, 0 deletions
diff --git a/doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua b/doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua
new file mode 100644
index 000000000000..92dc6895750f
--- /dev/null
+++ b/doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua
@@ -0,0 +1,36 @@
+--[[
+Converts AST for reStructuredText roles into corresponding
+DocBook elements.
+
+Currently, only a subset of roles is supported.
+
+Reference:
+ List of roles:
+ https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html
+ manpage:
+ https://tdg.docbook.org/tdg/5.1/citerefentry.html
+ file:
+ https://tdg.docbook.org/tdg/5.1/filename.html
+]]
+
+function Code(elem)
+ if elem.classes:includes('interpreted-text') then
+ local tag = nil
+ local content = elem.text
+ if elem.attributes['role'] == 'manpage' then
+ tag = 'citerefentry'
+ local title, volnum = content:match('^(.+)%((%w+)%)$')
+ if title == nil then
+ -- No volnum in parentheses.
+ title = content
+ end
+ content = '<refentrytitle>' .. title .. '</refentrytitle>' .. (volnum ~= nil and ('<manvolnum>' .. volnum .. '</manvolnum>') or '')
+ elseif elem.attributes['role'] == 'file' then
+ tag = 'filename'
+ end
+
+ if tag ~= nil then
+ return pandoc.RawInline('docbook', '<' .. tag .. '>' .. content .. '</' .. tag .. '>')
+ end
+ end
+end