Preserve picked patch name when possible
[stgit.git] / Documentation / asciidoctor-extensions.rb
blob4c00f27e9779ae321726853b18dbe38878c3fb0c
1 require 'asciidoctor'
2 require 'asciidoctor/extensions'
4 module StGit
5   module Documentation
6     class LinkGitProcessor < Asciidoctor::Extensions::InlineMacroProcessor
7       use_dsl
9       named :chrome
11       def process(parent, target, attrs)
12         gitscm = 'https://git-scm.com/docs/'
13         if parent.document.doctype == 'book' \
14           or parent.document.doctype == 'article'
15           "<ulink url=\"#{gitscm}#{target}\">" \
16           "#{target}(#{attrs[1]})</ulink>"
17         elsif parent.document.basebackend? 'html'
18           %(<a href="#{gitscm}#{target}">#{target}(#{attrs[1]})</a>)
19         elsif parent.document.basebackend? 'docbook'
20           "<citerefentry>\n" \
21             "<refentrytitle>#{target}</refentrytitle>" \
22             "<manvolnum>#{attrs[1]}</manvolnum>\n" \
23           "</citerefentry>"
24         end
25       end
26     end
28     class LinkManProcessor < Asciidoctor::Extensions::InlineMacroProcessor
29       use_dsl
31       named :chrome
33       def process(parent, target, attrs)
34         if parent.document.doctype == 'book' \
35           or parent.document.doctype == 'article'
36           "<ulink url=\"#{target}.html\">#{target}(#{attrs[1]})</ulink>"
37         elsif parent.document.basebackend? 'html'
38           %(<a href="#{target}.html">#{target}(#{attrs[1]})</a>)
39         elsif parent.document.basebackend? 'docbook'
40           "<citerefentry>\n" \
41             "<refentrytitle>#{target}</refentrytitle>" \
42             "<manvolnum>#{attrs[1]}</manvolnum>\n" \
43           "</citerefentry>"
44         end
45       end
46     end
48     class LinkStgProcessor < Asciidoctor::Extensions::InlineMacroProcessor
49       use_dsl
51       named :chrome
53       def process(parent, target, attrs)
54         if parent.document.doctype == 'book' \
55           or parent.document.doctype == 'article'
56           "<ulink url=\"stg-#{target}.html\">stg #{target}</ulink>"
57         elsif parent.document.basebackend? 'html'
58           %(<a href="stg-#{target}.html">stg #{target}</a>)
59         elsif parent.document.basebackend? 'docbook'
60           "<citerefentry>\n" \
61             "<refentrytitle>stg-#{target}</refentrytitle>" \
62             "<manvolnum>1</manvolnum>\n" \
63           "</citerefentry>"
64         end
65       end
66     end
68     class LinkStgSubProcessor < Asciidoctor::Extensions::InlineMacroProcessor
69       use_dsl
71       named :chrome
73       def process(parent, target, attrs)
74         if parent.document.doctype == 'book' \
75           or parent.document.doctype == 'article'
76           "<ulink url=\"stg-#{target}.html\">#{target}</ulink>"
77         elsif parent.document.basebackend? 'html'
78           %(<a href="stg-#{target}.html">#{target}</a>)
79         elsif parent.document.basebackend? 'docbook'
80           "<citerefentry>\n" \
81             "<refentrytitle>stg-#{target}</refentrytitle>" \
82             "<manvolnum>1</manvolnum>\n" \
83           "</citerefentry>"
84         end
85       end
86     end
88     class DocumentPostProcessor < Asciidoctor::Extensions::Postprocessor
89       def process document, output
90         if document.basebackend? 'docbook'
91           mansource = document.attributes['mansource']
92           manversion = document.attributes['manversion']
93           manmanual = document.attributes['manmanual']
94           new_tags = "" \
95             "<refmiscinfo class=\"source\">#{mansource}</refmiscinfo>\n" \
96             "<refmiscinfo class=\"version\">#{manversion}</refmiscinfo>\n" \
97             "<refmiscinfo class=\"manual\">#{manmanual}</refmiscinfo>\n"
98           output = output.sub(/<\/refmeta>/, new_tags + "</refmeta>")
99         end
100         output
101       end
102     end
103   end
106 Asciidoctor::Extensions.register do
107   inline_macro StGit::Documentation::LinkGitProcessor, :linkgit
108   inline_macro StGit::Documentation::LinkManProcessor, :linkman
109   inline_macro StGit::Documentation::LinkStgProcessor, :linkstg
110   inline_macro StGit::Documentation::LinkStgSubProcessor, :linkstgsub
111   postprocessor StGit::Documentation::DocumentPostProcessor