| require 'asciidoctor' |
| require 'asciidoctor/extensions' |
| |
| 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' |
| "<ulink url=\"#{prefix}#{target}.html\">" \ |
| "#{target}(#{attrs[1]})</ulink>" |
| elsif parent.document.basebackend? 'html' |
| %(<a href="#{prefix}#{target}.html">#{target}(#{attrs[1]})</a>) |
| elsif parent.document.basebackend? 'docbook' |
| "<citerefentry>\n" \ |
| "<refentrytitle>#{target}</refentrytitle>" \ |
| "<manvolnum>#{attrs[1]}</manvolnum>\n" \ |
| "</citerefentry>" |
| 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 = "" \ |
| "<refmiscinfo class=\"source\">#{mansource}</refmiscinfo>\n" \ |
| "<refmiscinfo class=\"version\">#{manversion}</refmiscinfo>\n" \ |
| "<refmiscinfo class=\"manual\">#{manmanual}</refmiscinfo>\n" |
| output = output.sub(/<\/refmeta>/, new_tags + "</refmeta>") |
| end |
| output |
| end |
| end |
| end |
| end |
| |
| Asciidoctor::Extensions.register do |
| inline_macro Git::Documentation::LinkGitProcessor, :linkgit |
| postprocessor Git::Documentation::DocumentPostProcessor |
| end |