diff options
Diffstat (limited to 'autoopts/tpl/texi2mdoc.sh')
-rwxr-xr-x | autoopts/tpl/texi2mdoc.sh | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/autoopts/tpl/texi2mdoc.sh b/autoopts/tpl/texi2mdoc.sh new file mode 100755 index 0000000..6c1325e --- /dev/null +++ b/autoopts/tpl/texi2mdoc.sh @@ -0,0 +1,196 @@ +#! /bin/sh + +## texi2mdoc.sh -- script to convert texi-isms to mdoc-isms +## +## Time-stamp: "2012-05-13 15:45:06 bkorb" +## +## This file is part of AutoOpts, a companion to AutoGen. +## AutoOpts is free software. +## AutoOpts is Copyright (c) 1992-2012 Bruce Korb - all rights reserved +## +## AutoOpts is available under any one of two licenses. The license +## in use must be one of these two and the choice is under the control +## of the user of the license. +## +## The GNU Lesser General Public License, version 3 or later +## See the files "COPYING.lgplv3" and "COPYING.gplv3" +## +## The Modified Berkeley Software Distribution License +## See the file "COPYING.mbsd" +## +## These files have the following md5sums: +## +## 43b91e8ca915626ed3818ffb1b71248b COPYING.gplv3 +## 06a1a2e4760c90ea5e1dad8dfaac4d39 COPYING.lgplv3 +## 66a5cedaf62c4b2637025f049f9b826f COPYING.mbsd + +## This "library" converts texi-isms into man-isms. It gets included +## by the man page template at the point where texi-isms might start appearing +## and then "emit-man-text" is invoked when all the text has been assembled. +## +## Display the command line prototype, +## based only on the argument processing type. +## +## And run the entire output through "sed" to convert texi-isms + +# /bin/sh on Solaris is too horrible for words +# +case "$0" in +/bin/sh ) test -x /usr/xpg4/bin/sh && exec /usr/xpg4/bin/sh ${1+"$@"} ;; +esac + +parent_pid=$$ +prog=`basename $0 .sh` + +die() { + echo "$prog error: $*" >&2 + kill -TERM $parent_pid + sleep 1 + kill -9 $parent_pid + sleep 1 + exit 1 +} + +do_example() { + echo '.Bd -literal -offset indent' + res=0 + + while : + do + IFS='' read -r line || die "incomplete example" + case "$line" in + '@end '*example ) break ;; + esac + + do_line + done + echo '.Ed' + return $res +} + +do_noindent() { + return 0 +} + +do_enumerate() { + echo '.Bl -enum -compact' + + while : + do + IFS='' read -r line || die "incomplete enumerate" + case "$line" in + '@end '*enumerate ) break ;; + esac + + do_line + done + echo '.El' + + return $res +} + +do_end() { + die "Improper ending: $line" +} + +do_table() { + echo '.Bl -tag -width 8n' + + while : + do + IFS='' read -r line || die "incomplete table" + case "$line" in + '@end '*table ) break ;; + esac + + do_line + done + echo '.El' + + return $res +} + +do_itemize() { + echo '.Bl -bullet -compact' + + while : + do + IFS='' read -r line || die "incomplete itemize" + case "$line" in + '@end '*itemize ) break ;; + esac + + do_line + done + echo '.El' + + return $res +} + +do_item() { + echo "$line" | sed 's/@item/.It/' +} + +do_line() { + case "${line}" in + '@subheading'* ) echo "$line" | sed 's/@subheading/.SS /' ;; + '@*' ) echo .br ;; + '' ) echo .sp ;; + '@'[{}]* ) echo "${line}" | sed 's/@\([{}]\)/\1/g' ;; + '@'* ) + typ=`echo "$line" | egrep '@[a-z]*\{'` + test ${#typ} -gt 0 && echo "$line" && return 0 + typ=`echo "$line" | sed 's/@ *//;s/[^a-z].*//'` + eval do_${typ} || die "do_${typ} failed" + ;; + + * ) + echo "$line" + ;; + esac + return 0 +} + + +nl=' +' +sedcmd= +bracket='{\([^}]*\)}' +replB='%BACKSLASH%fB\1%BACKSLASH%fP' +replI='%BACKSLASH%fI\1%BACKSLASH%fP' + +for f in code command var env dvn samp option strong +do + sedcmd="${sedcmd}s;@${f}${bracket};${replB};g${nl}" +done + +for f in i file emph kbd key abbr acronym email +do + sedcmd="${sedcmd}s;@${f}${bracket};${replI};g${nl}" +done + +fixfont="${sedcmd}"' + s;@pxref{\([^}]*\)};see: \1;g + s;@xref{\([^}]*\)};see: \1;g + s/@\([{@}]\)/\1/g + s,^[@$]\*$,.br, + s/\*\([a-zA-Z0-9:~=_ -]*\)\*/\\fB\1\\fP/g + s/``\([a-zA-Z0-9:~+=_ -]*\)'\'\''/\\(lq\1\\(rq/g + s/\([^\\]\)-/\1\\-/g + s/\([^\\]\)-/\1\\-/g + /^\.Bl /s/ \\-/ -/g + /^\.Bd /s/ \\-/ -/g + /^\.in /s/ \\-/ -/g + s#%BACKSLASH%#\\#g'" + s/^'/\\\\'/ + /^\$/d" +readonly fixfont + +{ + while IFS='' read -r line + do + do_line + done +} | sed "${fixfont}" + +exit 0 |