require 'asciidoctor' require 'asciidoctor/extensions' require 'asciidoctor/converter/manpage' module Asciidoctor class Converter::ManPageConverter alias orig_convert_inline_anchor convert_inline_anchor def convert_inline_anchor(node) case node.type when :xref return node.text if node.text refid = node.attributes['refid'] 'the section called “%s”' % refid.gsub('_', ' ') when :link return node.target if node.text == node.target doc = node.document footnote = doc.footnotes.find { |e| e.id == node.target } if !footnote footnote_text = "%s\n\e.RS\n\e\\%%%s\n\e.RE" % [node.text, node.target] index = doc.counter('footnote-number') footnote = Document::Footnote.new(index, node.target, footnote_text) doc.register(:footnotes, footnote) end "\e\\fB%s\e\\fR[%d]" % [node.text, footnote.index] else orig_convert_inline_anchor(node) end end end end module Git module Documentation class LinkGitProcessor < Asciidoctor::Extensions::InlineMacroProcessor use_dsl named :chrome def process(parent, target, attrs) prefix = parent.document.attr('git-relative-html-prefix') if parent.document.doctype == 'book' "" \ "#{target}(#{attrs[1]})" elsif parent.document.basebackend? 'html' %(#{target}(#{attrs[1]})) elsif parent.document.basebackend? 'manpage' "\e\\fB%s\e\\fR(%s)" % [target, attrs[1]] elsif parent.document.basebackend? 'docbook' "\n" \ "#{target}" \ "#{attrs[1]}\n" \ "" end end end class DocumentPostProcessor < Asciidoctor::Extensions::Postprocessor def process document, output if document.basebackend? 'docbook' mansource = document.attributes['mansource'] manversion = document.attributes['manversion'] manmanual = document.attributes['manmanual'] new_tags = "" \ "#{mansource}\n" \ "#{manversion}\n" \ "#{manmanual}\n" output = output.sub(/<\/refmeta>/, new_tags + "") end output end end end end Asciidoctor::Extensions.register do # Override attributes for man pages. # https://github.com/asciidoctor/asciidoctor/issues/4059 tree_processor do process do |document| if document.backend == 'manpage' document.attributes.merge!({ 'litdd' => '\--', 'plus' => '+' }) end document end end inline_macro Git::Documentation::LinkGitProcessor, :linkgit postprocessor Git::Documentation::DocumentPostProcessor end