#!/bin/bash

# 1 option peut etre passees au programme: -1
# -1 fait la compilation d'un seul fichier tex au lieu de 5x2
# de plus, avec l'option -1, les fichiers ne sont pas deplaces vers EXEMAALT

# le programme suppose que le repertoire compilation a ete initialise
# (avec exos-liens-precompilation)
# et que les fichiers tex ont ete crees (avec exos-make-tex)

######## Variables

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 ))


FORMATS='a4 navig'
#categories de receuils
CATEGORIES="Date DateNouveaux Niveau AnglePedagogique Theme"   



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

source exos-variables

# on regarde si on a recu l'argument '-1'

let MODE_UN=0

if [ $# -ne 0 ] ; then
  if [ $1 == '-1' ] ; then 
    let MODE_UN=1
    echo
    echo ___________________ Mode \'-1\' _______________________
    echo
  fi
fi

if [ $MODE_UN -eq 1 ] ; then 
    # en mode '-1' on ne compile que selon une categorie : la derniere. 
    for CATEG in $CATEGORIES ; do CATEG_AUX=$CATEG ; done
    CATEGORIES=$CATEG_AUX;
    # on ne garde qu'un format
    FORMATS='a4'
fi



echo
echo ____________Compilation des exos tries____________
echo

cd $SOURCES/compilation

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


let WARNINGS=0
let CONTINUER=0 # 0 signifie on continue un coup en cas d'erreur (defaut), 
                # 1 on continue jusqu'a la fin du monde

let ERREURS=0
for FORMAT in $FORMATS ; do
  for CATEG in $CATEGORIES ; do
    for I in 1 2 3 ; do # on compte 3 compilations
      if [ $CATEG == 'DateNouveaux' ]; then
        NOM=nouveaux_par_Date_$FORMAT
        NOM_SANS_FORMAT=nouveaux_par_Date  #nom sur le site EXEMAALT
      else
        NOM=exos_par_${CATEG}_$FORMAT
        NOM_SANS_FORMAT=exos_par_${CATEG}
      fi

      # on commence par compiler a tour de role chaque fichier 
      echo
      echo Compilation de $NOM, passage numero $I 
      echo

      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     

      if [ $I == 3 ] ; then 
            grep -i warning $NOM.log >/dev/null && let WARNINGS=1
      fi
      if  egrep -i '(error)|(^!)' $NOM.log >/dev/null  ;  then 
        let ERREURS=1
        if [ $CONTINUER -eq 0 ] ; then
           echo "Erreurs a la compilation No $I de $NOM.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 #fin de la boucle sur les 3 compilations

    if [ $MODE_UN -eq 0 ] ; then 
      $INSTALL $NOM.tex $EXOS_TRIES/tex/$NOM_SANS_FORMAT.tex \
           || { echo Erreur installation $NOM.tex ; exit 1 ; }
      if [ $CATEG != 'DateNouveaux' ] ; then
        $INSTALL index_$CATEG.tex index_${CATEG}_Nouveau.tex $EXOS_TRIES/tex/ \
           || { echo Erreur installation index_$CATEG.tex index_${CATEG}_Nouveau.tex ; exit 1 ; }
      fi
    fi

    # ensuite on fait dvips, ps2pdf   

    echo
    echo Creation ps et pdf...
    echo

    # cas du format navig
    if [ $FORMAT == navig ] ; then
      # On saute le format navig en mode '-1'
      if [ $MODE_UN -eq 0 ] ; then

        dvips -Ppdf -T ${LARGmm}mm,${HAUTmm}mm $NOM.dvi -o $NOM.ps >/dev/null 2> /dev/null \
              || { echo Erreur dvips $NOM.dvi ; exit 1 ; }
        echo $NOM.ps : OK
        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
        $INSTALL $NOM.pdf $EXOS_TRIES/pdf_navigable/$NOM_SANS_FORMAT.pdf && rm -f $NOM.pdf \
              || { echo Erreur installation $NOM.pdf ; exit 1 ; }
        echo $NOM.pdf : OK

      fi
    fi

    # cas du format a4
    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 [ $MODE_UN -eq 0 ] ; then 
        $INSTALL $NOM.dvi $EXOS_TRIES/dvi/$NOM_SANS_FORMAT.dvi && rm -f $NOM.dvi \
             || { echo Erreur installation $NOM.dvi ; exit 1 ; }
      fi
      echo $NOM.ps : OK

      if [ $MODE_UN -eq 0 ] ; then 
        gzip $NOM.ps
        $INSTALL $NOM.ps.gz $EXOS_TRIES/postscript/$NOM_SANS_FORMAT.ps.gz && rm -f $NOM.ps.gz \
             || { echo Erreur installation $NOM.ps.gz ; exit 1 ; }
        $INSTALL $NOM.pdf $EXOS_TRIES/pdf_imprimable/$NOM_SANS_FORMAT.pdf && rm -f $NOM.pdf \
             || { echo Erreur installation $NOM.pdf ; exit 1 ; }
      fi
      echo $NOM.pdf : OK
    fi
  done
done


# Compilation des index en html
if [ $MODE_UN -eq 0 ] ; then
  echo 
  echo ____________________________________________
  echo         Compilation de html.tex
  echo ____________________________________________
  echo
  
  rm -rf html/

  for I in 1 2 ; do
       latex -interaction=nonstopmode html.tex | $BIN/filtre_warnings 
 
  # teste si il ya des erreurs
      if  egrep -i '(error)|(^!)' html.log >/dev/null  ;  then 
        let ERREURS=1
        if [ $CONTINUER -eq 0 ] ; then
           echo "Erreurs a la compilation de html.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

  echo
  echo Lancement de latex2html
  echo
  latex2html -split +1 -link 1 -info "" -local_icons -show_section_numbers -no_footnode -numbered_footnotes html.tex | $BIN/filtre_latex2html 2>&1

  rm -rf $EXOS_TRIES/html # foireux si machine contenant EXEMAALT distante...
  $INSTALL -rf html $EXOS_TRIES/ && rm -rf html/
fi # fin du if MODE_UN=0


# Installation des fichiers annexes dans EXEMAALT

if [ $MODE_UN -eq 0 ] ; then
$INSTALL abstract-exos.tex macros.tex liste_des_categories.tex $EXOS_TRIES/tex/ \
       || { echo Erreur installation abstract.tex macros.tex etc. ; exit 1 ; }
fi

# 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

# On a fini

echo
echo Bon.
if [ $ERREURS -eq 0 ] ; then 
  echo Tout va bien.
  if [ $WARNINGS -eq 1 ] ; then 
    echo Mais la compilation a donne des WARNINGS. 
  fi
else
  echo Il ya eu des erreurs a la compilation... 
fi
