recettes/build.sh
2012-05-02 22:03:17 +02:00

180 lines
5.5 KiB
Bash
Executable file

#!/bin/sh
INDIVID_FOLDER="recettes_individ"
INDIVID_FOLDER_PDF="recettes_individ_pdf"
CHAPTERS="chapters"
CHAPTERS2="chapters2"
MERGE="chapters_merge"
prepare_individ() {
individ_source="$1"
individ_dest="$2"
cat > "$individ_dest" <<EOF
\documentclass{article}
\usepackage[a5paper]{geometry}
\usepackage[cm]{fullpage}
\usepackage[french]{babel}
\usepackage[nostepnumber]{cuisine2}
\usepackage{graphicx}
\usepackage{makeidx}
\usepackage[utf8]{inputenc}
\usepackage{environ}
\NewEnviron{recipe}[3]{%
\begin{recipe2}{#1}{#2}{#3}
\BODY
\end{recipe2}%
}%
\begin{document}
EOF
cat "$individ_source" >> "$individ_dest"
cat >> "$individ_dest" <<EOF
\end{document}
EOF
}
syntax_result() {
if [ $1 -eq 1 ]; then
if [ $printfail -eq 1 ]; then
printf "\033[01;31m[FAIL-%s]\t%s\033[00m\n" $2 $i
fi
else
if [ $printsuccess -eq 1 ]; then
printf "\033[01;32m[PASS-%s]\t%s\033[00m\n" $2 $i
fi
fi;
}
syntax_check() {
folder="$1"
failligne=0
failtemps=0
failportions=0
failindex=0
printsuccess=0
printfail=1
for i in $(ls "$folder"/*/*.tex); do
cat $i | sed 1q | perl -ne 'if (m/^\\begin{recipe}{.*?}{.*?}{.*?}$/) { exit 0; } else { exit 1; }';
ret=$?
if [ $ret -eq 1 ]; then
failligne=$(echo ${failligne}+1 | bc);
fi;
syntax_result $ret "LIGNE"
cat $i | sed 1q | perl -ne 'if (m/{(\d+(\d+)?\s((\w|[éèà])+\s?)+(\s\+\s)?)+}$/) { exit 0; } else { exit 1; }';
ret=$?
if [ $ret -eq 1 ]; then
failtemps=$(echo ${failtemps}+1 | bc);
fi;
syntax_result $ret "TEMPS"
regexpains='(\d+\smiches?)|(\d+\spains?(\s\w+\s)*(\s?\d+g)?)'
regexportions='(\d+\sportions?)'
regexgateaux='(1\s(plaque)|(moule).*cm)'
regexmisc='(\d+(-\d+)?\s(\w+\s)*((pièces?)|(bacs?)|(pots?)))'
cat $i | sed 1q | perl -ne "if (m/{$regexpains|$regexportions|$regexgateaux|$regexmisc}/) { exit 0; } else { exit 1; }";
ret=$?
if [ $ret -eq 1 ]; then
failportions=$(echo ${failportions}+1 | bc);
fi;
syntax_result $ret "PORTIONS"
cat $i | grep "\index{" > /dev/null
ret=$?
if [ $ret -eq 1 ]; then
failindex=$(echo ${failindex}+1 | bc);
fi;
syntax_result $ret "INDEX"
done
echo "Test LIGNE (ligne 'recipe' sur une ligne avec bon nombre d'arguments) : " $failligne "erreurs"
echo "Test TEMPS (le paramètre de temps pour la recette est présent et bien formaté) :" $failtemps "erreurs"
echo "Test PORTIONS (les portions sont sous un format listé)" $failportions "erreurs"
echo "Test INDEX (une entrée dans l'index est écrite)" $failindex "erreurs"
}
if [ $# -eq 0 ]; then
TARGET_BUILD="all"
else
TARGET_BUILD="$1"
fi
# We have to garantee that the destination folders will be there ...
if [ ! -d $INDIVID_FOLDER ]; then
makedir $INDIVID_FOLDER
fi
if [ ! -d $INDIVID_FOLDER_PDF ]; then
makedir $INDIVID_FOLDER_PDF
fi
if [ ! -d $MERGE ]; then
makedir $MERGE
fi
case "$TARGET_BUILD" in
all)
echo "Building the whole book"
rm -f "$CHAPTERS"/*.tex "$CHAPTERS2"/*.tex
echo "Processing replacement rules"
./replacements.pl $(find "$CHAPTERS" "$CHAPTERS2" -name '*.tex')
echo "Preparing build files"
for chapter in $(find "$CHAPTERS"/* "$CHAPTERS2"/* -prune -type d); do
perl tri.pl "$chapter".tex "$chapter"
done;
for chapter in $(find "$CHAPTERS"/* "$CHAPTERS2"/* -prune -type d | awk -F'/' '{print $2;}' | sort | uniq); do
perl tri.pl "$MERGE"/"$chapter".tex "$CHAPTERS"/"$chapter" "$CHAPTERS2"/"$chapter"
done;
echo "Building book I"
pdflatex recettes.tex > /dev/null
makeindex recettes > /dev/null 2> /dev/null
pdflatex recettes.tex > /dev/null
echo "Building book II"
pdflatex recettes2.tex > /dev/null
makeindex recettes2 > /dev/null 2> /dev/null
pdflatex recettes2.tex > /dev/null
echo "Building complete book"
pdflatex recettes_merge.tex > /dev/null
makeindex recettes_merge > /dev/null 2> /dev/null
pdflatex recettes_merge.tex > /dev/null
;;
clean)
echo "Cleaning the build files"
rm -f "$CHAPTERS"/*.tex "$CHAPTERS2"/*.tex "$MERGE"/*.tex;
rm -f *.aux *.log *.ind *.ilg *.idx *.toc
;;
individ)
echo "Building individual recipes";
for chapter in $(find "$CHAPTERS"/* "$CHAPTERS2"/* -prune -type d); do
for recette in $(find "$chapter"/ -name '*.tex'); do
recette_base=$(basename "$recette")
echo "Compiling $recette_base"
prepare_individ "$recette" "$INDIVID_FOLDER"/"$recette_base";
pdflatex "$INDIVID_FOLDER"/"$recette_base" -output-directory "$INDIVID_FOLDER_PDF" > /dev/null
rm $(basename "$recette_base" .tex).*
done
done
;;
individ-clean)
echo "Cleaning the individual-recipes";
rm -f "$INDIVID_FOLDER"/*
;;
syntax-check)
echo "Checking syntax for books"
syntax_check $CHAPTERS
syntax_check $CHAPTERS2
;;
*)
echo "Build target '$TARGET_BUILD' not recognized" >&2;
echo "Recognized options are : $0 [all | clean | individ | individ-clean | syntax-check]"
echo "If no build target is provided, 'all' is assumed"
return 10;
;;
esac