about summary refs log tree commit diff
path: root/nixpkgs/doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua
blob: 5c1b034d0792d8b325660fb374b83b83cccef0ec (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
37
38
39
40
41
42
43
44
--[[
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'
    elseif elem.attributes['role'] == 'command' then
      tag = 'command'
    elseif elem.attributes['role'] == 'option' then
      tag = 'option'
    elseif elem.attributes['role'] == 'var' then
      tag = 'varname'
    elseif elem.attributes['role'] == 'env' then
      tag = 'envar'
    end

    if tag ~= nil then
      return pandoc.RawInline('docbook', '<' .. tag .. '>' .. content .. '</' .. tag .. '>')
    end
  end
end