#!/bin/bash
#
# create-document - create document using templates in templates/ directory
#
# Developed by Lubomir Host 'rajo' <rajo AT platon.sk>
# Copyright (c) 2003-2005 Platon SDG, http://platon.sk/
# Licensed under terms of GNU General Public License.
# All rights reserved.
#
# $Platon: Platon.SK/office/_scripts/create-document,v 1.15 2005-09-18 00:57:53 rajo Exp $
# Uncomment following 2 lines for debugging
#DEBUG="echo"
#NODEBUG=":"
DATE_SHORT="`date '+%y-%m-%d'`";
DATE_LONG="`date '+%Y-%m-%d'`";
DATE=$DATE_LONG;
YEAR="`date '+%Y'`";
PERCENT_SIGN="%" # only for testing sed
HERE=`pwd`
MYSELF="platos/_scripts/create-document"
dirname="$1"
filename="$2"
model="$3"
STYLESHEET="$4"
PREFIX="$5"
APPEND_DIRNAME="$6"
usage()
{ # {{{
echo
echo "Usage [path] [filename] [naming schema] [stylesheet] [prefix] [append dirname?]"
echo
exit 1
} # }}}
generate_sed_cmd()
{ # {{{
cmd=""
for key in $*; do
cmd="$cmd s%@$key@%"`echo "${!key}" | sed -e 's/%/\\\\%/g;' `"%g;";
done
echo "$cmd"
} # }}}
if [ -z "$TOP_DIR" ]; then
echo '$TOP_DIR is empty, using current directory...'
TOP_DIR="."
fi
# document path {{{
if [ -z "$dirname" ]; then
echo -en "Enter name of directory for document withouth date string []: "
read dirname
if [ -z "$dirname" ]; then
echo "Can't create document with empty name"
exit 1;
fi
fi
# }}}
# document filename {{{
if [ -z "$filename" ]; then
echo -en "Enter name of file withouth date string and extension []: "
read filename
if [ -z "$filename" ]; then
echo "Can't create document with empty name"
exit 1;
fi
fi
filename=${filename%.tex}
# create available options:
file=`basename $filename`
f_dir=`dirname $filename`
dirname="$dirname/$f_dir"
dirname=`$TOP_DIR/_scripts/path-cleanup "$dirname" | sed -e 's%^/%%g;'`
d_dir=`dirname $dirname`
l_dir=`basename $dirname`
out=""
out_1="$d_dir/$DATE-$l_dir/$DATE-$file.tex"
out_2="$d_dir/$DATE-$l_dir/$file-$DATE.tex"
out_3="$d_dir/$DATE-$l_dir/$file.tex"
out_4="$d_dir/$l_dir/$DATE-$file.tex"
out_5="$d_dir/$l_dir/$file-$DATE.tex"
out_6="$d_dir/$l_dir/$file.tex"
# }}}
# which naming sheme? {{{
model=`echo $model | sed -e 's%^\(.\).*%\1%g;'`
which_out="out_$model"
out="${!which_out}"
# }}}
#
# Choose filename
# {{{
while [ -z "$out" ]; do
out=""
out_1="$d_dir/$DATE-$l_dir/$DATE-$file.tex"
out_2="$d_dir/$DATE-$l_dir/$file-$DATE.tex"
out_3="$d_dir/$DATE-$l_dir/$file.tex"
out_4="$d_dir/$l_dir/$DATE-$file.tex"
out_5="$d_dir/$l_dir/$file-$DATE.tex"
out_6="$d_dir/$l_dir/$file.tex"
echo "Available filename models:";
echo " [P] Prints *.tex files listing.";
echo " [D] Toggle date format"
for model in 1 2 3 4 5 6; do
which_out="out_$model"
echo " [$model] ${!which_out}"
done
echo -en "Please select action or choose filename model []: ";
read model
# take first character from user input
model=`echo $model | sed -e 's%^\(.\).*%\1%g;'`
case "$model" in
[pP])
echo "-----<% Start of listing files %>-----"
ls -1 $d_dir/$DATE-$l_dir/*.tex $d_dir/$l_dir/*.tex 2> /dev/null ;
echo "-----<% End of listing files %>-----"
;;
[dD])
echo -n "Changed date format from '$DATE' to";
if [ "$DATE" = "$DATE_LONG" ]; then
DATE=$DATE_SHORT;
else
DATE=$DATE_LONG;
fi
echo " '$DATE'.";
;;
[1-6])
which_out="out_$model"
out="${!which_out}"
;;
*)
echo "Unsupported model: $model";
;;
esac
done
# }}}
dirname=`dirname $out`
filename=`basename $out`
if [ -f "$out" ]; then
echo
echo "Document '$out' already exists, please use another name"
exit 1;
fi
filename=${filename%.tex}
FILENAME=$filename
if [ -z "$STYLESHEET" ]; then
echo -en "Please choose stylesheet [platon]: ";
read STYLESHEET
STYLESHEET="${STYLESHEET:-platon}"
fi
if [ -z "$PREFIX" ]; then
echo -en "Please specify prefix of your documents if you wish to use it: ";
read PREFIX
fi
if [ -z "$APPEND_DIRNAME" ]; then
echo -en "Append directory name to output files? ";
read APPEND_DIRNAME
fi
echo "Creating document '$out'"
$DEBUG mkdir -p "$dirname"
#
# Create recursive Makefiles, SUBDIRS, .cvsignore etc...
# {{{
pathdir=""
echo " STEP 1: Creating directory structure:";
for DIRNAME in `echo "$dirname" | sed 's%^\./%%g; s%/% %g;'`; do
$NODEBUG cd $DIRNAME
updir="$pathdir"
pathdir="$pathdir/$DIRNAME"
TOP_DIR="$TOP_DIR/.."
TEMPLATES="$TOP_DIR/_templates"
STYLESHEET_DIR="$TOP_DIR/_stylesheets/$STYLESHEET" # is not the same STYLESHEET_DIR as in Rules.make
for file in Makefile .cvsignore; do
if [ -f "$file" ]; then
echo " File '.$pathdir/$file' already exists, skipping..."
else
echo " Creating file '.$pathdir/$file'"
$NODEBUG sed -e "`generate_sed_cmd APPEND_DIRNAME PREFIX STYLESHEET DATE YEAR TOP_DIR STYLESHEET_DIR DIRNAME FILENAME PERCENT_SIGN`" \
"$TEMPLATES/$file" > "$file"
fi
done
# check directory name is not already there
if [ "` grep -E \"^$DIRNAME\$\" ../SUBDIRS 2>/dev/null `" ]; then
echo " Checking '$DIRNAME' in .$updir/SUBDIRS file.";
else
echo " Adding '$DIRNAME' into .$updir/SUBDIRS file.";
$NODEBUG echo "# Added by $MYSELF, $DATE_LONG" >> ../SUBDIRS;
$NODEBUG echo "$DIRNAME" >> ../SUBDIRS;
fi
done
# }}}
#
# now we are in directory, where document should by located
#
echo " STEP 2: Creating document .$pathdir/$filename.tex.";
$NODEBUG sed -e "`generate_sed_cmd APPEND_DIRNAME PREFIX STYLESHEET DATE YEAR TOP_DIR STYLESHEET_DIR DIRNAME FILENAME PERCENT_SIGN`" \
"$STYLESHEET_DIR/template.tex" > "$filename.tex"
echo " STEP 3: Adding '$filename.pdf' into .$pathdir/pdf_OUTPUT file.";
$NODEBUG echo "# Added by $MYSELF, $DATE_LONG" >> pdf_OUTPUT;
$NODEBUG echo "$filename.pdf" >> pdf_OUTPUT;
echo " STEP 4: Adding '$filename.ps' into .$pathdir/ps__OUTPUT file.";
$NODEBUG echo "# Added by $MYSELF, $DATE_LONG" >> ps__OUTPUT;
$NODEBUG echo "$filename.ps" >> ps__OUTPUT;
echo " STEP 5: Adding '$filename.html' into .$pathdir/htm_OUTPUT file.";
$NODEBUG echo "# Added by $MYSELF, $DATE_LONG" >> htm_OUTPUT;
$NODEBUG echo "$filename.html" >> htm_OUTPUT;
echo " STEP 6: Adding '$filename.rtf' into .$pathdir/rtf_OUTPUT file.";
$NODEBUG echo "# Added by $MYSELF, $DATE_LONG" >> rtf_OUTPUT;
$NODEBUG echo "$filename.rtf" >> rtf_OUTPUT;
echo "Now you have to add files in directory '.$pathdir' into CVS and commit them."
# required, if script is sourced by current shell
cd $HERE
# vim: ft=sh
# vim600: fdm=marker fdc=3 fdl=0
Platon Group <platon@platon.sk> http://platon.sk/
|