diff options
Diffstat (limited to '')
-rwxr-xr-x | mantools/srctoman | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/mantools/srctoman b/mantools/srctoman new file mode 100755 index 0000000..9102201 --- /dev/null +++ b/mantools/srctoman @@ -0,0 +1,214 @@ +#!/bin/sh + +# srctoman - extract manual page from source file comment + +# @(#) srctoman.sh 1.2 11/4/89 15:56:22 + +LANG= + +# process arguments + +while : +do + case $1 in + [0-9]) SECT=$1;; + -) LANG=$1; B='[#:]';; + -awk) LANG=$1; B='#';; + -c) LANG=$1; B='\/\*';; + -f) LANG=$1; B='[Cc]';; + -mk) LANG=$1; B='#';; + -n|-t) LANG=$1; B='\\"';; + -p) LANG=$1; B='{';; + -r) LANG=$1; B='#';; + -C) LANG=$1; B=$2; shift;; + -*) ERROR="unknown option: $1"; break;; + "") ERROR="missing file argument"; break;; + *) break;; + esac + shift +done + +# check error status + +case $ERROR in +"") ;; + *) echo "$0: $ERROR" 1>&2 + echo "usage: $0 [-|-awk|-c|-f|-mk|-n|-p|-t|-r|-C] [section] file(s)" 1>&2; exit 1;; +esac + +# set up for file suffix processing + +case $LANG in +"") sh='[:#]'; r='#'; rh=$r; awk='#'; mk='#'; + c='\/\*'; h=$c; y=$c; l=$c; + f='[Cc]'; fh=$f; p='{'; ph=$p; + ms='\\"'; nr=$ms; mn=$ms; man=$ms; +esac + +# extract comments + +for i in $* +do + case $LANG in + "") eval B\="\$`expr $i : '.*\.\([^.]*\)$'`" + test "$B" || { echo "$0: unknown suffix: $i; assuming c" 1>&2; B=$c; } + esac + sed ' + /^'"$B"'++/,/^'"$B"'--/!d + /^'"$B"'++/d + /^'"$B"'--/d + s/[ ]*$// + /^'"$B"' \([A-Z]\)/{ + s//\1/ + /^NAME[ ]*$/{ + N + s/^.*\n'"$B"'[ ]*// + h + y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ + s/^.*$/.TH & '"$SECT"'\ +.ad\ +.fi\ +.SH NAME/ + p + g + s/[ ][ ]*[0-9][ ]*$// + a\ +\\- + p + d + } + /^SUMMARY/d + /^DESCRIPTION/s//.SH &\ +.ad\ +.fi/ + /^BUGS/s//.SH &\ +.ad\ +.fi/ + /^DIAGNOSTICS/s//.SH &\ +.ad\ +.fi/ + /^HISTORY/s//.SH &\ +.ad\ +.fi/ + /^[A-Z][A-Z][A-Z][^a-z]*$/s//.SH "&"\ +.na\ +.nf/ + p + d + } + s/^'"$B"' *// + s/^ // + s/^[ ]*$// + /^\\"/d + /^\./{ + s/\([^ ]\)-/\1\\-/g + } + /^'"'"'/{ + s/^/\\\&/ + } + /^[^.]/{ + s/-/\\-/g + } +' $i +done | expand + +exit + +#++ +# NAME +# srctoman 1 +# SUMMARY +# extract manual page from source file comment +# PACKAGE +# sdetools +# SYNOPSIS +# srctoman [-|-awk|-c|-f|-mk|-m|-n|-p|-t|-r|-C] [section] file(s) +# DESCRIPTION +# \fIsrctoman\fR converts comments in various programming languages to +# UNIX-style manual pages. +# The command processes comments in the style of newsrc(1); +# its standard output is suitable for formatting with nroff(1) or +# troff(1) using the "-man" macro package. +# Typically, srctoman is invoked from make(1) scripts. +# +# Source files are processed in the indicated order; if no +# files are specified the command produces no output. +# +# The source file language can be specified through a command-line +# option, or can be implied by the filename suffix. +# The expected start-of-comment symbol is shown in the last column. +# +# .nf +# .ft C + option language comment + + - shell [:#] + -awk awk # + -c c /* + -f fortran [Cc] + -mk make # + -n nroff \\" + -p pascal { + -t troff \\" + -r ratfor # + -C any language next argument +# + suffix language comment + + .awk awk # + .c c /* + .f fortran [Cc] + .fh fortran [Cc] + .h c /* + .l lex /* + .man nroff,troff \\" + .mk make # + .me nroff,troff \\" + .ms nroff,troff \\" + .nr nroff,troff \\" + .p pascal { + .ph pascal { + .r ratfor # + .rh ratfor # + .sh shell [:#] + .y yacc /* +# .ft +# .PP +# .fi +# +# The required format of comments is discussed below, where SOC +# stands for the start-of-comment symbol of the language being used. +# .IP o +# Start of manual: SOC, followed by `++'. +# .IP o +# Section heading: SOC, blank, section name in upper case. +# .IP o +# All other text: SOC and subsequent blanks or tabs are removed. +# Lines that do not start with SOC are left unchanged (useful for +# inclusion of program text). +# .IP o +# End of manual: SOC, followed by `--'. +# An end-of-comment may follow if the source file language requires this. +# .PP +# The following manual sections receive a special treatment: +# NAME and SUMMARY should appear at the beginning and in +# this order; DESCRIPTION, DIAGNOSTICS and BUGS will be +# right-margin adjusted. +# Other sections may be added freely without confusing srctoman. +# COMMANDS +# sh(1), sed(1), expand(1) +# SEE ALSO +# newsrc(1) +# DIAGNOSTICS +# The program complains if an unknown language is specified +# of if the language cannot be deduced from the file suffix. +# AUTHOR(S) +# W.Z. Venema +# Eindhoven University of Technology +# Department of Mathematics and Computer Science +# Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands +# CREATION DATE +# Fri Jan 17 22:59:27 MET 1986 +# STATUS +# srctoman.sh 1.2 11/4/89 15:56:22 (draft) +#-- |