| 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 |