PageRenderTime 31ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/opensource.apple.com/source/libarchive/libarchive-23.1/libarchive/doc/mdoc2wiki.awk

#
AWK | 473 lines | 455 code | 15 blank | 3 comment | 0 complexity | d1107e320cb31a043380a07721ac90e3 MD5 | raw file
Possible License(s): GPL-2.0, AGPL-1.0, AGPL-3.0, CC-BY-SA-3.0, MPL-2.0-no-copyleft-exception, MPL-2.0, JSON, 0BSD, LGPL-2.1, Apache-2.0, BSD-3-Clause, ISC, LGPL-2.0, WTFPL, MIT
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <head>
  5. <title>mdoc2wiki.awk</title>
  6. <style type="text/css">
  7. .enscript-comment { font-style: italic; color: rgb(178,34,34); }
  8. .enscript-function-name { font-weight: bold; color: rgb(0,0,255); }
  9. .enscript-variable-name { font-weight: bold; color: rgb(184,134,11); }
  10. .enscript-keyword { font-weight: bold; color: rgb(160,32,240); }
  11. .enscript-reference { font-weight: bold; color: rgb(95,158,160); }
  12. .enscript-string { font-weight: bold; color: rgb(188,143,143); }
  13. .enscript-builtin { font-weight: bold; color: rgb(218,112,214); }
  14. .enscript-type { font-weight: bold; color: rgb(34,139,34); }
  15. .enscript-highlight { text-decoration: underline; color: 0; }
  16. </style>
  17. </head>
  18. <body id="top">
  19. <h1 style="margin:8px;" id="f1">mdoc2wiki.awk&nbsp;&nbsp;&nbsp;<span style="font-weight: normal; font-size: 0.5em;">[<a href="?txt">plain text</a>]</span></h1>
  20. <hr/>
  21. <div></div>
  22. <pre>
  23. <span class="enscript-reference">#!/usr/bin/awk
  24. </span><span class="enscript-comment">#
  25. </span><span class="enscript-comment"># Copyright (c) 2003 Peter Stuge &lt;<a href="mailto:stuge-mdoc2man@cdy.org">stuge-mdoc2man@cdy.org</a>&gt;
  26. </span><span class="enscript-comment">#
  27. </span><span class="enscript-comment"># Permission to use, copy, modify, and distribute this software for any
  28. </span><span class="enscript-comment"># purpose with or without fee is hereby granted, provided that the above
  29. </span><span class="enscript-comment"># copyright notice and this permission notice appear in all copies.
  30. </span><span class="enscript-comment">#
  31. </span><span class="enscript-comment"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  32. </span><span class="enscript-comment"># WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  33. </span><span class="enscript-comment"># MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  34. </span><span class="enscript-comment"># ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  35. </span><span class="enscript-comment"># WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  36. </span><span class="enscript-comment"># ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  37. </span><span class="enscript-comment"># OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  38. </span>
  39. <span class="enscript-comment"># Dramatically overhauled by Tim Kientzle. This version almost
  40. </span><span class="enscript-comment"># handles library-style pages with Fn, Ft, etc commands. Still
  41. </span><span class="enscript-comment"># a lot of problems...
  42. </span>
  43. <span class="enscript-keyword">BEGIN</span> {
  44. displaylines = 0
  45. listdepth = 0
  46. trailer = <span class="enscript-string">&quot;&quot;</span>
  47. out = <span class="enscript-string">&quot;&quot;</span>
  48. sep = <span class="enscript-string">&quot;&quot;</span>
  49. nextsep = <span class="enscript-string">&quot; &quot;</span>
  50. spaces = <span class="enscript-string">&quot; &quot;</span>
  51. }
  52. <span class="enscript-comment"># Add a word with appropriate preceding whitespace
  53. </span><span class="enscript-comment"># Maintain a short queue of the expected upcoming word separators.
  54. </span><span class="enscript-keyword">function</span> add(str) {
  55. out=out sep str
  56. sep = nextsep
  57. nextsep = <span class="enscript-string">&quot; &quot;</span>
  58. }
  59. <span class="enscript-comment"># Add a word with no following whitespace
  60. </span><span class="enscript-comment"># Use for opening punctuation such as '('
  61. </span><span class="enscript-keyword">function</span> addopen(str) {
  62. add(str)
  63. sep = <span class="enscript-string">&quot;&quot;</span>
  64. }
  65. <span class="enscript-comment"># Add a word with no preceding whitespace
  66. </span><span class="enscript-comment"># Use for closing punctuation such as ')' or '.'
  67. </span><span class="enscript-keyword">function</span> addclose(str) {
  68. sep = <span class="enscript-string">&quot;&quot;</span>
  69. add(str)
  70. }
  71. <span class="enscript-comment"># Add a word with no space before or after
  72. </span><span class="enscript-comment"># Use for separating punctuation such as '='
  73. </span><span class="enscript-keyword">function</span> addpunct(str) {
  74. sep = <span class="enscript-string">&quot;&quot;</span>
  75. add(str)
  76. sep = <span class="enscript-string">&quot;&quot;</span>
  77. }
  78. <span class="enscript-comment"># Emit the current line so far
  79. </span><span class="enscript-keyword">function</span> endline() {
  80. addclose(trailer)
  81. trailer = <span class="enscript-string">&quot;&quot;</span>
  82. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">length</span>(out) &gt; 0) {
  83. <span class="enscript-keyword">print</span> out
  84. out=<span class="enscript-string">&quot;&quot;</span>
  85. }
  86. <span class="enscript-keyword">if</span>(displaylines &gt; 0) {
  87. displaylines = displaylines - 1
  88. <span class="enscript-keyword">if</span> (displaylines == 0)
  89. dispend()
  90. }
  91. <span class="enscript-comment"># First word on next line has no preceding whitespace
  92. </span> sep = <span class="enscript-string">&quot;&quot;</span>
  93. }
  94. <span class="enscript-keyword">function</span> linecmd(cmd) {
  95. endline()
  96. add(cmd)
  97. endline()
  98. }
  99. <span class="enscript-keyword">function</span> breakline() {
  100. linecmd(<span class="enscript-string">&quot;&lt;br&gt;&quot;</span>)
  101. }
  102. <span class="enscript-comment"># Start an indented display
  103. </span><span class="enscript-keyword">function</span> dispstart() {
  104. linecmd(<span class="enscript-string">&quot;{{{&quot;</span>)
  105. }
  106. <span class="enscript-comment"># End an indented display
  107. </span><span class="enscript-keyword">function</span> dispend() {
  108. linecmd(<span class="enscript-string">&quot;}}}&quot;</span>)
  109. }
  110. <span class="enscript-comment"># Collect rest of input line
  111. </span><span class="enscript-keyword">function</span> wtail() {
  112. retval=<span class="enscript-string">&quot;&quot;</span>
  113. <span class="enscript-keyword">while</span>(w&lt;nwords) {
  114. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">length</span>(retval))
  115. retval=retval <span class="enscript-string">&quot; &quot;</span>
  116. retval=retval words[++w]
  117. }
  118. <span class="enscript-keyword">return</span> retval
  119. }
  120. <span class="enscript-keyword">function</span> splitwords(l, dest, n, o, w) {
  121. n = 1
  122. <span class="enscript-keyword">delete</span> dest
  123. <span class="enscript-keyword">while</span> (<span class="enscript-keyword">length</span>(l) &gt; 0) {
  124. <span class="enscript-keyword">sub</span>(<span class="enscript-string">&quot;^[ \t]*&quot;</span>, <span class="enscript-string">&quot;&quot;</span>, l)
  125. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(l, <span class="enscript-string">&quot;^\&quot;&quot;</span>)) {
  126. l = <span class="enscript-keyword">substr</span>(l, 2)
  127. o = <span class="enscript-keyword">index</span>(l, <span class="enscript-string">&quot;\&quot;&quot;</span>)
  128. <span class="enscript-keyword">if</span> (o &gt; 0) {
  129. w = <span class="enscript-keyword">substr</span>(l, 1, o-1)
  130. l = <span class="enscript-keyword">substr</span>(l, o+1)
  131. dest[n++] = w
  132. } <span class="enscript-keyword">else</span> {
  133. dest[n++] = l
  134. l = <span class="enscript-string">&quot;&quot;</span>
  135. }
  136. } <span class="enscript-keyword">else</span> {
  137. o = <span class="enscript-keyword">match</span>(l, <span class="enscript-string">&quot;[ \t]&quot;</span>)
  138. <span class="enscript-keyword">if</span> (o &gt; 0) {
  139. w = <span class="enscript-keyword">substr</span>(l, 1, o-1)
  140. l = <span class="enscript-keyword">substr</span>(l, o+1)
  141. dest[n++] = w
  142. } <span class="enscript-keyword">else</span> {
  143. dest[n++] = l
  144. l = <span class="enscript-string">&quot;&quot;</span>
  145. }
  146. }
  147. }
  148. <span class="enscript-keyword">return</span> n-1
  149. }
  150. ! /^\./ {
  151. out = $0
  152. endline()
  153. <span class="enscript-keyword">next</span>
  154. }
  155. /^\.\\<span class="enscript-string">&quot;/ { next }
  156. {
  157. sub(&quot;</span>^\\.<span class="enscript-string">&quot;,&quot;</span><span class="enscript-string">&quot;)
  158. nwords=splitwords($0, words)
  159. # TODO: Instead of iterating 'w' over the array, have a separate
  160. # function that returns 'next word' and use that. This will allow
  161. # proper handling of double-quoted arguments as well.
  162. for(w=1;w&lt;=nwords;w++) {
  163. if(match(words[w],&quot;</span>^Li$<span class="enscript-string">&quot;)) { # Literal; rest of line is unformatted
  164. dispstart()
  165. displaylines = 1
  166. } else if(match(words[w],&quot;</span>^Dl$<span class="enscript-string">&quot;)) { # Display literal
  167. dispstart()
  168. displaylines = 1
  169. } else if(match(words[w],&quot;</span>^Bd$<span class="enscript-string">&quot;)) { # Begin display
  170. if(match(words[w+1],&quot;</span>-literal<span class="enscript-string">&quot;)) {
  171. dispstart()
  172. displaylines=10000
  173. w=nwords
  174. }
  175. } else if(match(words[w],&quot;</span>^Ed$<span class="enscript-string">&quot;)) { # End display
  176. displaylines = 0
  177. dispend()
  178. } else if(match(words[w],&quot;</span>^Ns$<span class="enscript-string">&quot;)) { # Suppress space before next word
  179. sep=&quot;</span><span class="enscript-string">&quot;
  180. } else if(match(words[w],&quot;</span>^No$<span class="enscript-string">&quot;)) { # Normal text
  181. add(words[++w])
  182. } else if(match(words[w],&quot;</span>^Dq$<span class="enscript-string">&quot;)) { # Quote
  183. addopen(&quot;</span>\<span class="enscript-string">&quot;&quot;</span>)
  184. add(words[++w])
  185. <span class="enscript-keyword">while</span>(w&lt;nwords&amp;&amp;!<span class="enscript-keyword">match</span>(words[w+1],<span class="enscript-string">&quot;^[\\.,]&quot;</span>))
  186. add(words[++w])
  187. addclose(<span class="enscript-string">&quot;\&quot;&quot;</span>)
  188. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Do$&quot;</span>)) {
  189. addopen(<span class="enscript-string">&quot;\&quot;&quot;</span>)
  190. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Dc$&quot;</span>)) {
  191. addclose(<span class="enscript-string">&quot;\&quot;&quot;</span>)
  192. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Oo$&quot;</span>)) {
  193. addopen(<span class="enscript-string">&quot;`[`&quot;</span>)
  194. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Oc$&quot;</span>)) {
  195. addclose(<span class="enscript-string">&quot;`]`&quot;</span>)
  196. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Ao$&quot;</span>)) {
  197. addopen(<span class="enscript-string">&quot;`&lt;`&quot;</span>)
  198. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Ac$&quot;</span>)) {
  199. addclose(<span class="enscript-string">&quot;`&gt;`&quot;</span>)
  200. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Dd$&quot;</span>)) {
  201. date=wtail()
  202. <span class="enscript-keyword">next</span>
  203. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Dt$&quot;</span>)) {
  204. id=wtail()
  205. <span class="enscript-keyword">next</span>
  206. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Ox$&quot;</span>)) {
  207. add(<span class="enscript-string">&quot;OpenBSD&quot;</span>)
  208. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Fx$&quot;</span>)) {
  209. add(<span class="enscript-string">&quot;FreeBSD&quot;</span>)
  210. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Bx$&quot;</span>)) {
  211. add(<span class="enscript-string">&quot;BSD&quot;</span>)
  212. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Nx$&quot;</span>)) {
  213. add(<span class="enscript-string">&quot;NetBSD&quot;</span>)
  214. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^St$&quot;</span>)) {
  215. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(words[w+1], <span class="enscript-string">&quot;^-p1003.1$&quot;</span>)) {
  216. w++
  217. add(<span class="enscript-string">&quot;IEEE Std 1003.1 (``POSIX.1'')&quot;</span>)
  218. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1], <span class="enscript-string">&quot;^-p1003.1-96$&quot;</span>)) {
  219. w++
  220. add(<span class="enscript-string">&quot;ISO/IEC 9945-1:1996 (``POSIX.1'')&quot;</span>)
  221. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1], <span class="enscript-string">&quot;^-p1003.1-88$&quot;</span>)) {
  222. w++
  223. add(<span class="enscript-string">&quot;IEEE Std 1003.1-1988 (``POSIX.1'')&quot;</span>)
  224. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1], <span class="enscript-string">&quot;^-p1003.1-2001$&quot;</span>)) {
  225. w++
  226. add(<span class="enscript-string">&quot;IEEE Std 1003.1-2001 (``POSIX.1'')&quot;</span>)
  227. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1], <span class="enscript-string">&quot;^-susv2$&quot;</span>)) {
  228. w++
  229. add(<span class="enscript-string">&quot;Version 2 of the Single UNIX Specification (``SUSv2'')&quot;</span>)
  230. }
  231. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Ex$&quot;</span>)) {
  232. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(words[w+1], <span class="enscript-string">&quot;^-std$&quot;</span>)) {
  233. w++
  234. add(<span class="enscript-string">&quot;The *&quot;</span> name <span class="enscript-string">&quot;* utility exits 0 on success, and &gt;0 if an error occurs.&quot;</span>)
  235. }
  236. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Os$&quot;</span>)) {
  237. add(<span class="enscript-string">&quot;#summary &quot;</span> id <span class="enscript-string">&quot; manual page&quot;</span>)
  238. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Sh$&quot;</span>)) {
  239. section=wtail()
  240. linecmd(<span class="enscript-string">&quot;== &quot;</span> section <span class="enscript-string">&quot; ==&quot;</span>)
  241. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Xr$&quot;</span>)) {
  242. add(<span class="enscript-string">&quot;*&quot;</span> words[++w] <span class="enscript-string">&quot;*(&quot;</span> words[++w] <span class="enscript-string">&quot;)&quot;</span> words[++w])
  243. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Nm$&quot;</span>)) {
  244. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(section,<span class="enscript-string">&quot;SYNOPSIS&quot;</span>))
  245. breakline()
  246. <span class="enscript-keyword">if</span>(w &gt;= nwords)
  247. n=name
  248. <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(words[w+1], <span class="enscript-string">&quot;^[A-Z][a-z]$&quot;</span>))
  249. n=name
  250. <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(words[w+1], <span class="enscript-string">&quot;^[.,;:]$&quot;</span>))
  251. n=name
  252. <span class="enscript-keyword">else</span> {
  253. n=words[++w]
  254. <span class="enscript-keyword">if</span>(!<span class="enscript-keyword">length</span>(name))
  255. name=n
  256. }
  257. <span class="enscript-keyword">if</span>(!<span class="enscript-keyword">length</span>(n))
  258. n=name
  259. <span class="enscript-keyword">if</span> (displaylines == 0)
  260. add(<span class="enscript-string">&quot;*&quot;</span> n <span class="enscript-string">&quot;*&quot;</span>)
  261. <span class="enscript-keyword">else</span>
  262. add(n)
  263. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Nd$&quot;</span>)) {
  264. add(<span class="enscript-string">&quot;- &quot;</span> wtail())
  265. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Fl$&quot;</span>)) {
  266. <span class="enscript-keyword">if</span> (displaylines == 0)
  267. add(<span class="enscript-string">&quot;*-&quot;</span> words[++w] <span class="enscript-string">&quot;*&quot;</span>)
  268. <span class="enscript-keyword">else</span>
  269. add(<span class="enscript-string">&quot;-&quot;</span> words[++w])
  270. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Ar$&quot;</span>)) {
  271. <span class="enscript-keyword">if</span>(w==nwords)
  272. add(<span class="enscript-string">&quot;_file ..._&quot;</span>)
  273. <span class="enscript-keyword">else</span> {
  274. ++w
  275. <span class="enscript-keyword">gsub</span>(<span class="enscript-string">&quot;&lt;&quot;</span>, <span class="enscript-string">&quot;`&lt;`&quot;</span>, words[w])
  276. add(<span class="enscript-string">&quot;_&quot;</span> words[w] <span class="enscript-string">&quot;_&quot;</span>)
  277. }
  278. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Cm$&quot;</span>)) {
  279. ++w
  280. <span class="enscript-keyword">if</span> (displaylines == 0) {
  281. <span class="enscript-keyword">gsub</span>(<span class="enscript-string">&quot;^_&quot;</span>, <span class="enscript-string">&quot;`_`&quot;</span>, words[w])
  282. <span class="enscript-keyword">gsub</span>(<span class="enscript-string">&quot;\\*$&quot;</span>, <span class="enscript-string">&quot;`*`&quot;</span>, words[w])
  283. add(<span class="enscript-string">&quot;*&quot;</span> words[w] <span class="enscript-string">&quot;*&quot;</span>)
  284. } <span class="enscript-keyword">else</span>
  285. add(words[w])
  286. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Op$&quot;</span>)) {
  287. addopen(<span class="enscript-string">&quot;`[`&quot;</span>)
  288. option=1
  289. trailer=<span class="enscript-string">&quot;`]`&quot;</span> trailer
  290. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Pp$&quot;</span>)) {
  291. ++w
  292. endline()
  293. <span class="enscript-keyword">print</span> <span class="enscript-string">&quot;&quot;</span>
  294. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^An$&quot;</span>)) {
  295. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(words[w+1],<span class="enscript-string">&quot;-nosplit&quot;</span>))
  296. ++w
  297. endline()
  298. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Ss$&quot;</span>)) {
  299. add(<span class="enscript-string">&quot;===&quot;</span>)
  300. trailer=<span class="enscript-string">&quot;===&quot;</span>
  301. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Ft$&quot;</span>)) {
  302. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(section, <span class="enscript-string">&quot;SYNOPSIS&quot;</span>)) {
  303. breakline()
  304. }
  305. l = wtail()
  306. <span class="enscript-keyword">gsub</span>(<span class="enscript-string">&quot;\\*&quot;</span>, <span class="enscript-string">&quot;`*`&quot;</span>, l)
  307. add(<span class="enscript-string">&quot;*&quot;</span> l <span class="enscript-string">&quot;*&quot;</span>)
  308. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(section, <span class="enscript-string">&quot;SYNOPSIS&quot;</span>)) {
  309. breakline()
  310. }
  311. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Fn$&quot;</span>)) {
  312. ++w
  313. F = <span class="enscript-string">&quot;*&quot;</span> words[w] <span class="enscript-string">&quot;*(&quot;</span>
  314. Fsep = <span class="enscript-string">&quot;&quot;</span>
  315. <span class="enscript-keyword">while</span>(w&lt;nwords) {
  316. ++w
  317. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(words[w], <span class="enscript-string">&quot;^[.,:]$&quot;</span>)) {
  318. --w
  319. <span class="enscript-keyword">break</span>
  320. }
  321. <span class="enscript-keyword">gsub</span>(<span class="enscript-string">&quot;\\*&quot;</span>, <span class="enscript-string">&quot;`*`&quot;</span>, words[w])
  322. F = F Fsep <span class="enscript-string">&quot;_&quot;</span> words[w] <span class="enscript-string">&quot;_&quot;</span>
  323. Fsep = <span class="enscript-string">&quot;, &quot;</span>
  324. }
  325. add(F <span class="enscript-string">&quot;)&quot;</span>)
  326. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(section, <span class="enscript-string">&quot;SYNOPSIS&quot;</span>)) {
  327. addclose(<span class="enscript-string">&quot;;&quot;</span>)
  328. }
  329. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Fo$&quot;</span>)) {
  330. w++
  331. F = <span class="enscript-string">&quot;*&quot;</span> words[w] <span class="enscript-string">&quot;*(&quot;</span>
  332. Fsep = <span class="enscript-string">&quot;&quot;</span>
  333. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Fa$&quot;</span>)) {
  334. w++
  335. <span class="enscript-keyword">gsub</span>(<span class="enscript-string">&quot;\\*&quot;</span>, <span class="enscript-string">&quot;`*`&quot;</span>, words[w])
  336. F = F Fsep <span class="enscript-string">&quot;_&quot;</span> words[w] <span class="enscript-string">&quot;_&quot;</span>
  337. Fsep = <span class="enscript-string">&quot;, &quot;</span>
  338. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Fc$&quot;</span>)) {
  339. add(F <span class="enscript-string">&quot;)&quot;</span>)
  340. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(section, <span class="enscript-string">&quot;SYNOPSIS&quot;</span>)) {
  341. addclose(<span class="enscript-string">&quot;;&quot;</span>)
  342. }
  343. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Va$&quot;</span>)) {
  344. w++
  345. add(<span class="enscript-string">&quot;_&quot;</span> words[w] <span class="enscript-string">&quot;_&quot;</span>)
  346. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^In$&quot;</span>)) {
  347. w++
  348. add(<span class="enscript-string">&quot;*#include &lt;&quot;</span> words[w] <span class="enscript-string">&quot;&gt;*&quot;</span>)
  349. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Pa$&quot;</span>)) {
  350. w++
  351. <span class="enscript-comment"># if(match(words[w],&quot;^\\.&quot;))
  352. </span><span class="enscript-comment"># add(&quot;\\&amp;&quot;)
  353. </span> <span class="enscript-keyword">if</span> (displaylines == 0)
  354. add(<span class="enscript-string">&quot;_&quot;</span> words[w] <span class="enscript-string">&quot;_&quot;</span>)
  355. <span class="enscript-keyword">else</span>
  356. add(words[w])
  357. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Dv$&quot;</span>)) {
  358. linecmd()
  359. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Em|Ev$&quot;</span>)) {
  360. add(<span class="enscript-string">&quot;.IR&quot;</span>)
  361. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Pq$&quot;</span>)) {
  362. addopen(<span class="enscript-string">&quot;(&quot;</span>)
  363. trailer=<span class="enscript-string">&quot;)&quot;</span> trailer
  364. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Aq$&quot;</span>)) {
  365. addopen(<span class="enscript-string">&quot; &lt;&quot;</span>)
  366. trailer=<span class="enscript-string">&quot;&gt;&quot;</span> trailer
  367. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Brq$&quot;</span>)) {
  368. addopen(<span class="enscript-string">&quot;{&quot;</span>)
  369. trailer=<span class="enscript-string">&quot;}&quot;</span> trailer
  370. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^S[xy]$&quot;</span>)) {
  371. add(<span class="enscript-string">&quot;.B &quot;</span> wtail())
  372. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Tn$&quot;</span>)) {
  373. n=wtail()
  374. <span class="enscript-keyword">gsub</span>(<span class="enscript-string">&quot;\\*$&quot;</span>, <span class="enscript-string">&quot;`*`&quot;</span>, n)
  375. add(<span class="enscript-string">&quot;*&quot;</span> n <span class="enscript-string">&quot;*&quot;</span>)
  376. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Ic$&quot;</span>)) {
  377. add(<span class="enscript-string">&quot;\\fB&quot;</span>)
  378. trailer=<span class="enscript-string">&quot;\\fP&quot;</span> trailer
  379. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Bl$&quot;</span>)) {
  380. ++listdepth
  381. listnext[listdepth]=<span class="enscript-string">&quot;&quot;</span>
  382. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1],<span class="enscript-string">&quot;-bullet&quot;</span>)) {
  383. optlist[listdepth]=1
  384. addopen(<span class="enscript-string">&quot;&lt;ul&gt;&quot;</span>)
  385. listclose[listdepth]=<span class="enscript-string">&quot;&lt;/ul&gt;&quot;</span>
  386. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1],<span class="enscript-string">&quot;-enum&quot;</span>)) {
  387. optlist[listdepth]=2
  388. enum=0
  389. addopen(<span class="enscript-string">&quot;&lt;ol&gt;&quot;</span>)
  390. listclose[listdepth]=<span class="enscript-string">&quot;&lt;/ol&gt;&quot;</span>
  391. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1],<span class="enscript-string">&quot;-tag&quot;</span>)) {
  392. optlist[listdepth]=3
  393. addopen(<span class="enscript-string">&quot;&lt;dl&gt;&quot;</span>)
  394. listclose[listdepth]=<span class="enscript-string">&quot;&lt;/dl&gt;&quot;</span>
  395. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1],<span class="enscript-string">&quot;-item&quot;</span>)) {
  396. optlist[listdepth]=4
  397. addopen(<span class="enscript-string">&quot;&lt;ul&gt;&quot;</span>)
  398. listclose[listdepth]=<span class="enscript-string">&quot;&lt;/ul&gt;&quot;</span>
  399. }
  400. w=nwords
  401. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^El$&quot;</span>)) {
  402. addclose(listnext[listdepth])
  403. addclose(listclose[listdepth])
  404. listclose[listdepth]=<span class="enscript-string">&quot;&quot;</span>
  405. listdepth--
  406. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^It$&quot;</span>)) {
  407. addclose(listnext[listdepth])
  408. <span class="enscript-keyword">if</span>(optlist[listdepth]==1) {
  409. addpunct(<span class="enscript-string">&quot;&lt;li&gt;&quot;</span>)
  410. listnext[listdepth] = <span class="enscript-string">&quot;&lt;/li&gt;&quot;</span>
  411. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(optlist[listdepth]==2) {
  412. addpunct(<span class="enscript-string">&quot;&lt;li&gt;&quot;</span>)
  413. listnext[listdepth] = <span class="enscript-string">&quot;&lt;/li&gt;&quot;</span>
  414. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(optlist[listdepth]==3) {
  415. addpunct(<span class="enscript-string">&quot;&lt;dt&gt;&quot;</span>)
  416. listnext[listdepth] = <span class="enscript-string">&quot;&lt;/dt&gt;&quot;</span>
  417. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1],<span class="enscript-string">&quot;^Xo$&quot;</span>)) {
  418. <span class="enscript-comment"># Suppress trailer
  419. </span> w++
  420. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1],<span class="enscript-string">&quot;^Pa$|^Ev$&quot;</span>)) {
  421. addopen(<span class="enscript-string">&quot;*&quot;</span>)
  422. w++
  423. add(words[++w] <span class="enscript-string">&quot;*&quot;</span>)
  424. } <span class="enscript-keyword">else</span> {
  425. trailer = listnext[listdepth] <span class="enscript-string">&quot;&lt;dd&gt;&quot;</span> trailer
  426. listnext[listdepth] = <span class="enscript-string">&quot;&lt;/dd&gt;&quot;</span>
  427. }
  428. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(optlist[listdepth]==4) {
  429. addpunct(<span class="enscript-string">&quot;&lt;li&gt;&quot;</span>)
  430. listnext[listdepth] = <span class="enscript-string">&quot;&lt;/li&gt;&quot;</span>
  431. }
  432. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Xo$&quot;</span>)) {
  433. <span class="enscript-comment"># TODO: Figure out how to handle this
  434. </span> } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^Xc$&quot;</span>)) {
  435. <span class="enscript-comment"># TODO: Figure out how to handle this
  436. </span> <span class="enscript-keyword">if</span> (optlist[listdepth] == 3) {
  437. addclose(listnext[listdepth])
  438. addopen(<span class="enscript-string">&quot;&lt;dd&gt;&quot;</span>)
  439. listnext[listdepth] = <span class="enscript-string">&quot;&lt;/dd&gt;&quot;</span>
  440. }
  441. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^[=]$&quot;</span>)) {
  442. addpunct(words[w])
  443. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^[\[{(]$&quot;</span>)) {
  444. addopen(words[w])
  445. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^[\\\])}.,;:]$&quot;</span>)) {
  446. addclose(words[w])
  447. } <span class="enscript-keyword">else</span> {
  448. <span class="enscript-keyword">sub</span>(<span class="enscript-string">&quot;\\\\&amp;&quot;</span>, <span class="enscript-string">&quot;&quot;</span>, words[w])
  449. add(words[w])
  450. }
  451. }
  452. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(out,<span class="enscript-string">&quot;^\\.[^a-zA-Z]&quot;</span>))
  453. <span class="enscript-keyword">sub</span>(<span class="enscript-string">&quot;^\\.&quot;</span>,<span class="enscript-string">&quot;&quot;</span>,out)
  454. endline()
  455. }
  456. </pre>
  457. <hr />
  458. </body></html>