xref: /freebsd-src/crypto/openssh/mdoc2man.awk (revision 47dd1d1b619cc035b82b49a91a25544309ff95ae)
1ce3adf43SDag-Erling Smørgrav#!/usr/bin/awk
2ce3adf43SDag-Erling Smørgrav#
3ce3adf43SDag-Erling Smørgrav# Version history:
4ce3adf43SDag-Erling Smørgrav#  v4+ Adapted for OpenSSH Portable (see cvs Id and history)
5ce3adf43SDag-Erling Smørgrav#  v3, I put the program under a proper license
6ce3adf43SDag-Erling Smørgrav#      Dan Nelson <dnelson@allantgroup.com> added .An, .Aq and fixed a typo
7ce3adf43SDag-Erling Smørgrav#  v2, fixed to work on GNU awk --posix and MacOS X
8ce3adf43SDag-Erling Smørgrav#  v1, first attempt, didn't work on MacOS X
9ce3adf43SDag-Erling Smørgrav#
10ce3adf43SDag-Erling Smørgrav# Copyright (c) 2003 Peter Stuge <stuge-mdoc2man@cdy.org>
11ce3adf43SDag-Erling Smørgrav#
12ce3adf43SDag-Erling Smørgrav# Permission to use, copy, modify, and distribute this software for any
13ce3adf43SDag-Erling Smørgrav# purpose with or without fee is hereby granted, provided that the above
14ce3adf43SDag-Erling Smørgrav# copyright notice and this permission notice appear in all copies.
15ce3adf43SDag-Erling Smørgrav#
16ce3adf43SDag-Erling Smørgrav# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
17ce3adf43SDag-Erling Smørgrav# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
18ce3adf43SDag-Erling Smørgrav# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
19ce3adf43SDag-Erling Smørgrav# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20ce3adf43SDag-Erling Smørgrav# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21ce3adf43SDag-Erling Smørgrav# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
22ce3adf43SDag-Erling Smørgrav# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23ce3adf43SDag-Erling Smørgrav
24ce3adf43SDag-Erling Smørgrav
25ce3adf43SDag-Erling SmørgravBEGIN {
26ce3adf43SDag-Erling Smørgrav  optlist=0
27ce3adf43SDag-Erling Smørgrav  oldoptlist=0
28ce3adf43SDag-Erling Smørgrav  nospace=0
29ce3adf43SDag-Erling Smørgrav  synopsis=0
30ce3adf43SDag-Erling Smørgrav  reference=0
31ce3adf43SDag-Erling Smørgrav  block=0
32ce3adf43SDag-Erling Smørgrav  ext=0
33ce3adf43SDag-Erling Smørgrav  extopt=0
34ce3adf43SDag-Erling Smørgrav  literal=0
35ce3adf43SDag-Erling Smørgrav  prenl=0
36ce3adf43SDag-Erling Smørgrav  breakw=0
37ce3adf43SDag-Erling Smørgrav  line=""
38ce3adf43SDag-Erling Smørgrav}
39ce3adf43SDag-Erling Smørgrav
40ce3adf43SDag-Erling Smørgravfunction wtail() {
41ce3adf43SDag-Erling Smørgrav  retval=""
42ce3adf43SDag-Erling Smørgrav  while(w<nwords) {
43ce3adf43SDag-Erling Smørgrav    if(length(retval))
44ce3adf43SDag-Erling Smørgrav      retval=retval OFS
45ce3adf43SDag-Erling Smørgrav    retval=retval words[++w]
46ce3adf43SDag-Erling Smørgrav  }
47ce3adf43SDag-Erling Smørgrav  return retval
48ce3adf43SDag-Erling Smørgrav}
49ce3adf43SDag-Erling Smørgrav
50ce3adf43SDag-Erling Smørgravfunction add(str) {
51ce3adf43SDag-Erling Smørgrav  for(;prenl;prenl--)
52ce3adf43SDag-Erling Smørgrav    line=line "\n"
53ce3adf43SDag-Erling Smørgrav  line=line str
54ce3adf43SDag-Erling Smørgrav}
55ce3adf43SDag-Erling Smørgrav
56ce3adf43SDag-Erling Smørgrav! /^\./ {
57ce3adf43SDag-Erling Smørgrav  for(;prenl;prenl--)
58ce3adf43SDag-Erling Smørgrav    print ""
59ce3adf43SDag-Erling Smørgrav  print
60ce3adf43SDag-Erling Smørgrav  if(literal)
61ce3adf43SDag-Erling Smørgrav    print ".br"
62ce3adf43SDag-Erling Smørgrav  next
63ce3adf43SDag-Erling Smørgrav}
64ce3adf43SDag-Erling Smørgrav
65ce3adf43SDag-Erling Smørgrav/^\.\\"/ { next }
66ce3adf43SDag-Erling Smørgrav
67ce3adf43SDag-Erling Smørgrav{
68ce3adf43SDag-Erling Smørgrav  option=0
69ce3adf43SDag-Erling Smørgrav  parens=0
70ce3adf43SDag-Erling Smørgrav  angles=0
71ce3adf43SDag-Erling Smørgrav  sub("^\\.","")
72ce3adf43SDag-Erling Smørgrav  nwords=split($0,words)
73ce3adf43SDag-Erling Smørgrav  for(w=1;w<=nwords;w++) {
74ce3adf43SDag-Erling Smørgrav    skip=0
75ce3adf43SDag-Erling Smørgrav    if(match(words[w],"^Li|Pf$")) {
76ce3adf43SDag-Erling Smørgrav      skip=1
77ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Xo$")) {
78ce3adf43SDag-Erling Smørgrav      skip=1
79ce3adf43SDag-Erling Smørgrav      ext=1
80ce3adf43SDag-Erling Smørgrav      if(length(line)&&!(match(line," $")||prenl))
81ce3adf43SDag-Erling Smørgrav	add(OFS)
82ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Xc$")) {
83ce3adf43SDag-Erling Smørgrav      skip=1
84ce3adf43SDag-Erling Smørgrav      ext=0
85ce3adf43SDag-Erling Smørgrav      if(!extopt)
86ce3adf43SDag-Erling Smørgrav	prenl++
87ce3adf43SDag-Erling Smørgrav      w=nwords
88ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Bd$")) {
89ce3adf43SDag-Erling Smørgrav      skip=1
90ce3adf43SDag-Erling Smørgrav      if(match(words[w+1],"-literal")) {
91ce3adf43SDag-Erling Smørgrav	literal=1
92ce3adf43SDag-Erling Smørgrav	prenl++
93ce3adf43SDag-Erling Smørgrav	w=nwords
94ce3adf43SDag-Erling Smørgrav      }
95ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Ed$")) {
96ce3adf43SDag-Erling Smørgrav      skip=1
97ce3adf43SDag-Erling Smørgrav      literal=0
98ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Ns$")) {
99ce3adf43SDag-Erling Smørgrav      skip=1
100ce3adf43SDag-Erling Smørgrav      if(!nospace)
101ce3adf43SDag-Erling Smørgrav	nospace=1
102ce3adf43SDag-Erling Smørgrav      sub(" $","",line)
103ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^No$")) {
104ce3adf43SDag-Erling Smørgrav      skip=1
105ce3adf43SDag-Erling Smørgrav      sub(" $","",line)
106ce3adf43SDag-Erling Smørgrav      add(words[++w])
107ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Dq$")) {
108ce3adf43SDag-Erling Smørgrav      skip=1
109ce3adf43SDag-Erling Smørgrav      add("``")
110ce3adf43SDag-Erling Smørgrav      add(words[++w])
111ce3adf43SDag-Erling Smørgrav      while(w<nwords&&!match(words[w+1],"^[\\.,]"))
112ce3adf43SDag-Erling Smørgrav	add(OFS words[++w])
113ce3adf43SDag-Erling Smørgrav      add("''")
114ce3adf43SDag-Erling Smørgrav      if(!nospace&&match(words[w+1],"^[\\.,]"))
115ce3adf43SDag-Erling Smørgrav	nospace=1
116ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Sq|Ql$")) {
117ce3adf43SDag-Erling Smørgrav      skip=1
118ce3adf43SDag-Erling Smørgrav      add("`" words[++w] "'")
119ce3adf43SDag-Erling Smørgrav      if(!nospace&&match(words[w+1],"^[\\.,]"))
120ce3adf43SDag-Erling Smørgrav	nospace=1
121ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Oo$")) {
122ce3adf43SDag-Erling Smørgrav      skip=1
123ce3adf43SDag-Erling Smørgrav      extopt=1
124ce3adf43SDag-Erling Smørgrav      if(!nospace)
125ce3adf43SDag-Erling Smørgrav	nospace=1
126ce3adf43SDag-Erling Smørgrav      add("[")
127ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Oc$")) {
128ce3adf43SDag-Erling Smørgrav      skip=1
129ce3adf43SDag-Erling Smørgrav      extopt=0
130ce3adf43SDag-Erling Smørgrav      add("]")
131ce3adf43SDag-Erling Smørgrav    }
132ce3adf43SDag-Erling Smørgrav    if(!skip) {
133ce3adf43SDag-Erling Smørgrav      if(!nospace&&length(line)&&!(match(line," $")||prenl))
134ce3adf43SDag-Erling Smørgrav	add(OFS)
135ce3adf43SDag-Erling Smørgrav      if(nospace==1)
136ce3adf43SDag-Erling Smørgrav	nospace=0
137ce3adf43SDag-Erling Smørgrav    }
138ce3adf43SDag-Erling Smørgrav    if(match(words[w],"^Dd$")) {
139ce3adf43SDag-Erling Smørgrav      if(match(words[w+1],"^\\$Mdocdate:")) {
140ce3adf43SDag-Erling Smørgrav        w++;
141ce3adf43SDag-Erling Smørgrav        if(match(words[w+4],"^\\$$")) {
142ce3adf43SDag-Erling Smørgrav          words[w+4] = ""
143ce3adf43SDag-Erling Smørgrav        }
144ce3adf43SDag-Erling Smørgrav      }
145ce3adf43SDag-Erling Smørgrav      date=wtail()
146ce3adf43SDag-Erling Smørgrav      next
147ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Dt$")) {
148ce3adf43SDag-Erling Smørgrav      id=wtail()
149ce3adf43SDag-Erling Smørgrav      next
150ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Ux$")) {
151ce3adf43SDag-Erling Smørgrav      add("UNIX")
152ce3adf43SDag-Erling Smørgrav      skip=1
153ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Ox$")) {
154ce3adf43SDag-Erling Smørgrav      add("OpenBSD")
155ce3adf43SDag-Erling Smørgrav      skip=1
156ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Os$")) {
157ce3adf43SDag-Erling Smørgrav      add(".TH " id " \"" date "\" \"" wtail() "\"")
158ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Sh$")) {
159ce3adf43SDag-Erling Smørgrav      add(".SH")
160ce3adf43SDag-Erling Smørgrav      synopsis=match(words[w+1],"SYNOPSIS")
161ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Xr$")) {
162ce3adf43SDag-Erling Smørgrav      add("\\fB" words[++w] "\\fP(" words[++w] ")" words[++w])
163ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Rs$")) {
164ce3adf43SDag-Erling Smørgrav      split("",refauthors)
165ce3adf43SDag-Erling Smørgrav      nrefauthors=0
166ce3adf43SDag-Erling Smørgrav      reftitle=""
167ce3adf43SDag-Erling Smørgrav      refissue=""
168ce3adf43SDag-Erling Smørgrav      refdate=""
169ce3adf43SDag-Erling Smørgrav      refopt=""
170ce3adf43SDag-Erling Smørgrav      refreport=""
171ce3adf43SDag-Erling Smørgrav      reference=1
172ce3adf43SDag-Erling Smørgrav      next
173ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Re$")) {
174ce3adf43SDag-Erling Smørgrav      prenl++
175ce3adf43SDag-Erling Smørgrav      for(i=nrefauthors-1;i>0;i--) {
176ce3adf43SDag-Erling Smørgrav	add(refauthors[i])
177ce3adf43SDag-Erling Smørgrav	if(i>1)
178ce3adf43SDag-Erling Smørgrav	  add(", ")
179ce3adf43SDag-Erling Smørgrav      }
180ce3adf43SDag-Erling Smørgrav      if(nrefauthors>1)
181ce3adf43SDag-Erling Smørgrav	add(" and ")
182ce3adf43SDag-Erling Smørgrav      if(nrefauthors>0)
183ce3adf43SDag-Erling Smørgrav        add(refauthors[0] ", ")
184ce3adf43SDag-Erling Smørgrav      add("\\fI" reftitle "\\fP")
185ce3adf43SDag-Erling Smørgrav      if(length(refissue))
186ce3adf43SDag-Erling Smørgrav	add(", " refissue)
187ce3adf43SDag-Erling Smørgrav      if(length(refreport)) {
188ce3adf43SDag-Erling Smørgrav	add(", " refreport)
189ce3adf43SDag-Erling Smørgrav      }
190ce3adf43SDag-Erling Smørgrav      if(length(refdate))
191ce3adf43SDag-Erling Smørgrav	add(", " refdate)
192ce3adf43SDag-Erling Smørgrav      if(length(refopt))
193ce3adf43SDag-Erling Smørgrav	add(", " refopt)
194ce3adf43SDag-Erling Smørgrav      add(".")
195ce3adf43SDag-Erling Smørgrav      reference=0
196ce3adf43SDag-Erling Smørgrav    } else if(reference) {
197ce3adf43SDag-Erling Smørgrav      if(match(words[w],"^%A$")) { refauthors[nrefauthors++]=wtail() }
198ce3adf43SDag-Erling Smørgrav      if(match(words[w],"^%T$")) {
199ce3adf43SDag-Erling Smørgrav	reftitle=wtail()
200ce3adf43SDag-Erling Smørgrav	sub("^\"","",reftitle)
201ce3adf43SDag-Erling Smørgrav	sub("\"$","",reftitle)
202ce3adf43SDag-Erling Smørgrav      }
203ce3adf43SDag-Erling Smørgrav      if(match(words[w],"^%N$")) { refissue=wtail() }
204ce3adf43SDag-Erling Smørgrav      if(match(words[w],"^%D$")) { refdate=wtail() }
205ce3adf43SDag-Erling Smørgrav      if(match(words[w],"^%O$")) { refopt=wtail() }
206ce3adf43SDag-Erling Smørgrav      if(match(words[w],"^%R$")) { refreport=wtail() }
207ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Nm$")) {
208ce3adf43SDag-Erling Smørgrav      if(synopsis) {
209ce3adf43SDag-Erling Smørgrav	add(".br")
210ce3adf43SDag-Erling Smørgrav	prenl++
211ce3adf43SDag-Erling Smørgrav      }
212ce3adf43SDag-Erling Smørgrav      n=words[++w]
213ce3adf43SDag-Erling Smørgrav      if(!length(name))
214ce3adf43SDag-Erling Smørgrav	name=n
215ce3adf43SDag-Erling Smørgrav      if(!length(n))
216ce3adf43SDag-Erling Smørgrav	n=name
217ce3adf43SDag-Erling Smørgrav      add("\\fB" n "\\fP")
218ce3adf43SDag-Erling Smørgrav      if(!nospace&&match(words[w+1],"^[\\.,]"))
219ce3adf43SDag-Erling Smørgrav	nospace=1
220ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Nd$")) {
221ce3adf43SDag-Erling Smørgrav      add("\\- " wtail())
222ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Fl$")) {
223ce3adf43SDag-Erling Smørgrav      add("\\fB\\-" words[++w] "\\fP")
224ce3adf43SDag-Erling Smørgrav      if(!nospace&&match(words[w+1],"^[\\.,]"))
225ce3adf43SDag-Erling Smørgrav	nospace=1
226ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Ar$")) {
227ce3adf43SDag-Erling Smørgrav      add("\\fI")
228ce3adf43SDag-Erling Smørgrav      if(w==nwords)
229ce3adf43SDag-Erling Smørgrav	add("file ...\\fP")
230ce3adf43SDag-Erling Smørgrav      else {
231ce3adf43SDag-Erling Smørgrav	add(words[++w] "\\fP")
232ce3adf43SDag-Erling Smørgrav	while(match(words[w+1],"^\\|$"))
233ce3adf43SDag-Erling Smørgrav	  add(OFS words[++w] " \\fI" words[++w] "\\fP")
234ce3adf43SDag-Erling Smørgrav      }
235ce3adf43SDag-Erling Smørgrav      if(!nospace&&match(words[w+1],"^[\\.,]"))
236ce3adf43SDag-Erling Smørgrav	nospace=1
237ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Cm$")) {
238ce3adf43SDag-Erling Smørgrav      add("\\fB" words[++w] "\\fP")
239ce3adf43SDag-Erling Smørgrav      while(w<nwords&&match(words[w+1],"^[\\.,:;)]"))
240ce3adf43SDag-Erling Smørgrav	add(words[++w])
241ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Op$")) {
242ce3adf43SDag-Erling Smørgrav      option=1
243ce3adf43SDag-Erling Smørgrav      if(!nospace)
244ce3adf43SDag-Erling Smørgrav	nospace=1
245ce3adf43SDag-Erling Smørgrav      add("[")
246ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Pp$")) {
247ce3adf43SDag-Erling Smørgrav      prenl++
248ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^An$")) {
249ce3adf43SDag-Erling Smørgrav      prenl++
250ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Ss$")) {
251ce3adf43SDag-Erling Smørgrav      add(".SS")
252ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Pa$")&&!option) {
253ce3adf43SDag-Erling Smørgrav      add("\\fI")
254ce3adf43SDag-Erling Smørgrav      w++
255ce3adf43SDag-Erling Smørgrav      if(match(words[w],"^\\."))
256ce3adf43SDag-Erling Smørgrav	add("\\&")
257ce3adf43SDag-Erling Smørgrav      add(words[w] "\\fP")
258ce3adf43SDag-Erling Smørgrav      while(w<nwords&&match(words[w+1],"^[\\.,:;)]"))
259ce3adf43SDag-Erling Smørgrav	add(words[++w])
260ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Dv$")) {
261ce3adf43SDag-Erling Smørgrav      add(".BR")
262ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Em|Ev$")) {
263ce3adf43SDag-Erling Smørgrav      add(".IR")
264ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Pq$")) {
265ce3adf43SDag-Erling Smørgrav      add("(")
266ce3adf43SDag-Erling Smørgrav      nospace=1
267ce3adf43SDag-Erling Smørgrav      parens=1
268ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Aq$")) {
269ce3adf43SDag-Erling Smørgrav      add("<")
270ce3adf43SDag-Erling Smørgrav      nospace=1
271ce3adf43SDag-Erling Smørgrav      angles=1
272ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^S[xy]$")) {
273ce3adf43SDag-Erling Smørgrav      add(".B " wtail())
274ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Ic$")) {
275ce3adf43SDag-Erling Smørgrav      plain=1
276ce3adf43SDag-Erling Smørgrav      add("\\fB")
277ce3adf43SDag-Erling Smørgrav      while(w<nwords) {
278ce3adf43SDag-Erling Smørgrav	w++
279ce3adf43SDag-Erling Smørgrav	if(match(words[w],"^Op$")) {
280ce3adf43SDag-Erling Smørgrav	  w++
281ce3adf43SDag-Erling Smørgrav	  add("[")
282ce3adf43SDag-Erling Smørgrav	  words[nwords]=words[nwords] "]"
283ce3adf43SDag-Erling Smørgrav	}
284ce3adf43SDag-Erling Smørgrav	if(match(words[w],"^Ar$")) {
285ce3adf43SDag-Erling Smørgrav	  add("\\fI" words[++w] "\\fP")
286ce3adf43SDag-Erling Smørgrav	} else if(match(words[w],"^[\\.,]")) {
287ce3adf43SDag-Erling Smørgrav	  sub(" $","",line)
288ce3adf43SDag-Erling Smørgrav	  if(plain) {
289ce3adf43SDag-Erling Smørgrav	    add("\\fP")
290ce3adf43SDag-Erling Smørgrav	    plain=0
291ce3adf43SDag-Erling Smørgrav	  }
292ce3adf43SDag-Erling Smørgrav	  add(words[w])
293ce3adf43SDag-Erling Smørgrav	} else {
294ce3adf43SDag-Erling Smørgrav	  if(!plain) {
295ce3adf43SDag-Erling Smørgrav	    add("\\fB")
296ce3adf43SDag-Erling Smørgrav	    plain=1
297ce3adf43SDag-Erling Smørgrav	  }
298ce3adf43SDag-Erling Smørgrav	  add(words[w])
299ce3adf43SDag-Erling Smørgrav	}
300ce3adf43SDag-Erling Smørgrav	if(!nospace)
301ce3adf43SDag-Erling Smørgrav	  add(OFS)
302ce3adf43SDag-Erling Smørgrav      }
303ce3adf43SDag-Erling Smørgrav      sub(" $","",line)
304ce3adf43SDag-Erling Smørgrav      if(plain)
305ce3adf43SDag-Erling Smørgrav	add("\\fP")
306ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Bl$")) {
307ce3adf43SDag-Erling Smørgrav      oldoptlist=optlist
308ce3adf43SDag-Erling Smørgrav      if(match(words[w+1],"-bullet"))
309ce3adf43SDag-Erling Smørgrav	optlist=1
310ce3adf43SDag-Erling Smørgrav      else if(match(words[w+1],"-enum")) {
311ce3adf43SDag-Erling Smørgrav	optlist=2
312ce3adf43SDag-Erling Smørgrav	enum=0
313ce3adf43SDag-Erling Smørgrav      } else if(match(words[w+1],"-tag"))
314ce3adf43SDag-Erling Smørgrav	optlist=3
315ce3adf43SDag-Erling Smørgrav      else if(match(words[w+1],"-item"))
316ce3adf43SDag-Erling Smørgrav	optlist=4
317ce3adf43SDag-Erling Smørgrav      else if(match(words[w+1],"-bullet"))
318ce3adf43SDag-Erling Smørgrav	optlist=1
319ce3adf43SDag-Erling Smørgrav      w=nwords
320ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^El$")) {
321ce3adf43SDag-Erling Smørgrav      optlist=oldoptlist
322*ca86bcf2SDag-Erling Smørgrav      if(!optlist)
323*ca86bcf2SDag-Erling Smørgrav        add(".PP")
324ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Bk$")) {
325ce3adf43SDag-Erling Smørgrav      if(match(words[w+1],"-words")) {
326ce3adf43SDag-Erling Smørgrav	w++
327ce3adf43SDag-Erling Smørgrav	breakw=1
328ce3adf43SDag-Erling Smørgrav      }
329ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Ek$")) {
330ce3adf43SDag-Erling Smørgrav      breakw=0
331ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^It$")&&optlist) {
332ce3adf43SDag-Erling Smørgrav      if(optlist==1)
333ce3adf43SDag-Erling Smørgrav	add(".IP \\(bu")
334ce3adf43SDag-Erling Smørgrav      else if(optlist==2)
335ce3adf43SDag-Erling Smørgrav	add(".IP " ++enum ".")
336ce3adf43SDag-Erling Smørgrav      else if(optlist==3) {
337ce3adf43SDag-Erling Smørgrav	add(".TP")
338ce3adf43SDag-Erling Smørgrav	prenl++
339ce3adf43SDag-Erling Smørgrav	if(match(words[w+1],"^Pa$|^Ev$")) {
340ce3adf43SDag-Erling Smørgrav	  add(".B")
341ce3adf43SDag-Erling Smørgrav	  w++
342ce3adf43SDag-Erling Smørgrav	}
343ce3adf43SDag-Erling Smørgrav      } else if(optlist==4)
344ce3adf43SDag-Erling Smørgrav	add(".IP")
345ce3adf43SDag-Erling Smørgrav    } else if(match(words[w],"^Sm$")) {
346ce3adf43SDag-Erling Smørgrav      if(match(words[w+1],"off"))
347ce3adf43SDag-Erling Smørgrav	nospace=2
348ce3adf43SDag-Erling Smørgrav      else if(match(words[w+1],"on"))
349ce3adf43SDag-Erling Smørgrav	nospace=0
350ce3adf43SDag-Erling Smørgrav      w++
351ce3adf43SDag-Erling Smørgrav    } else if(!skip) {
352ce3adf43SDag-Erling Smørgrav      add(words[w])
353ce3adf43SDag-Erling Smørgrav    }
354ce3adf43SDag-Erling Smørgrav  }
355ce3adf43SDag-Erling Smørgrav  if(match(line,"^\\.[^a-zA-Z]"))
356ce3adf43SDag-Erling Smørgrav    sub("^\\.","",line)
357ce3adf43SDag-Erling Smørgrav  if(parens)
358ce3adf43SDag-Erling Smørgrav    add(")")
359ce3adf43SDag-Erling Smørgrav  if(angles)
360ce3adf43SDag-Erling Smørgrav    add(">")
361ce3adf43SDag-Erling Smørgrav  if(option)
362ce3adf43SDag-Erling Smørgrav    add("]")
363ce3adf43SDag-Erling Smørgrav  if(ext&&!extopt&&!match(line," $"))
364ce3adf43SDag-Erling Smørgrav    add(OFS)
365ce3adf43SDag-Erling Smørgrav  if(!ext&&!extopt&&length(line)) {
366ce3adf43SDag-Erling Smørgrav    print line
367ce3adf43SDag-Erling Smørgrav    prenl=0
368ce3adf43SDag-Erling Smørgrav    line=""
369ce3adf43SDag-Erling Smørgrav  }
370ce3adf43SDag-Erling Smørgrav}
371