95140e1985e9ddec232335521ea61cc7772154e0
[metze/wireshark/wip.git] / docbook / asciidoctor-asciidoc.conf
1 # This file is an AsciiDoc configuration file that makes
2 # AsciiDoc conform with Asciidoctor's fixes and customizations.
3 #
4 # Place this file in the same directory as your AsciiDoc document and the
5 # AsciiDoc processor (asciidoc) will automatically use it.
6
7 # Copied from from https://raw.githubusercontent.com/asciidoctor/asciidoctor/master/compat/asciidoc.conf
8 # AsciiDoctor is available under the MIT license.
9
10 [miscellaneous]
11 newline=\n
12
13 [attributes]
14 # make html5 the default html backend
15 backend-alias-html=html5
16 apostrophe='
17 asterisk=*
18 backtick=`
19 brvbar=¦
20 caret=^
21 # plus introduced in AsciiDoc 8.6.9
22 plus=+
23 space=" "
24 tilde=~
25 user-home={eval:os.path.expanduser('~')}
26 vbar=|
27 # NOTE use -a no-inline-literal to set compat-mode to default when using AsciiDoc Python
28 ifndef::no-inline-literal[]
29 compat-mode=legacy
30 endif::[]
31
32 [replacements]
33 # right single quote
34 (?<!\\)`'=&#8217;
35 # escaped right single quote
36 \\`'=`'
37
38 # Disabled for now.
39 # Appears to be incompatible with Cygwin's version of AsciiDoc (8.6.3)
40 #[quotes]
41 ## disable single quotes as constrained formatting marks for emphasis
42 ## this change can also be made in the document using the attribute entry :quotes.':
43 #ifdef::compat-mode[]
44 #'=
45 #+=
46 #++=
47 #`=
48 #``=#monospaced
49 #`|`=monospaced
50 #\##=#mark
51 #\#=mark
52 #endif::[]
53
54 # enables markdown-style headings
55 [titles]
56 sect0=^(=|#) +(?P<title>[\S].*?)(?: +\1)?$
57 sect1=^(==|##) +(?P<title>[\S].*?)(?: +\1)?$
58 sect2=^(===|###) +(?P<title>[\S].*?)(?: +\1)?$
59 sect3=^(====|####) +(?P<title>[\S].*?)(?: +\1)?$
60 sect4=^(=====|#####) +(?P<title>[\S].*?)(?: +\1)?$
61 sect5=^(======|######) +(?P<title>[\S].*?)(?: +\1)?$
62
63 # Disable subs on pass block by default
64 [blockdef-pass]
65 subs=none
66
67 # enables fenced code blocks
68 # FIXME I haven't sorted out yet how to do syntax highlighting
69 [blockdef-fenced-code]
70 delimiter=^```(?:\w+(?:,numbered)?)?$
71 ifdef::language[]
72 style=source
73 template::[source-filter-style]
74 endif::language[]
75 ifndef::language[]
76 template=listingblock
77 subs=verbatim
78 posattrs=style
79 endif::language[]
80
81 # enables blockquotes to be defined using two double quotes
82 [blockdef-air-quote]
83 template::[blockdef-quote]
84 delimiter=^""$
85
86 # markdown-style blockquote (paragraph only)
87 # FIXME does not strip leading > on subsequent lines
88 [paradef-markdown-quote]
89 delimiter=(?s)>\s*(?P<text>\S.*)
90 style=quote
91 quote-style=template="quoteparagraph",posattrs=("style","attribution","citetitle")
92
93 # fix regex for callout list to require number; also makes markdown-style blockquote work
94 [listdef-callout]
95 posattrs=style
96 delimiter=^<?(?P<index>\d+>) +(?P<text>.+)$
97 type=callout
98 tags=callout
99 style=arabic
100
101 # enables literal block to be used as source block
102 [blockdef-literal]
103 template::[source-filter-style]
104
105 # enables source block when source-highlighter is not defined
106 ifndef::source-highlighter[]
107 [source-filter-style]
108 source-style=template="listingblock",subs=("specialcharacters","callouts"),posattrs=("style","language","src_numbered","src_tab")
109
110 [paradef-default]
111 template::[source-filter-style]
112
113 [paradef-literal]
114 template::[source-filter-style]
115
116 [blockdef-open]
117 template::[source-filter-style]
118
119 [blockdef-listing]
120 template::[source-filter-style]
121 endif::source-highlighter[]
122
123 [tabledef-csv]
124 template::[tabledef-default]
125 delimiter=^,={3,}$
126 format=csv
127
128 [tabledef-dsv]
129 template::[tabledef-default]
130 delimiter=^:={3,}$
131 format=dsv
132
133 [macros]
134 ifdef::no-inline-literal[]
135 (?su)\\?\+\+(?P<passtext>.*?)\+\+=pass[specialcharacters]
136 (?su)(?<![+\w])(\\?\+(?P<passtext>\S|\S.*?\S)\+)(?![+\w])=pass[specialcharacters]
137 endif::no-inline-literal[]
138
139 # additional callout match behind line comments
140 #(?://|#|;;) ?\((?P<index>\d+)\)=callout
141 # additional callout match for XML
142 [\\]?&lt;!--(?P<index>\d+)--&gt;=callout
143
144 # --- or *** or ___ or - - - or * * * or _ _ _ (in addition to the built-in ''')
145 ^ {0,3}([-\*_])( *)\1\2\1$=#ruler
146
147 # btn:[Save]
148 (?su)(?<!\w)\\?btn:\[(?P<attrlist>(?:\\\]|[^\]])+?)\]=button
149
150 # kbd:[F11] or kbd:[Ctrl+T] or kbd:[Ctrl,T]
151 (?su)(?<!\w)\\?kbd:\[(?P<attrlist>(?:\\\]|[^\]])+?)\]=keyboard
152
153 # menu:Search[] or menu:File[New...] or menu:View[Page Style, No Style]
154 # TODO implement menu:View[Page Style > No Style] syntax
155 (?su)(?<!\w)[\\]?(?P<name>menu):(?P<target>\w|\w.*?\S)?\[(?P<attrlist>.*?)\]=
156
157 ifdef::basebackend-html[]
158
159 [sect5]
160 <div class="sect5{style? {style}}{role? {role}}">
161 <h6{id? id="{id}"}>{title}</h6>
162 |
163 </div>
164
165 [button-inlinemacro]
166 <b class="button">{1}</b>
167
168 [keyboard-inlinemacro]
169 {set2:keys:{eval:re.split(r'(?<!\+ |.\+)\+', '{1}')}}
170 {2%}{eval:len({keys}) == 1}<kbd>{1}</kbd>
171 {2%}{eval:len({keys}) == 2}<kbd class="combo"><kbd>{eval:{keys}[0].strip()}</kbd>+<kbd>{eval:{keys}[1].strip()}</kbd></kbd>
172 {2%}{eval:len({keys}) == 3}<kbd class="combo"><kbd>{eval:{keys}[0].strip()}</kbd>+<kbd>{eval:{keys}[1].strip()}</kbd>+<kbd>{eval:{keys}[2].strip()}</kbd></kbd>
173 {2#}{3%}<kbd class="combo"><kbd>{1}</kbd>+<kbd>{2}</kbd></kbd>
174 {3#}<kbd class="combo"><kbd>{1}</kbd>+<kbd>{2}</kbd>+<kbd>{3}</kbd></kbd>
175
176 [menu-inlinemacro]
177 {1%}<span class="menu">{target}</span>
178 {1#}{2%}<span class="menuseq"><span class="menu">{target}</span>&#160;&#9656; <span class="menuitem">{1}</span></span>
179 {2#}{3%}<span class="menuseq"><span class="menu">{target}</span>&#160;&#9656; <span class="submenu">{1}</span>&#160;&#9656; <span class="menuitem">{2}</span></span>
180 {3#}<span class="menuseq"><span class="menu">{target}</span>&#160;&#9656; <span class="submenu">{1}</span>&#160;&#9656; <span class="submenu">{2}</span>&#160;&#9656; <span class="menuitem">{3}</span></span>
181
182 [literal-inlinemacro]
183 <code>{passtext}</code>
184
185 [tags]
186 emphasis=<em{1? class="{1}"}>|</em>
187 strong=<strong{1? class="{1}"}>|</strong>
188 monospaced=<code{1? class="{1}"}>|</code>
189 superscript=<sup{1? class="{1}"}>|</sup>
190 subscript=<sub{1? class="{1}"}>|</sub>
191 mark={1=<mark>}{1?<span class="{1}">}|{1?</span>}{1=</mark>}
192
193 [monospacedwords]
194 <code>{words}</code>
195
196 ifdef::linkattrs[]
197 [http-inlinemacro]
198 <a href="{name}:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
199 [https-inlinemacro]
200 <a href="{name}:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
201 [ftp-inlinemacro]
202 <a href="{name}:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
203 [file-inlinemacro]
204 <a href="{name}:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
205 [irc-inlinemacro]
206 <a href="{name}:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={name}:{target}}</a>
207 [mailto-inlinemacro]
208 <a href="mailto:{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={target}}</a>
209 [link-inlinemacro]
210 <a href="{target}"{id? id="{id}"}{role? class="{role}"}{window? target="{window}"}>{1={target}}</a>
211 endif::linkattrs[]
212
213 [listtags-numbered]
214 list=<div class="olist{style? {style}}{compact-option? compact}{role? {role}}"{id? id="{id}"}>{title?<div class="title">{title}</div>}<ol class="{style}"{style@loweralpha: type="a"}{style@lowerroman: type="i"}{style@upperalpha: type="A"}{style@upperroman: type="I"}{start? start="{start}"}>|</ol></div>
215
216 [tabletags-monospaced]
217 paragraph=<p class="tableblock"><code>|</code></p>
218
219 [sect0]
220 <h1{id? id="{id}"} class="sect0">{title}</h1>
221 |
222
223 # support for document title in embedded documents
224 ifeval::[not config.header_footer]
225 [preamble]
226 <h1>{title={doctitle}}</h1>{set:title-rendered:}
227 <div id="preamble">
228 <div class="sectionbody">
229 |
230 </div>
231 {toc,toc2#}{toc-placement$preamble:}{template:toc}
232 </div>
233
234 [sect1]
235 {title-rendered%}<h1>{doctitle}</h1>
236 <div class="sect1{style? {style}}{role? {role}}">
237 <h2{id? id="{id}"}>{numbered?{sectnum} }{title}</h2>
238 <div class="sectionbody">
239 |
240 </div>
241 </div>
242 endif::[]
243
244 # override to add the admonition name to the class attribute of the outer element
245 [admonitionblock]
246 <div class="admonitionblock {name}{role? {role}}{unbreakable-option? unbreakable}"{id? id="{id}"}>
247 <table><tr>
248 <td class="icon">
249 {data-uri%}{icons#}<img src="{icon={iconsdir}/{name}.png}" alt="{caption}">
250 {data-uri#}{icons#}<img alt="{caption}" src="data:image/png;base64,
251 {data-uri#}{icons#}{sys:"{python}" -u -c "import base64,sys; base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{icon={iconsdir}/{name}.png}")}"}">
252 {icons%}<div class="title">{caption}</div>
253 </td>
254 <td class="content">
255 <div class="title">{title}</div>
256 |
257 </td>
258 </tr></table>
259 </div>
260
261 # modified so that:
262 # a. imagesdir is only prepended if target is not a uri or absolute path (relative path only)
263 # b. automatic alt text is calculated from basename of target without extension
264 # note that the escaped_target attribute must be set in order to use a uri in the conditional attribute reference
265 [image-inlinemacro]
266 <span class="image{role? {role}}"{float? style="float: {float}"}>{set2:escaped_target:{eval:'{target}'.replace(':','\:')}}
267 <a class="image" href="{link}">
268 {data-uri%}<img src="{target@^(/|https?\://).*:{escaped_target}:{imagesdir?{imagesdir}}{imagesdir?/}{escaped_target}}" alt="{alt={eval:os.path.splitext(os.path.basename('{target}'))[0]}}"{width? width="{width}"}{height? height="{height}"}{title? title="{title}"}>
269 {data-uri#}<img alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"}{title? title="{title}"}
270 {data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print 'src=\"data:'+mimetypes.guess_type(r'{target}')[0]+';base64,'; base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}">
271 {link#}</a>
272 </span>
273
274 # modified so that:
275 # a. imagesdir is only prepended if target is not a uri or absolute path (relative path only)
276 # b. automatic alt text is calculated from basename of target without extension
277 # note that the escaped_target attribute must be set in order to use a uri in the conditional attribute reference
278 [image-blockmacro]
279 <div class="imageblock{style? {style}}{role? {role}}{unbreakable-option? unbreakable}"{id? id="{id}"}{align? style="text-align:{align};"}{float? style="float: {float}"}>
280 <div class="content">{set2:escaped_target:{eval:'{target}'.replace(':','\:')}}
281 <a class="image" href="{link}">
282 {data-uri%}<img src="{target@^(/|https?\://).*:{escaped_target}:{imagesdir?{imagesdir}}{imagesdir?/}{escaped_target}}" alt="{alt={eval:os.path.splitext(os.path.basename('{target}'))[0]}}"{width? width="{width}"}{height? height="{height}"}>
283 {data-uri#}<img alt="{alt={target}}"{width? width="{width}"}{height? height="{height}"}
284 {data-uri#}{sys:"{python}" -u -c "import mimetypes,base64,sys; print 'src=\"data:'+mimetypes.guess_type(r'{target}')[0]+';base64,'; base64.encode(sys.stdin,sys.stdout)" < "{eval:os.path.join(r"{indir={outdir}}",r"{imagesdir=}",r"{target}")}"}">
285 {link#}</a>
286 </div>
287 <div class="title">{caption={figure-caption} {counter:figure-number}. }{title}</div>
288 </div>
289
290 # a common template for emitting the attribute for a quote or verse block
291 # don't output attribution div if attribution or citetitle are both empty
292 [attribution]
293 {attribution,citetitle#}<div class="attribution">
294 &#8212; {attribution}{citetitle?<br>}
295 <cite>{citetitle}</cite>
296 {attribution,citetitle#}</div>
297
298 # override to use blockquote element for content and cite element for cite title
299 [quoteblock]
300 <div class="quoteblock{role? {role}}{unbreakable-option? unbreakable}"{id? id="{id}"}>
301 <div class="title">{title}</div>
302 <blockquote>
303 |
304 </blockquote>
305 template::[attribution]
306 </div>
307
308 # override to use cite element for cite title
309 [verseblock]
310 <div class="verseblock{role? {role}}{unbreakable-option? unbreakable}"{id? id="{id}"}>
311 <div class="title">{title}</div>
312 <pre class="content">
313 |
314 </pre>
315 template::[attribution]
316 </div>
317
318 # override tabletags to support cellbgcolor
319 [tabletags-default]
320 headdata=<th class="tableblock halign-{halign=left} valign-{valign=top}"{colspan@1:: colspan="{colspan}"}{rowspan@1:: rowspan="{rowspan}"}{cellbgcolor? style="background-color:{cellbgcolor};"}>|</th>
321 bodydata=<td class="tableblock halign-{halign=left} valign-{valign=top}"{colspan@1:: colspan="{colspan}"}{rowspan@1:: rowspan="{rowspan}"}{cellbgcolor? style="background-color:{cellbgcolor};"}>|</td>
322
323 # override header cells to use th
324 [tabletags-header]
325 bodydata=<th class="tableblock halign-{halign=left} valign-{valign=top}" {colspan@1::colspan="{colspan}" }{rowspan@1::rowspan="{rowspan}" }>|</th>
326 paragraph=<p class="tableblock">|</p>
327
328 [toc]
329 <div id="toc">
330 <div id="toctitle">{toc-title}</div>
331 ifdef::toc2[]
332 <script type="text/javascript">
333 document.body.className += ' toc2';
334 document.getElementById('toc').className = 'toc2';
335 </script>
336 endif::toc2[]
337 <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
338 </div>
339
340 endif::basebackend-html[]
341
342 # Override docinfo to support subtitle
343 ifdef::basebackend-docbook[]
344
345 [sect5]
346 <section{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}>
347 <title>{title}</title>
348 |
349 </section>
350
351 [tags]
352 monospaced=<literal{1? role="{1}"}>|</literal>
353 subscript=<subscript{1? role="{1}"}>|</subscript>
354 superscript=<superscript{1? role="{1}"}>|</superscript>
355
356 [button-inlinemacro]
357 <guibutton>{1}</guibutton>
358
359 [keyboard-inlinemacro]
360 {set2:keys:{eval:re.split(r'(?<!\+ |.\+)\+', '{1}')}}
361 {2%}{eval:len({keys}) == 1}<keycap>{1}</keycap>
362 {2%}{eval:len({keys}) == 2}<keycombo><keycap>{eval:{keys}[0].strip()}</keycap><keycap>{eval:{keys}[1].strip()}</keycap></keycombo>
363 {2%}{eval:len({keys}) == 3}<keycombo><keycap>{eval:{keys}[0].strip()}</keycap><keycap>{eval:{keys}[1].strip()}</keycap><keycap>{eval:{keys}[2].strip()}</keycap></keycombo>
364 {2#}{3%}<keycombo><keycap>{1}</keycap><keycap>{2}</keycap></keycombo>
365 {3#}<keycombo><keycap>{1}</keycap><keycap>{2}</keycap><keycap>{3}</keycap></keycombo>
366
367 [menu-inlinemacro]
368 {1%}<guimenu>{target}</guimenu>
369 {1#}{2%}<menuchoice><guimenu>{target}</guimenu> <guimenuitem>{1}</guimenuitem></menuchoice>
370 {2#}{3%}<menuchoice><guimenu>{target}</guimenu> <guisubmenu>{1}</guisubmenu> <guimenuitem>{2}</guimenuitem></menuchoice>
371 {3#}<menuchoice><guimenu>{target}</guimenu> <guisubmenu>{1}</guisubmenu> <guisubmenu>{2}</guisubmenu> <guimenuitem>{3}</guimenuitem></menuchoice>
372
373 # override tabletags to support cellbgcolor
374 [tabletags-default]
375 headdata=<entry align="{halign}" valign="{valign}"{colspan@1:: namest="col_{colstart}" nameend="col_{colend}"}{morerows@0:: morerows="{morerows}"}>{cellbgcolor?<?dbfo bgcolor="{cellbgcolor}"?>}|</entry>
376 bodydata=<entry align="{halign}" valign="{valign}"{colspan@1:: namest="col_{colstart}" nameend="col_{colend}"}{morerows@0:: morerows="{morerows}"}>{cellbgcolor?<?dbfo bgcolor="{cellbgcolor}"?>}|</entry>
377
378 [docinfo]
379 ifndef::notitle[]
380 {set2:subtitle_offset:{eval:'{doctitle}'.rfind(': ')}}
381 {eval:{subtitle_offset} != -1}<title>{eval:'{doctitle}'[0:{subtitle_offset}]}</title>
382 {eval:{subtitle_offset} != -1}<subtitle>{eval:'{doctitle}'[{subtitle_offset} + 2:]}</subtitle>
383 {eval:{subtitle_offset} < 0}<title>{doctitle}</title>
384 endif::notitle[]
385 <date>{revdate}</date>
386 # To ensure valid articleinfo/bookinfo when there is no AsciiDoc header.
387 {doctitle%}{revdate%}<date>{docdate}</date>
388 {authored#}<author>
389 <firstname>{firstname}</firstname>
390 <othername>{middlename}</othername>
391 <surname>{lastname}</surname>
392 <email>{email}</email>
393 {authored#}</author>
394 <authorinitials>{authorinitials}</authorinitials>
395 <revhistory><revision>{revnumber?<revnumber>{revnumber}</revnumber>}<date>{revdate}</date>{authorinitials?<authorinitials>{authorinitials}</authorinitials>}{revremark?<revremark>{revremark}</revremark>}</revision></revhistory>
396 {docinfo1,docinfo2#}{include:{docdir}/docinfo.xml}
397 {docinfo,docinfo2#}{include:{docdir}/{docname}-docinfo.xml}
398 <orgname>{orgname}</orgname>
399
400 endif::basebackend-docbook[]