PageRenderTime 30ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

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

#
AWK | 416 lines | 399 code | 14 blank | 3 comment | 0 complexity | 26f5879eafd12c80bbe7364133be1cfa 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>mdoc2man.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">mdoc2man.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. trailer = <span class="enscript-string">&quot;&quot;</span>
  46. out = <span class="enscript-string">&quot;&quot;</span>
  47. sep = <span class="enscript-string">&quot;&quot;</span>
  48. nextsep = <span class="enscript-string">&quot; &quot;</span>
  49. }
  50. <span class="enscript-comment"># Add a word with appropriate preceding whitespace
  51. </span><span class="enscript-comment"># Maintain a short queue of the expected upcoming word separators.
  52. </span><span class="enscript-keyword">function</span> add(str) {
  53. out=out sep str
  54. sep = nextsep
  55. nextsep = <span class="enscript-string">&quot; &quot;</span>
  56. }
  57. <span class="enscript-comment"># Add a word with no following whitespace
  58. </span><span class="enscript-comment"># Use for opening punctuation such as '('
  59. </span><span class="enscript-keyword">function</span> addopen(str) {
  60. add(str)
  61. sep = <span class="enscript-string">&quot;&quot;</span>
  62. }
  63. <span class="enscript-comment"># Add a word with no preceding whitespace
  64. </span><span class="enscript-comment"># Use for closing punctuation such as ')' or '.'
  65. </span><span class="enscript-keyword">function</span> addclose(str) {
  66. sep = <span class="enscript-string">&quot;&quot;</span>
  67. add(str)
  68. }
  69. <span class="enscript-comment"># Add a word with no space before or after
  70. </span><span class="enscript-comment"># Use for separating punctuation such as '='
  71. </span><span class="enscript-keyword">function</span> addpunct(str) {
  72. sep = <span class="enscript-string">&quot;&quot;</span>
  73. add(str)
  74. sep = <span class="enscript-string">&quot;&quot;</span>
  75. }
  76. <span class="enscript-comment"># Emit the current line so far
  77. </span><span class="enscript-keyword">function</span> endline() {
  78. addclose(trailer)
  79. trailer = <span class="enscript-string">&quot;&quot;</span>
  80. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">length</span>(out) &gt; 0) {
  81. <span class="enscript-keyword">print</span> out
  82. out=<span class="enscript-string">&quot;&quot;</span>
  83. }
  84. <span class="enscript-keyword">if</span>(displaylines &gt; 0) {
  85. displaylines = displaylines - 1
  86. <span class="enscript-keyword">if</span> (displaylines == 0)
  87. dispend()
  88. }
  89. <span class="enscript-comment"># First word on next line has no preceding whitespace
  90. </span> sep = <span class="enscript-string">&quot;&quot;</span>
  91. }
  92. <span class="enscript-keyword">function</span> linecmd(cmd) {
  93. endline()
  94. add(cmd)
  95. endline()
  96. }
  97. <span class="enscript-keyword">function</span> breakline() {
  98. linecmd(<span class="enscript-string">&quot;.br&quot;</span>)
  99. }
  100. <span class="enscript-comment"># Start an indented display
  101. </span><span class="enscript-keyword">function</span> dispstart() {
  102. linecmd(<span class="enscript-string">&quot;.RS 4&quot;</span>)
  103. }
  104. <span class="enscript-comment"># End an indented display
  105. </span><span class="enscript-keyword">function</span> dispend() {
  106. linecmd(<span class="enscript-string">&quot;.RE&quot;</span>)
  107. }
  108. <span class="enscript-comment"># Collect rest of input line
  109. </span><span class="enscript-keyword">function</span> wtail() {
  110. retval=<span class="enscript-string">&quot;&quot;</span>
  111. <span class="enscript-keyword">while</span>(w&lt;nwords) {
  112. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">length</span>(retval))
  113. retval=retval <span class="enscript-string">&quot; &quot;</span>
  114. retval=retval words[++w]
  115. }
  116. <span class="enscript-keyword">return</span> retval
  117. }
  118. <span class="enscript-keyword">function</span> splitwords(l, dest, n, o, w) {
  119. n = 1
  120. <span class="enscript-keyword">delete</span> dest
  121. <span class="enscript-keyword">while</span> (<span class="enscript-keyword">length</span>(l) &gt; 0) {
  122. <span class="enscript-keyword">sub</span>(<span class="enscript-string">&quot;^[ \t]*&quot;</span>, <span class="enscript-string">&quot;&quot;</span>, l)
  123. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(l, <span class="enscript-string">&quot;^\&quot;&quot;</span>)) {
  124. l = <span class="enscript-keyword">substr</span>(l, 2)
  125. o = <span class="enscript-keyword">index</span>(l, <span class="enscript-string">&quot;\&quot;&quot;</span>)
  126. <span class="enscript-keyword">if</span> (o &gt; 0) {
  127. w = <span class="enscript-keyword">substr</span>(l, 1, o-1)
  128. l = <span class="enscript-keyword">substr</span>(l, o+1)
  129. dest[n++] = w
  130. } <span class="enscript-keyword">else</span> {
  131. dest[n++] = l
  132. l = <span class="enscript-string">&quot;&quot;</span>
  133. }
  134. } <span class="enscript-keyword">else</span> {
  135. o = <span class="enscript-keyword">match</span>(l, <span class="enscript-string">&quot;[ \t]&quot;</span>)
  136. <span class="enscript-keyword">if</span> (o &gt; 0) {
  137. w = <span class="enscript-keyword">substr</span>(l, 1, o-1)
  138. l = <span class="enscript-keyword">substr</span>(l, o+1)
  139. dest[n++] = w
  140. } <span class="enscript-keyword">else</span> {
  141. dest[n++] = l
  142. l = <span class="enscript-string">&quot;&quot;</span>
  143. }
  144. }
  145. }
  146. <span class="enscript-keyword">return</span> n-1
  147. }
  148. ! /^\./ {
  149. out = $0
  150. endline()
  151. <span class="enscript-keyword">next</span>
  152. }
  153. /^\.\\<span class="enscript-string">&quot;/ { next }
  154. {
  155. sub(&quot;</span>^\\.<span class="enscript-string">&quot;,&quot;</span><span class="enscript-string">&quot;)
  156. nwords=splitwords($0, words)
  157. # TODO: Instead of iterating 'w' over the array, have a separate
  158. # function that returns 'next word' and use that. This will allow
  159. # proper handling of double-quoted arguments as well.
  160. for(w=1;w&lt;=nwords;w++) {
  161. if(match(words[w],&quot;</span>^Li$<span class="enscript-string">&quot;)) { # Literal; rest of line is unformatted
  162. dispstart()
  163. displaylines = 1
  164. } else if(match(words[w],&quot;</span>^Dl$<span class="enscript-string">&quot;)) { # Display literal
  165. dispstart()
  166. displaylines = 1
  167. } else if(match(words[w],&quot;</span>^Bd$<span class="enscript-string">&quot;)) { # Begin display
  168. if(match(words[w+1],&quot;</span>-literal<span class="enscript-string">&quot;)) {
  169. dispstart()
  170. linecmd(&quot;</span>.nf<span class="enscript-string">&quot;)
  171. displaylines=10000
  172. w=nwords
  173. }
  174. } else if(match(words[w],&quot;</span>^Ed$<span class="enscript-string">&quot;)) { # End display
  175. displaylines = 0
  176. dispend()
  177. } else if(match(words[w],&quot;</span>^Ns$<span class="enscript-string">&quot;)) { # Suppress space after next word
  178. nextsep = &quot;</span><span class="enscript-string">&quot;
  179. } else if(match(words[w],&quot;</span>^No$<span class="enscript-string">&quot;)) { # Normal text
  180. add(words[++w])
  181. } else if(match(words[w],&quot;</span>^Dq$<span class="enscript-string">&quot;)) { # Quote
  182. addopen(&quot;</span>``<span class="enscript-string">&quot;)
  183. add(words[++w])
  184. while(w&lt;nwords&amp;&amp;!match(words[w+1],&quot;</span>^[\\.,]<span class="enscript-string">&quot;))
  185. add(words[++w])
  186. addclose(&quot;</span>''<span class="enscript-string">&quot;)
  187. } else if(match(words[w],&quot;</span>^Do$<span class="enscript-string">&quot;)) {
  188. addopen(&quot;</span>``<span class="enscript-string">&quot;)
  189. } else if(match(words[w],&quot;</span>^Dc$<span class="enscript-string">&quot;)) {
  190. addclose(&quot;</span>''<span class="enscript-string">&quot;)
  191. } else if(match(words[w],&quot;</span>^Oo$<span class="enscript-string">&quot;)) {
  192. addopen(&quot;</span>[<span class="enscript-string">&quot;)
  193. } else if(match(words[w],&quot;</span>^Oc$<span class="enscript-string">&quot;)) {
  194. addclose(&quot;</span>]<span class="enscript-string">&quot;)
  195. } else if(match(words[w],&quot;</span>^Ao$<span class="enscript-string">&quot;)) {
  196. addopen(&quot;</span>&lt;<span class="enscript-string">&quot;)
  197. } else if(match(words[w],&quot;</span>^Ac$<span class="enscript-string">&quot;)) {
  198. addclose(&quot;</span>&gt;<span class="enscript-string">&quot;)
  199. } else if(match(words[w],&quot;</span>^Dd$<span class="enscript-string">&quot;)) {
  200. date=wtail()
  201. next
  202. } else if(match(words[w],&quot;</span>^Dt$<span class="enscript-string">&quot;)) {
  203. id=wtail()
  204. next
  205. } else if(match(words[w],&quot;</span>^Ox$<span class="enscript-string">&quot;)) {
  206. add(&quot;</span>OpenBSD<span class="enscript-string">&quot;)
  207. } else if(match(words[w],&quot;</span>^Fx$<span class="enscript-string">&quot;)) {
  208. add(&quot;</span>FreeBSD<span class="enscript-string">&quot;)
  209. } else if(match(words[w],&quot;</span>^Nx$<span class="enscript-string">&quot;)) {
  210. add(&quot;</span>NetBSD<span class="enscript-string">&quot;)
  211. } else if(match(words[w],&quot;</span>^St$<span class="enscript-string">&quot;)) {
  212. if (match(words[w+1], &quot;</span>^-p1003.1$<span class="enscript-string">&quot;)) {
  213. w++
  214. add(&quot;</span>IEEE Std 1003.1 (``POSIX.1'')<span class="enscript-string">&quot;)
  215. } else if(match(words[w+1], &quot;</span>^-p1003.1-96$<span class="enscript-string">&quot;)) {
  216. w++
  217. add(&quot;</span>ISO/IEC 9945-1:1996 (``POSIX.1'')<span class="enscript-string">&quot;)
  218. } else if(match(words[w+1], &quot;</span>^-p1003.1-88$<span class="enscript-string">&quot;)) {
  219. w++
  220. add(&quot;</span>IEEE Std 1003.1-1988 (``POSIX.1'')<span class="enscript-string">&quot;)
  221. } else if(match(words[w+1], &quot;</span>^-p1003.1-2001$<span class="enscript-string">&quot;)) {
  222. w++
  223. add(&quot;</span>IEEE Std 1003.1-2001 (``POSIX.1'')<span class="enscript-string">&quot;)
  224. } else if(match(words[w+1], &quot;</span>^-susv2$<span class="enscript-string">&quot;)) {
  225. w++
  226. add(&quot;</span>Version 2 of the Single UNIX Specification (``SUSv2'')<span class="enscript-string">&quot;)
  227. }
  228. } else if(match(words[w],&quot;</span>^Ex$<span class="enscript-string">&quot;)) {
  229. if (match(words[w+1], &quot;</span>^-std$<span class="enscript-string">&quot;)) {
  230. w++
  231. add(&quot;</span>The \\fB<span class="enscript-string">&quot; name &quot;</span>\\fP utility exits 0 on success, and &gt;0 <span class="enscript-keyword">if</span> an error occurs.<span class="enscript-string">&quot;)
  232. }
  233. } else if(match(words[w],&quot;</span>^Os$<span class="enscript-string">&quot;)) {
  234. add(&quot;</span>.TH <span class="enscript-string">&quot; id &quot;</span> \<span class="enscript-string">&quot;&quot;</span> date <span class="enscript-string">&quot;\&quot; \&quot;&quot;</span> wtail() <span class="enscript-string">&quot;\&quot;&quot;</span>)
  235. } <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>)) {
  236. section=wtail()
  237. add(<span class="enscript-string">&quot;.SH &quot;</span> section)
  238. linecmd(<span class="enscript-string">&quot;.ad l&quot;</span>)
  239. } <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>)) {
  240. add(<span class="enscript-string">&quot;\\fB&quot;</span> words[++w] <span class="enscript-string">&quot;\\fP(&quot;</span> words[++w] <span class="enscript-string">&quot;)&quot;</span> words[++w])
  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;^Nm$&quot;</span>)) {
  242. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(section,<span class="enscript-string">&quot;SYNOPSIS&quot;</span>))
  243. breakline()
  244. <span class="enscript-keyword">if</span>(w &gt;= nwords)
  245. n=name
  246. <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>))
  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;^[.,;:]$&quot;</span>))
  249. n=name
  250. <span class="enscript-keyword">else</span> {
  251. n=words[++w]
  252. <span class="enscript-keyword">if</span>(!<span class="enscript-keyword">length</span>(name))
  253. name=n
  254. }
  255. <span class="enscript-keyword">if</span>(!<span class="enscript-keyword">length</span>(n))
  256. n=name
  257. add(<span class="enscript-string">&quot;\\fB\\%&quot;</span> n <span class="enscript-string">&quot;\\fP&quot;</span>)
  258. } <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>)) {
  259. add(<span class="enscript-string">&quot;\\- &quot;</span> wtail())
  260. } <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>)) {
  261. add(<span class="enscript-string">&quot;\\fB\\-&quot;</span> words[++w] <span class="enscript-string">&quot;\\fP&quot;</span>)
  262. } <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>)) {
  263. addopen(<span class="enscript-string">&quot;\\fI&quot;</span>)
  264. <span class="enscript-keyword">if</span>(w==nwords)
  265. add(<span class="enscript-string">&quot;file ...\\fP&quot;</span>)
  266. <span class="enscript-keyword">else</span>
  267. add(words[++w] <span class="enscript-string">&quot;\\fP&quot;</span>)
  268. } <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>)) {
  269. add(<span class="enscript-string">&quot;\\fB&quot;</span> words[++w] <span class="enscript-string">&quot;\\fP&quot;</span>)
  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;^Op$&quot;</span>)) {
  271. addopen(<span class="enscript-string">&quot;[&quot;</span>)
  272. option=1
  273. trailer=<span class="enscript-string">&quot;]&quot;</span> trailer
  274. } <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>)) {
  275. linecmd(<span class="enscript-string">&quot;.PP&quot;</span>)
  276. } <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>)) {
  277. endline()
  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;^Ss$&quot;</span>)) {
  279. add(<span class="enscript-string">&quot;.SS&quot;</span>)
  280. } <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>)) {
  281. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(section, <span class="enscript-string">&quot;SYNOPSIS&quot;</span>)) {
  282. breakline()
  283. }
  284. add(<span class="enscript-string">&quot;\\fI&quot;</span> wtail() <span class="enscript-string">&quot;\\fP&quot;</span>)
  285. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(section, <span class="enscript-string">&quot;SYNOPSIS&quot;</span>)) {
  286. breakline()
  287. }
  288. } <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>)) {
  289. ++w
  290. F = <span class="enscript-string">&quot;\\fB\\%&quot;</span> words[w] <span class="enscript-string">&quot;\\fP(&quot;</span>
  291. Fsep = <span class="enscript-string">&quot;&quot;</span>
  292. <span class="enscript-keyword">while</span>(w&lt;nwords) {
  293. ++w
  294. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(words[w], <span class="enscript-string">&quot;^[.,:]$&quot;</span>)) {
  295. --w
  296. <span class="enscript-keyword">break</span>
  297. }
  298. <span class="enscript-keyword">gsub</span>(<span class="enscript-string">&quot; &quot;</span>, <span class="enscript-string">&quot;\\ &quot;</span>, words[w])
  299. F = F Fsep <span class="enscript-string">&quot;\\fI\\%&quot;</span> words[w] <span class="enscript-string">&quot;\\fP&quot;</span>
  300. Fsep = <span class="enscript-string">&quot;, &quot;</span>
  301. }
  302. add(F <span class="enscript-string">&quot;)&quot;</span>)
  303. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(section, <span class="enscript-string">&quot;SYNOPSIS&quot;</span>)) {
  304. addclose(<span class="enscript-string">&quot;;&quot;</span>)
  305. }
  306. } <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>)) {
  307. w++
  308. F = <span class="enscript-string">&quot;\\fB\\%&quot;</span> words[w] <span class="enscript-string">&quot;\\fP(&quot;</span>
  309. Fsep = <span class="enscript-string">&quot;&quot;</span>
  310. } <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>)) {
  311. w++
  312. <span class="enscript-keyword">gsub</span>(<span class="enscript-string">&quot; &quot;</span>, <span class="enscript-string">&quot;\\ &quot;</span>, words[w])
  313. F = F Fsep <span class="enscript-string">&quot;\\fI\\%&quot;</span> words[w] <span class="enscript-string">&quot;\\fP&quot;</span>
  314. Fsep = <span class="enscript-string">&quot;, &quot;</span>
  315. } <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>)) {
  316. add(F <span class="enscript-string">&quot;)&quot;</span>)
  317. <span class="enscript-keyword">if</span> (<span class="enscript-keyword">match</span>(section, <span class="enscript-string">&quot;SYNOPSIS&quot;</span>)) {
  318. addclose(<span class="enscript-string">&quot;;&quot;</span>)
  319. }
  320. } <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>)) {
  321. w++
  322. add(<span class="enscript-string">&quot;\\fI&quot;</span> words[w] <span class="enscript-string">&quot;\\fP&quot;</span>)
  323. } <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>)) {
  324. w++
  325. add(<span class="enscript-string">&quot;\\fB#include &lt;&quot;</span> words[w] <span class="enscript-string">&quot;&gt;\\fP&quot;</span>)
  326. } <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>)) {
  327. addopen(<span class="enscript-string">&quot;\\fI&quot;</span>)
  328. w++
  329. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w],<span class="enscript-string">&quot;^\\.&quot;</span>))
  330. add(<span class="enscript-string">&quot;\\&amp;&quot;</span>)
  331. add(words[w] <span class="enscript-string">&quot;\\fP&quot;</span>)
  332. } <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>)) {
  333. add(<span class="enscript-string">&quot;.BR&quot;</span>)
  334. } <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>)) {
  335. add(<span class="enscript-string">&quot;.IR&quot;</span>)
  336. } <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>)) {
  337. addopen(<span class="enscript-string">&quot;(&quot;</span>)
  338. trailer=<span class="enscript-string">&quot;)&quot;</span> trailer
  339. } <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>)) {
  340. addopen(<span class="enscript-string">&quot;\\%&lt;&quot;</span>)
  341. trailer=<span class="enscript-string">&quot;&gt;&quot;</span> trailer
  342. } <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>)) {
  343. addopen(<span class="enscript-string">&quot;{&quot;</span>)
  344. trailer=<span class="enscript-string">&quot;}&quot;</span> trailer
  345. } <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>)) {
  346. add(<span class="enscript-string">&quot;.B &quot;</span> wtail())
  347. } <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>)) {
  348. add(<span class="enscript-string">&quot;\\fB&quot;</span>)
  349. trailer=<span class="enscript-string">&quot;\\fP&quot;</span> trailer
  350. } <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>)) {
  351. oldoptlist=optlist
  352. linecmd(<span class="enscript-string">&quot;.RS 5&quot;</span>)
  353. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1],<span class="enscript-string">&quot;-bullet&quot;</span>))
  354. optlist=1
  355. <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>)) {
  356. optlist=2
  357. enum=0
  358. } <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>))
  359. optlist=3
  360. <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>))
  361. optlist=4
  362. <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;-bullet&quot;</span>))
  363. optlist=1
  364. w=nwords
  365. } <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>)) {
  366. linecmd(<span class="enscript-string">&quot;.RE&quot;</span>)
  367. optlist=oldoptlist
  368. } <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>)&amp;&amp;optlist) {
  369. <span class="enscript-keyword">if</span>(optlist==1)
  370. add(<span class="enscript-string">&quot;.IP \\(bu&quot;</span>)
  371. <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(optlist==2)
  372. add(<span class="enscript-string">&quot;.IP &quot;</span> ++enum <span class="enscript-string">&quot;.&quot;</span>)
  373. <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(optlist==3) {
  374. add(<span class="enscript-string">&quot;.TP&quot;</span>)
  375. endline()
  376. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(words[w+1],<span class="enscript-string">&quot;^Pa$|^Ev$&quot;</span>)) {
  377. add(<span class="enscript-string">&quot;.B&quot;</span>)
  378. w++
  379. }
  380. } <span class="enscript-keyword">else</span> <span class="enscript-keyword">if</span>(optlist==4)
  381. add(<span class="enscript-string">&quot;.IP&quot;</span>)
  382. } <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>)) {
  383. <span class="enscript-comment"># TODO: Figure out how to handle this
  384. </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>)) {
  385. <span class="enscript-comment"># TODO: Figure out how to handle this
  386. </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;^[=]$&quot;</span>)) {
  387. addpunct(words[w])
  388. } <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>)) {
  389. addopen(words[w])
  390. } <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>)) {
  391. addclose(words[w])
  392. } <span class="enscript-keyword">else</span> {
  393. add(words[w])
  394. }
  395. }
  396. <span class="enscript-keyword">if</span>(<span class="enscript-keyword">match</span>(out,<span class="enscript-string">&quot;^\\.[^a-zA-Z]&quot;</span>))
  397. <span class="enscript-keyword">sub</span>(<span class="enscript-string">&quot;^\\.&quot;</span>,<span class="enscript-string">&quot;&quot;</span>,out)
  398. endline()
  399. }
  400. </pre>
  401. <hr />
  402. </body></html>