#!/bin/bash

#
# Si le programme recoit des arguments (mode TEST), 
# compile les arguments (et ne deplace pas les exos dans $EXEMAALT
# mais dans $RESULTATS_INDIV = $SOURCE/resultats_indiv ).
# Sinon, compile les fichiers de $SOURCES/exos

let LARGmm=180 # largeur en cm du papier pour la version navigable
let HAUTmm=145 # hauteur en cm du papier pour la version navigable

let LARGpt=$(( $LARGmm * 2835 / 1000 )) # largeur du papier en pt sachant que 1mm=2.835 pt
                                         # et que bash ne connait que les entiers
let HAUTpt=$(( $HAUTmm * 2835 / 1000 ))

######################################

echo
echo ____________Traitement des exos individuels_______________
echo

source exos-variables

RESULTATS_INDIV=$SOURCES/resultats_indiv  # endroit ou sont deplaces les fichiers compiles en mode test
                                         #(ie quand il y a des arguments)
FORMATS='a4 navig'


# on regarde si on a recu des arguments,
# on definit la liste des exos,
# et on installe les sources (si pas d'arguments)
if [ $# -ne 0 ] ; then
  EXOS=$*
  let TEST=1
  REP_COMPIL=`pwd`
else
  REPERTOIRES=`find $SOURCES/fred/ $SOURCES/vincent/ -maxdepth 1 -mindepth 1 -type d `
  EXOS='';
  for REP in $REPERTOIRES ; do
    BASENAME=${REP##*/} 
     # ${REP##zzz} enleve le plus long sous-mot a gauche de $REP qui matche le pattern zzz 
     # ici zzz=*/ ce qui signifie qu'on a enleve la partie ``chemin'' du nom.
    if [ -f $REP/$BASENAME.tex ] ; then
       EXOS="$EXOS $REP/$BASENAME.tex"
    else
       echo Erreur dans exos-indiv: $REP/$BASENAME.tex n existe pas
       exit 1
    fi
    $INSTALL -r $REP $EXOS_INDIV/tex/ \
          || { echo erreur installation $REP ; exit 1 ; }
  done
  let TEST=0
  REP_COMPIL=$SOURCES/compilation
fi


# creation eventuelle de $RESULTATS_INDIV
if [ $TEST -eq 1 ] ; then
 if [ ! -e $RESULTATS_INDIV ] ; then 
   mkdirhier $RESULTATS_INDIV
 fi
 rm -f $RESULTATS_INDIV/*
fi



let WARNINGS=0
let CONTINUER=0

cd $REP_COMPIL

#menage
rm -f *.aux *.out *.toc 

for EXO in $EXOS ; do
  if [ ! -f $EXO ] ; then echo "Exo $EXO introuvable" ; exit 1 ; fi
  # on enleve le .tex final.
  EXO=${EXO%.tex}
  # ${EXO##zzz} enleve le plus long sous-mot a gauche de $EXO qui matche le pattern zzz 
  # ici zzz=*/ ce qui signifie qu'on a enleve la partie ``chemin'' du nom.
  BASENAME=${EXO##*/}
  NOM=$REP_COMPIL/${BASENAME}_plugged

  rm -f $NOM.tex
  let ERREURS=0
  for FORMAT in $FORMATS ; do

#creation du fichier tex
    cat $SOURCES/entetes/entete1_$FORMAT.tex $SOURCES/entetes/entete2_Date.tex $SOURCES/entetes/entete3_commune.tex \
        $SOURCES/entetes/macros.tex $SOURCES/entetes/liste_des_categories.tex \
        $SOURCES/entetes/entete4_exos_individuels.tex > $NOM.tex
    echo >> $NOM.tex
    echo "\\nomfic{${BASENAME}}" >> $NOM.tex
    echo "\\nomficimprimable{${BASENAME}}" | $BIN/exos-chge-souligne.perl >> $NOM.tex 
          # remplace `_' par `\_' dans nomfic pour faire nomficimprimable

    # regarde si fichier unique ou si y a des figures (seulement en mode non test)
    # ${EXO%/*} est la partie `` repertoire'' de l'exo
    if [ $TEST -eq 0 ] ; then
       NB_SOUS_FICHIERS=`find ${EXO%/*} -type f -maxdepth 1 -not -name '*~' | wc -l`
       if [ $NB_SOUS_FICHIERS -eq 1 ] ; then 
           #fichier unique
          echo "\\FichierUnique">> $NOM.tex
       fi
    fi
       
    echo >> $NOM.tex
    cat $EXO.tex $SOURCES/entetes/fin_exos_individuels.tex >> $NOM.tex


    for I in 1 2 3 ; do

      #  compilation latex
      if [ $TEST -eq 0 ] ; then 
         if [ $I -eq 3 ] ; then 
            latex -interaction=nonstopmode $NOM.tex | $BIN/filtre_warnings
         else
            latex -interaction=nonstopmode $NOM.tex | $BIN/filtre_warnings_et_refs
         fi
      else 
      latex $NOM.tex  # pas de filtre en mode test
      fi
      #question si erreur
      if  egrep -i '(error)|(^!)' $NOM.log >/dev/null  ;  then 
        let ERREURS=1
        if [ $CONTINUER -eq 0 ] ; then
           echo "Erreurs a la compilation de $EXO.tex"
           echo 'Continuer ? (o/n/f) (o=jusqua la proch. erreur, f= jusqua la fin du monde)'
           read REPONSE
           if  echo $REPONSE | grep -i n > /dev/null  ; then
             echo 'A plus.' 
             exit 1 
           fi
           if  echo $REPONSE | grep -i f > /dev/null  ; then
             echo 'On y va !' 
             let CONTINUER=1
           fi
        fi
      fi
    done # du for I


# test warning
   grep -i warning $NOM.log >/dev/null && let WARNINGS=1
   
   if [ $TEST -eq 0 ] ; then
      rm -f $NOM.tex
   fi

# ps pdf et installation des fichiers
   if [ $FORMAT == 'a4' ] ; then
      dvips -Ppdf -t a4 $NOM.dvi -o $NOM.ps >/dev/null 2> /dev/null \
              || { echo Erreur dvips $NOM.dvi ; exit 1 ; }
      ps2pdf -sPAPERSIZE=a4 $NOM.ps $NOM.pdf \
              || { echo Erreur dans ps2pdf $NOM.ps ; exit 1 ; }
      dvips -t a4 $NOM.dvi -o $NOM.ps >/dev/null 2> /dev/null \
              || { echo Erreur dvips $NOM.dvi ; exit 1 ; }

      if [ $TEST -eq 0 ] ; then
     
      $INSTALL $NOM.dvi $EXOS_INDIV/dvi/$BASENAME.dvi && rm -f $NOM.dvi \
          || { echo erreur installation $NOM.dvi ; exit 1 ; }
         else
      mv -f $NOM.dvi $NOM.tex $RESULTATS_INDIV/ 
      fi

    
      if [ $TEST -eq 0 ] ; then
       gzip $NOM.ps
       $INSTALL $NOM.ps.gz $EXOS_INDIV/postscript/$BASENAME.ps.gz && rm -f $NOM.ps.gz \
          || { echo erreur installation $NOM.ps.gz ; exit 1 ; }
       $INSTALL $NOM.pdf $EXOS_INDIV/pdf_imprimable/$BASENAME.pdf && rm -f $NOM.pdf \
          || { echo erreur installation $NOM.pdf ; exit 1 ; }
       else
       mv -f $NOM.ps $NOM.pdf $RESULTATS_INDIV/ 
      fi

   else  #format navig

      dvips -Ppdf -T ${LARGmm}mm,${HAUTmm}mm $NOM.dvi -o $NOM.ps >/dev/null 2> /dev/null \
              || { echo Erreur dvips $NOM.dvi ; exit 1 ; }
      rm -f $NOM.dvi
      ps2pdf -dDEVICEWIDTHPOINTS=$LARGpt -dDEVICEHEIGHTPOINTS=$HAUTpt $NOM.ps $NOM.pdf \
              || { echo Erreur dans ps2pdf $NOM.ps ; exit 1 ; }
      rm -f $NOM.ps
      if [ $TEST -eq 0 ] ; then
        $INSTALL $NOM.pdf $EXOS_INDIV/pdf_navigable/$BASENAME.pdf
      else
        mv -f $NOM.pdf $RESULTATS_INDIV/${BASENAME}_plugged_navig.pdf
      fi
   fi

   done
   rm $NOM.*   
done


# on fait du menage dans le log_minus.log
sort -u $LOG_MINUS > $LOG/log_minus.tmp
rm -f $LOG_MINUS
mv $LOG/log_minus.tmp $LOG_MINUS


if [ $TEST -eq 1 ] ; then
echo les fichier tex, ps, pdf... sont dans le repertoire $RESULTATS_INDIV
fi




