48 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
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
 |