#!/bin/nawk
# defining macros - eat them
/^\.de.*/ {
getline
while ( $0 !~ "^\.\.$" )
{
getline
}
getline
}
# eat [nt]roff comments
$0 ~ /['.][\/\\]"/ || $1 == "'" { next }
# remove sidebar macros
$1 == ".VS" || $1 == ".VE" || $1 == ".AS" { next }
# handle first .SH as special case - .SH NAME
/^.SH *NAME */ {
getline
while ( $0 ~ /\.[a-zA-Z].*/ ) # eat dot-cmd following title
{
getline
}
print "
" $0 ""
print "" $0 "
\n"
next
#-e 's/^.SH *NAME */{N;s#.*\n\(.*\)#\1
#;}' \
}
# Convert .IP Paragraphs upto next .cmd to hanging indents
# using
pairs without intervening
/^\.IP */ {
if ( inIP > 0 )
{
print ""
}
inIP = 1
startIP = 1
print ""
match($0, /".*"/ )
if ( RSTART > 0 )
{
arg = substr( $0, RSTART+1, RLENGTH-2)
print "- " arg
}
else if ( length( $2 ) > 0 )
{
print "
- " $2
}
next
}
$0 ~ /^\.[a-zA-Z]*/ && inIP > 0 {
inIP = 0
print "
"
}
# Convert
# .TP
# Line1
# line 2 - n
# .Any
#
# to
#
# - Line1
#
- lines 2 - n
#
-
/^\.TP */ {
if ( inTP > 0 )
{
print "
"
}
inTP = 1
print ""
next
}
inTP == 1 && $1 !~ /\.[a-zA-Z]*/ {
print "- " $0
inTP = 2
next
}
inTP == 2 && $1 !~ /\.[a-zA-Z]*/{
print "" # Belt and suspenders
print "
- " $0
inTP = 3
next
}
$0 ~ /^\.[a-zA-Z]*/ && inTP > 0 {
inTP = 0
print "
"
}
$1 == ".AP" {
$1=""
print ""
print "- " $2 "\t\t" $3 "\t\t("$4")"
inTP = 2
next
}
# make a blank line
$1 == ".sp" {
print "
"
next # print "
"
}
$1 == ".ta" { next }
# just pass everything else on
{
if ( startIP > 0 )
{
print " - " $0
startIP = 0
}
else
{
print $0
}
}