LDP/LDP/guide/docbook/abs-guide/maned.sh

149 lines
4.0 KiB
Bash

#!/bin/bash
# maned.sh
# A rudimentary man page editor
# Version: 0.1 (Alpha, probably buggy)
# Author: Mendel Cooper <thegrendel.abs@gmail.com>
# Reldate: 16 June 2008
# License: GPL3
savefile= # Global, used in multiple functions.
E_NOINPUT=90 # User input missing (error). May or may not be critical.
# =========== Markup Tags ============ #
TopHeader=".TH"
NameHeader=".SH NAME"
SyntaxHeader=".SH SYNTAX"
SynopsisHeader=".SH SYNOPSIS"
InstallationHeader=".SH INSTALLATION"
DescHeader=".SH DESCRIPTION"
OptHeader=".SH OPTIONS"
FilesHeader=".SH FILES"
EnvHeader=".SH ENVIRONMENT"
AuthHeader=".SH AUTHOR"
BugsHeader=".SH BUGS"
SeeAlsoHeader=".SH SEE ALSO"
BOLD=".B"
# Add more tags, as needed.
# See groff docs for markup meanings.
# ==================================== #
start ()
{
clear # Clear screen.
echo "ManEd"
echo "-----"
echo
echo "Simple man page creator"
echo "Author: Mendel Cooper"
echo "License: GPL3"
echo; echo; echo
}
progname ()
{
echo -n "Program name? "
read name
echo -n "Manpage section? [Hit RETURN for default (\"1\") ] "
read section
if [ -z "$section" ]
then
section=1 # Most man pages are in section 1.
fi
if [ -n "$name" ]
then
savefile=""$name"."$section"" # Filename suffix = section.
echo -n "$1 " >>$savefile
name1=$(echo "$name" | tr a-z A-Z) # Change to uppercase,
#+ per man page convention.
echo -n "$name1" >>$savefile
else
echo "Error! No input." # Mandatory input.
exit $E_NOINPUT # Critical!
# Exercise: The script-abort if no filename input is a bit clumsy.
# Rewrite this section so a default filename is used
#+ if no input.
fi
echo -n " \"$section\"">>$savefile # Append, always append.
echo -n "Version? "
read ver
echo -n " \"Version $ver \"">>$savefile
echo >>$savefile
echo -n "Short description [0 - 5 words]? "
read sdesc
echo "$NameHeader">>$savefile
echo ""$BOLD" "$name"">>$savefile
echo "\- "$sdesc"">>$savefile
}
fill_in ()
{ # This function more or less copied from "pad.sh" script.
echo -n "$2? " # Get user input.
read var # May paste (a single line only!) to fill in field.
if [ -n "$var" ]
then
echo "$1 " >>$savefile
echo -n "$var" >>$savefile
else # Don't append empty field to file.
return $E_NOINPUT # Not critical here.
fi
echo >>$savefile
}
end ()
{
clear
echo -n "Would you like to view the saved man page (y/n)? "
read ans
if [ "$ans" = "n" -o "$ans" = "N" ]; then exit; fi
exec less "$savefile" # Exit script and hand off control to "less" ...
#+ ... which formats for viewing man page source.
}
# ---------------------------------------- #
start
progname "$TopHeader"
fill_in "$SynopsisHeader" "Synopsis"
fill_in "$DescHeader" "Long description"
# May paste in *single line* of text.
fill_in "$OptHeader" "Options"
fill_in "$FilesHeader" "Files"
fill_in "$AuthHeader" "Author"
fill_in "$BugsHeader" "Bugs"
fill_in "$SeeAlsoHeader" "See also"
# fill_in "$OtherHeader" ... as necessary.
end # ... exit not needed.
# ---------------------------------------- #
# Note that the generated man page will usually
#+ require manual fine-tuning with a text editor.
# However, it's a distinct improvement upon
#+ writing man source from scratch
#+ or even editing a blank man page template.
# The main deficiency of the script is that it permits
#+ pasting only a single text line into the input fields.
# This may be a long, cobbled-together line, which groff
# will automatically wrap and hyphenate.
# However, if you want multiple (newline-separated) paragraphs,
#+ these must be inserted by manual text editing on the
#+ script-generated man page.
# Exercise (difficult): Fix this!
# This script is not nearly as elaborate as the
#+ full-featured "manedit" package
#+ http://freshmeat.net/projects/manedit/
#+ but it's much easier to use.