| author | bulwahn | 
| Wed, 10 Oct 2012 10:41:18 +0200 | |
| changeset 49762 | b5e355c41de3 | 
| parent 48657 | 63ef2f0cf8bb | 
| child 51081 | 70a4c11cd79e | 
| permissions | -rwxr-xr-x | 
| 10555 | 1 | #!/usr/bin/env bash | 
| 7793 | 2 | # | 
| 9788 | 3 | # Author: Markus Wenzel, TU Muenchen | 
| 7793 | 4 | # | 
| 5 | # DESCRIPTION: prepare theory session document | |
| 6 | ||
| 7 | ||
| 10511 | 8 | PRG="$(basename "$0")" | 
| 7793 | 9 | |
| 10 | function usage() | |
| 11 | {
 | |
| 12 | echo | |
| 28650 | 13 | echo "Usage: isabelle $PRG [OPTIONS] [DIR]" | 
| 7793 | 14 | echo | 
| 15 | echo " Options are:" | |
| 8654 | 16 | echo " -c cleanup -- be aggressive in removing old stuff" | 
| 17049 | 17 | echo " -n NAME specify document name (default 'document')" | 
| 18 | echo " -o FORMAT specify output format: dvi (default), dvi.gz, ps, ps.gz, pdf" | |
| 19 | echo " -t TAGS specify tagged region markup" | |
| 7793 | 20 | echo | 
| 8211 | 21 | echo " Prepare the theory session document in DIR (default 'document')" | 
| 7857 | 22 | echo " producing the specified output format." | 
| 7793 | 23 | echo | 
| 24 | exit 1 | |
| 25 | } | |
| 26 | ||
| 27 | function fail() | |
| 28 | {
 | |
| 29 | echo "$1" >&2 | |
| 30 | exit 2 | |
| 31 | } | |
| 32 | ||
| 33 | ||
| 34 | ## process command line | |
| 35 | ||
| 36 | # options | |
| 37 | ||
| 8211 | 38 | CLEAN="" | 
| 17049 | 39 | NAME="document" | 
| 7793 | 40 | OUTFORMAT=dvi | 
| 32322 
45cb4a86eca2
change IFS only locally -- thanks to bash arrays;
 wenzelm parents: 
29143diff
changeset | 41 | declare -a TAGS=() | 
| 7793 | 42 | |
| 17049 | 43 | while getopts "cn:o:t:" OPT | 
| 7793 | 44 | do | 
| 45 | case "$OPT" in | |
| 8211 | 46 | c) | 
| 47 | CLEAN=true | |
| 48 | ;; | |
| 17049 | 49 | n) | 
| 50 | NAME="$OPTARG" | |
| 51 | ;; | |
| 7793 | 52 | o) | 
| 53 | OUTFORMAT="$OPTARG" | |
| 54 | ;; | |
| 17049 | 55 | t) | 
| 32390 
468eff174a77
function splitarray: splightly more abstract version that accomodates older bashes;
 wenzelm parents: 
32322diff
changeset | 56 |       splitarray "," "$OPTARG"; TAGS=("${SPLITARRAY[@]}")
 | 
| 17049 | 57 | ;; | 
| 7793 | 58 | \?) | 
| 59 | usage | |
| 60 | ;; | |
| 61 | esac | |
| 62 | done | |
| 63 | ||
| 64 | shift $(($OPTIND - 1)) | |
| 65 | ||
| 66 | ||
| 67 | # args | |
| 68 | ||
| 8211 | 69 | DIR="document" | 
| 9788 | 70 | [ "$#" -ge 1 ] && { DIR="$1"; shift; }
 | 
