#!/usr/bin/env bash
#
# Author: Makarius
#
# DESCRIPTION: prepare session root directory
## diagnostics
PRG="$(basename "$0")"
function usage()
{
echo
echo "Usage: isabelle $PRG [OPTIONS] [DIR]"
echo
echo " Options are:"
echo " -d enable document preparation"
echo " -n NAME alternative session name (default: DIR base name)"
echo
echo " Prepare session root DIR (default: current directory)."
echo
exit 1
}
function fail()
{
echo "$1" >&2
exit 2
}
## process command line
# options
DOC=""
NAME=""
while getopts "n:d" OPT
do
case "$OPT" in
d)
DOC="true"
;;
n)
NAME="$OPTARG"
;;
\?)
usage
;;
esac
done
shift $(($OPTIND - 1))
# args
if [ "$#" -eq 0 ]; then
DIR="."
elif [ "$#" -eq 1 ]; then
DIR="$1"
shift
else
usage
fi
## main
mkdir -p "$DIR" || fail "Bad directory: \"$DIR\""
[ -z "$NAME" ] && NAME="$(basename "$(cd "$DIR"; pwd -P)")"
[ -e "$DIR/ROOT" ] && fail "Cannot overwrite existing $DIR/ROOT"
[ "$DOC" = true -a -e "$DIR/document" ] && \
fail "Cannot overwrite existing $DIR/document"
echo
echo "Preparing session \"$NAME\" in \"$DIR\""
# ROOT
echo " creating $DIR/ROOT"
if [ "$DOC" = true ]; then
cat > "$DIR/ROOT" <<EOF
session "$NAME" = "$ISABELLE_LOGIC" +
options [document = pdf, document_output = "output"]
theories [document = false]
(* Foo *)
(* Bar *)
theories
(* Baz *)
document_files
"root.tex"
EOF
else
cat > "$DIR/ROOT" <<EOF
session "$NAME" = "$ISABELLE_LOGIC" +
options [document = false]
theories
(* Foo *)
(* Bar *)
(* Baz *)
EOF
fi
# document directory
if [ "$DOC" = true ]; then
echo " creating $DIR/document/root.tex"
mkdir "$DIR/document" || fail "Bad directory: \"$DIR/document\""
TITLE=$(echo "$NAME" | tr _ - | tr -d '\\')
AUTHOR=$(echo "By $USER" | tr _ - | tr -d '\\')
cat > "$DIR/document/root.tex" <<EOF
\documentclass[11pt,a4paper]{article}
\usepackage{isabelle,isabellesym}
% further packages required for unusual symbols (see also
% isabellesym.sty), use only when needed
%\usepackage{amssymb}
%for \<leadsto>, \<box>, \<diamond>, \<sqsupset>, \<mho>, \<Join>,
%\<lhd>, \<lesssim>, \<greatersim>, \<lessapprox>, \<greaterapprox>,
%\<triangleq>, \<yen>, \<lozenge>
%\usepackage{eurosym}
%for \<euro>
%\usepackage[only,bigsqcap]{stmaryrd}
%for \<Sqinter>
%\usepackage{eufrak}
%for \<AA> ... \<ZZ>, \<aa> ... \<zz> (also included in amssymb)
%\usepackage{textcomp}
%for \<onequarter>, \<onehalf>, \<threequarters>, \<degree>, \<cent>,
%\<currency>
% this should be the last package used
\usepackage{pdfsetup}
% urls in roman style, theory text in math-similar italics
\urlstyle{rm}
\isabellestyle{it}
% for uniform font size
%\renewcommand{\isastyle}{\isastyleminor}
\begin{document}
\title{$TITLE}
\author{$AUTHOR}
\maketitle
\tableofcontents
% sane default for proof documents
\parindent 0pt\parskip 0.5ex
% generated text of all theories
\input{session}
% optional bibliography
%\bibliographystyle{abbrv}
%\bibliography{root}
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
EOF
fi
# notes
declare -a DIR_PARTS=($DIR)
if [ ${#DIR_PARTS[@]} = 1 ]; then
OPT_DIR="-D $DIR"
else
OPT_DIR="-D \"$DIR\""
fi
cat <<EOF
Now use the following command line to build the session:
isabelle build $OPT_DIR
EOF