summary refs log tree commit diff
path: root/doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua
blob: 92dc6895750fc1016e223c81e850b16980dcc92f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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