| 7793 | 71 | |
| 9788 | 72 | [ "$#" -ne 0 ] && usage | 
| 7793 | 73 | |
| 74 | ||
| 75 | ## main | |
| 76 | ||
| 7814 | 77 | # check format | 
| 78 | ||
| 79 | case "$OUTFORMAT" in | |
| 80 | dvi | dvi.gz | ps | ps.gz | pdf) | |
| 81 | ;; | |
| 82 | *) | |
| 83 | fail "Bad output format '$OUTFORMAT'" | |
| 84 | ;; | |
| 85 | esac | |
| 86 | ||
| 87 | ||
| 48616 
be8002ee43d8
document variant NAME may use different LaTeX entry point document/root_NAME.tex if that file exists;
 wenzelm parents: 
32390diff
changeset | 88 | # document variants | 
| 
be8002ee43d8
document variant NAME may use different LaTeX entry point document/root_NAME.tex if that file exists;
 wenzelm parents: 
32390diff
changeset | 89 | |
| 
be8002ee43d8
document variant NAME may use different LaTeX entry point document/root_NAME.tex if that file exists;
 wenzelm parents: 
32390diff
changeset | 90 | ROOT_NAME="root_$NAME" | 
| 
be8002ee43d8
document variant NAME may use different LaTeX entry point document/root_NAME.tex if that file exists;
 wenzelm parents: 
