asciidoctor-extensions.rb 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. require 'asciidoctor'
  2. require 'asciidoctor/extensions'
  3. module Git
  4. module Documentation
  5. class LinkGitProcessor < Asciidoctor::Extensions::InlineMacroProcessor
  6. use_dsl
  7. named :chrome
  8. def process(parent, target, attrs)
  9. prefix = parent.document.attr('git-relative-html-prefix')
  10. if parent.document.doctype == 'book'
  11. "<ulink url=\"#{prefix}#{target}.html\">" \
  12. "#{target}(#{attrs[1]})</ulink>"
  13. elsif parent.document.basebackend? 'html'
  14. %(<a href="#{prefix}#{target}.html">#{target}(#{attrs[1]})</a>)
  15. elsif parent.document.basebackend? 'docbook'
  16. "<citerefentry>\n" \
  17. "<refentrytitle>#{target}</refentrytitle>" \
  18. "<manvolnum>#{attrs[1]}</manvolnum>\n" \
  19. "</citerefentry>"
  20. end
  21. end
  22. end
  23. class DocumentPostProcessor < Asciidoctor::Extensions::Postprocessor
  24. def process document, output
  25. if document.basebackend? 'docbook'
  26. mansource = document.attributes['mansource']
  27. manversion = document.attributes['manversion']
  28. manmanual = document.attributes['manmanual']
  29. new_tags = "" \
  30. "<refmiscinfo class=\"source\">#{mansource}</refmiscinfo>\n" \
  31. "<refmiscinfo class=\"version\">#{manversion}</refmiscinfo>\n" \
  32. "<refmiscinfo class=\"manual\">#{manmanual}</refmiscinfo>\n"
  33. output = output.sub(/<\/refmeta>/, new_tags + "</refmeta>")
  34. end
  35. output
  36. end
  37. end
  38. end
  39. end
  40. Asciidoctor::Extensions.register do
  41. inline_macro Git::Documentation::LinkGitProcessor, :linkgit
  42. postprocessor Git::Documentation::DocumentPostProcessor
  43. end