recettes/syntax_check.sh
2011-03-13 22:44:03 +01:00

70 lines
2.2 KiB
Bash
Executable file

#!/bin/sh
printsuccess=0
printfail=1
folder="chapters"
while [ $# -gt 0 ]
do
case "$1" in
--success) printsuccess=1;;
--fail) printfail=1;;
--nosuccess) printsuccess=0;;
--nofail) printfail=0;;
--folder) folder="$2"; shift;;
*) echo >&2 \
"usage: $0 [--success] [--fail] [--nosuccess] [--nofail] [--folder path]"
error
exit 1;;
esac
shift
done
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;
}
failligne=0
failtemps=0
failportions=0
failindex=0
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;
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;
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;
result $ret "PORTIONS"
cat $i | grep "\index{" > /dev/null
ret=$?
if [ $ret -eq 1 ]; then failindex=$(echo ${failindex}+1 | bc); fi;
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"