32390diff
changeset | 91 | [ ! -f "$DIR/$ROOT_NAME.tex" ] && ROOT_NAME="root" | 
| 17049 | 92 | |
| 93 | function prep_tags () | |
| 94 | {
 | |
| 95 | ( | |
| 32322 
45cb4a86eca2
change IFS only locally -- thanks to bash arrays;
 wenzelm parents: 
29143diff
changeset | 96 |     for TAG in "${TAGS[@]}"
 | 
| 17049 | 97 | do | 
| 98 | case "$TAG" in | |
| 99 | /*) | |
| 32322 
45cb4a86eca2
change IFS only locally -- thanks to bash arrays;
 wenzelm parents: 
29143diff
changeset | 100 |           echo "\\isafoldtag{${TAG:1}}"
 | 
| 17049 | 101 | ;; | 
| 102 | -*) | |
| 32322 
45cb4a86eca2
change IFS only locally -- thanks to bash arrays;
 wenzelm parents: 
29143diff
changeset | 103 |           echo "\\isadroptag{${TAG:1}}"
 | 
| 17049 | 104 | ;; | 
| 105 | +*) | |
| 32322 
45cb4a86eca2
change IFS only locally -- thanks to bash arrays;
 wenzelm parents: 
29143diff
changeset | 106 |           echo "\\isakeeptag{${TAG:1}}"
 | 
| 17049 | 107 | ;; | 
| 108 | *) | |
| 32322 
45cb4a86eca2
change IFS only locally -- thanks to bash arrays;
 wenzelm parents: 
29143diff
changeset | 109 |           echo "\\isakeeptag{${TAG}}"
 | 
| 17049 | 110 | ;; | 
| 111 | esac | |
| 112 | done | |
| 113 | ) > isabelletags.sty | |
| 114 | } | |
| 115 | ||
| 116 | ||
| 7814 | 117 | # prepare document | 
| 7793 | 118 | |
| 7814 | 119 | function pre_latex () | 
| 120 | {
 | |
| 121 | local FMT="$1" | |
| 14367 
0b1447d37161
remove more files (index, log files) for -c option
 kleing parents: 
14344diff
changeset | 122 | [ -n "$CLEAN" ] && rm -f *.aux *.out *.ind *.idx *.ilg *.bbl *.blg *.log | 
| 48616 
be8002ee43d8
document variant NAME may use different LaTeX entry point document/root_NAME.tex if that file exists;
 wenzelm parents: 
32390diff
changeset | 123 | "$ISABELLE_TOOL" latex -o sty "$ROOT_NAME.tex" && \ | 
| 
be8002ee43d8
document variant NAME may use different LaTeX entry point document/root_NAME.tex if that file exists;
 wenzelm parents: 
32390diff
changeset | 124 | "$ISABELLE_TOOL" latex -o "$FMT" "$ROOT_NAME.tex" && \ | 
| 48637 
547b075669ae
more precise guide for bibtex/makeindex -- dummy files should be sufficient;
 wenzelm parents: 
48616diff
changeset | 125 |   { [ ! -f "$ROOT_NAME.bib" ] || "$ISABELLE_TOOL" latex -o bbl "$ROOT_NAME.tex"; } && \
 | 
| 
547b075669ae
more precise guide for bibtex/makeindex -- dummy files should be sufficient;
 wenzelm parents: 
48616diff
changeset | 126 |   { [ ! -f "$ROOT_NAME.idx" ] || "$ISABELLE_TOOL" latex -o idx "$ROOT_NAME.tex"; } && \
 | 
| 28500 | 127 | "$ISABELLE_TOOL" latex -o "$FMT" | 
| 7814 | 128 | } | 
| 129 | ||
| 8211 | 130 | ( | 
| 131 | cd "$DIR" || fail "Bad directory '$DIR'" | |
| 132 | ||
| 17049 | 133 | [ -n "$CLEAN" ] && rm -f "../$NAME.$OUTFORMAT" | 
| 134 | ||
| 135 | prep_tags | |
| 8654 | 136 | |
| 48657 
63ef2f0cf8bb
simplified custom document/build script, instead of old-style document/IsaMakefile;
 wenzelm parents: 
48637diff
changeset | 137 | if [ -f build ]; then | 
| 
63ef2f0cf8bb
simplified custom document/build script, instead of old-style document/IsaMakefile;
 wenzelm parents: 
48637diff
changeset | 138 | ./build "$OUTFORMAT" "$NAME" | 
| 9788 | 139 | RC="$?" | 
| 8211 | 140 | elif [ "$OUTFORMAT" = pdf ]; then | 
| 141 | pre_latex pdf && \ | |
| 48616 
be8002ee43d8
document variant NAME may use different LaTeX entry point document/root_NAME.tex if that file exists;
 wenzelm parents: 
32390diff
changeset | 142 | "$ISABELLE_TOOL" latex -o pdf "$ROOT_NAME.tex" | 
| 9788 | 143 | RC="$?" | 
| 8211 | 144 | else | 
| 145 | pre_latex dvi && \ | |
| 48616 
be8002ee43d8
document variant NAME may use different LaTeX entry point document/root_NAME.tex if that file exists;
 wenzelm parents: 
32390diff
changeset | 146 | "$ISABELLE_TOOL" latex -o "$OUTFORMAT" "$ROOT_NAME.tex" | 
| 9788 | 147 | RC="$?" | 
| 8211 | 148 | fi | 
| 149 | ||
| 48616 
be8002ee43d8
document variant NAME may use different LaTeX entry point document/root_NAME.tex if that file exists;
 wenzelm parents: 
32390diff
changeset | 150 | if [ "$RC" -eq 0 -a -f "$ROOT_NAME.$OUTFORMAT" ]; then | 
| 
be8002ee43d8
document variant NAME may use different LaTeX entry point document/root_NAME.tex if that file exists;
 wenzelm parents: 
32390diff
changeset | 151 | cp -f "$ROOT_NAME.$OUTFORMAT" "../$NAME.$OUTFORMAT" | 
| 11581 | 152 | fi | 
| 8211 | 153 | |
| 8217 | 154 | exit "$RC" | 
| 8211 | 155 | ) | 
| 9788 | 156 | RC="$?" | 
| 7793 | 157 | |
| 158 | ||
| 7814 | 159 | # install | 
| 7793 | 160 | |
| 17049 | 161 | [ "$RC" -ne 0 ] && fail "Document preparation failure in directory '$DIR'" | 
| 8211 | 162 | |
| 163 | #beware! | |
| 164 | [ -n "$CLEAN" ] && rm -rf "$DIR" | |
| 165 | ||
| 166 | exit "$RC" |