asciidoctor-foodogsquared-e.../lib/asciidoctor/man-inline-macro/extension.rb

48 lines
1.4 KiB
Ruby

# frozen_string_literal: true
class ManInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
use_dsl
named :man
name_positional_attributes 'volnum'
default_attributes 'service' => 'debian'
def process(parent, target, attrs)
doc = parent.document
text = manname = target
suffix = (volnum = attrs['volnum']) ? %((#{volnum})) : ''
if doc.basebackend? 'html'
domain = case attrs['service']
when 'debian'
'https://manpages.debian.org'
when 'arch'
'https://man.archlinux.org/man'
when 'opensuse'
'https://manpages.opensuse.org'
when 'voidlinux'
'https://man.voidlinux.org'
when 'openbsd'
'https://man.openbsd.org'
when 'none'
nil
else
raise "no available manpage service #{attrs['service']}"
end
if !domain.nil?
target = %(#{domain}/#{manname}.#{volnum})
doc.register :links, target
node = create_anchor parent, text, type: :link, target: target
else
node = create_inline parent, :quoted, manname
end
elsif doc.backend == 'manpage'
node = create_inline parent, :quoted, manname, type: :strong
else
node = create_inline parent, :quoted, manname
end
create_inline parent, :quoted, %(#{node.convert}#{suffix})
end
end