modif Perl/genere_catalogue_tests.pl : ajout d un index par mot-cle en fin de document (par lecture de la rubrique Mots-cles des fichiers README)
This commit is contained in:
parent
ece2eab3dc
commit
dccf63fdc3
2 changed files with 462 additions and 160 deletions
|
@ -3,7 +3,8 @@ use strict;
|
|||
use warnings;
|
||||
use File::Basename;
|
||||
use English;
|
||||
use Encode;
|
||||
use Encode;# package encodage fichier texte
|
||||
use Cwd; # package pour connaitre le repertoire courant
|
||||
use File::Spec::Functions qw(rel2abs);
|
||||
use File::Temp qw/ cleanup /;#creation d un repertoire temporaire qui s efface automatiquement en sortie de programme => my ($handle, $nom_rep) = File::Temp->newdir(TEMPLATE => "toto_XXXX");
|
||||
#fonction cleanup() => appel a cleanup() pour forcer la destruction des repertoires et fichier temporaires
|
||||
|
@ -15,45 +16,69 @@ my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
|
|||
#####################################################################################################
|
||||
# script pour generer automatiquement un document pdf qui resume les tests
|
||||
# disponibles (recopie des rubriques "But du test" et "Description du calcul" du
|
||||
# fichier README de cahque repertoire de test)
|
||||
# fichier README de chaque repertoire de test)
|
||||
#
|
||||
# Notes aux utilisateurs :
|
||||
# les repertoires de tests sont recherches dans toute l arborescence depuis l endroit ou
|
||||
# ce script est lance (recherche de tous les repertoires commencant par Test_R ou Test_L
|
||||
# A noter que si un des repertoires n a pas de fichier README, le script s arrete sans
|
||||
# creation du .pdf
|
||||
# ce script est lance (recherche de tous les repertoires commencant par Test_R ou Test_L)
|
||||
# A noter que si un des repertoires ne contient pas de fichier README, le script s arrete sans
|
||||
# creation du .pdf. De meme, si l un des fichiers README ne contient pas la rubrique "But du test"
|
||||
# ou "Description du calcul"
|
||||
#
|
||||
# Notes aux developpeurs :
|
||||
# - l une des plus grandes difficultes est l encodage des fichiers pour gerer les accents
|
||||
# - le choix de ne pas generer de pdf a la moindre defaillance d un fichier README a pour
|
||||
# but de forcer a rendre conforme les fichiers README. Une ecriture partielle du fichier
|
||||
# pdf en omettant les README defaillants pourrait conduire a un oubli de certains tests.
|
||||
# - l une des plus grandes difficultes est l encodage des fichiers pour gerer les accents.
|
||||
# le choix d encodage est impose par la variable $ENCODAGE_TEX
|
||||
# (en cas de gros probleme, la meilleure solution est de supprimer/remplacer les caracteres
|
||||
# les plus problematiques des fichiers README)
|
||||
# - c est difficile d anticiper ce que les gens vont ecrire dans les fichiers README.
|
||||
# un certain nombre de caracteres ou de groupes de caracteres ne sont pas directement utilisables
|
||||
# dans un fichier .tex
|
||||
# (par exemple : <, >, _, etc... ou bien encore les exposants ^3.14159265)
|
||||
# la gestion de ces caracteres se fait au cas par cas dans la subroutine ecrire_rubrique_README()
|
||||
# au niveau du bloc suivant (substitution de caracteres s///) :
|
||||
#--------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------
|
||||
#A FAIRE EVOLUER : gestion au cas par cas des caracteres speciaux dans Latex
|
||||
#--------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------
|
||||
# ...
|
||||
# ...
|
||||
# ...
|
||||
#--------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------
|
||||
# Le plus souvent, il suffit de rajouter des dollars autour des caracteres problematiques mais
|
||||
# ce n est pas systematique.
|
||||
# La gestion de ces caracteres se fait au cas par cas dans la subroutine translate_to_latex()
|
||||
# au niveau du bloc "A FAIRE EVOLUER" (par substitution de caracteres s///g)
|
||||
|
||||
#####################################################################################################
|
||||
|
||||
|
||||
|
||||
|
||||
######################################################################################################
|
||||
#
|
||||
# PARAMETRES
|
||||
#
|
||||
######################################################################################################
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
#nom du fichier catalogue de tests
|
||||
#--------------------------------------------------------------------------------
|
||||
my $NOM_PDF_CATALOGUE = "documentation_tests.pdf";
|
||||
|
||||
#encodage du fichier .tex temporaire (pour accepter les accents)
|
||||
#--------------------------------------------------------------------------------
|
||||
#encodage du fichier .tex temporaire (rq : notamment pour accepter les accents)
|
||||
#--------------------------------------------------------------------------------
|
||||
my $ENCODAGE_TEX = 'iso-8859-15';
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
#concernant fichiers README :
|
||||
#--------------------------------------------------------------------------------
|
||||
#--liste des rubriques a recopier de chaque README (rq : insensible a la casse)
|
||||
my @LISTE_RUBRIQUES_README = ('But du test',
|
||||
'Description du calcul');
|
||||
#--nom de la rubrique contenant des mots-cles (rq : insensible a la casse)
|
||||
my $NOM_RUBRIQUE_MOTS_CLES = 'Mots-cles';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#########################################################################################################
|
||||
|
@ -71,6 +96,9 @@ verif_commande('pdflatex') or die "\nErreur (prog:$NOM_PROG) : commande pdflatex
|
|||
@_ = qx(pdflatex -help | grep -- -halt-on-error);
|
||||
($#_ > -1) or die "\nErreur (prog:$NOM_PROG) : commande pdflatex => option -halt-on-error non existante...\n\n";
|
||||
|
||||
#verif validite de la commande makeindex
|
||||
verif_commande('makeindex') or die "\nErreur (prog:$NOM_PROG) : commande makeindex introuvable...\n\n";
|
||||
|
||||
|
||||
|
||||
#########################################################################################################
|
||||
|
@ -78,30 +106,29 @@ verif_commande('pdflatex') or die "\nErreur (prog:$NOM_PROG) : commande pdflatex
|
|||
#########################################################################################################
|
||||
#liste des repertoires de tests rapides (Test_R)
|
||||
my @REP_TESTS_R = map {chomp($_); $_} qx(find . -name "Test_R*" -type d);
|
||||
#print "$_\n" for @REP_TESTS_R;
|
||||
#print "$_\n" for @REP_TESTS_R; exit;
|
||||
#liste des repertoires de tests rapides (Test_R)
|
||||
my @REP_TESTS_L = map {chomp($_); $_} qx(find . -name "Test_L*" -type d);
|
||||
#print "$_\n" for @REP_TESTS_L;
|
||||
#print "$_\n" for @REP_TESTS_L; exit;
|
||||
|
||||
|
||||
#########################################################################################################
|
||||
# verification de la presence d un fichier README dans les tests rapides @REP_TESTS_R et les tests longs @REP_TESTS_L
|
||||
#########################################################################################################
|
||||
my $is_absence_README = 0;
|
||||
#-dans les tests rapides
|
||||
foreach my $rep_test (@REP_TESTS_R,@REP_TESTS_L) {
|
||||
(-e "$rep_test/README") or do {
|
||||
print "\n" if(not $is_absence_README);#on passe une ligne si c est le premier repertoire defaillant
|
||||
warn "\n" if(not $is_absence_README);#on passe une ligne si c est le premier repertoire defaillant
|
||||
warn "Erreur (prog:$NOM_PROG) : repertoire de test $rep_test ne contient pas de fichier README...\n";
|
||||
$is_absence_README = 1;
|
||||
};
|
||||
}
|
||||
#arret du programme si il y a absence d au moins 1 fichier README
|
||||
if($is_absence_README) {
|
||||
print "\n";
|
||||
print_ligne_pointilles();
|
||||
print "Erreur (prog:$NOM_PROG) : arret a cause de l absence de fichiers README\n";
|
||||
print_ligne_pointilles();
|
||||
warn "\n";
|
||||
afficher_ligne_pointilles('warn');
|
||||
warn "Erreur (prog:$NOM_PROG) : arret a cause de l absence de fichier(s) README\n";
|
||||
afficher_ligne_pointilles('warn');
|
||||
die "\n";
|
||||
}
|
||||
|
||||
|
@ -121,11 +148,11 @@ $SIG{TERM} = \&sortie_programme;#TERM => capture signal : kill -15
|
|||
|
||||
|
||||
#creation d un repertoire temporaire (... qui s effacera automatiquement en sortie de programme grace a l utilisation de la construction objet File::Temp->newdir()
|
||||
my $rep_tmp = File::Temp->newdir("rep_tmp_".$NOM_PROG.'_XXXXX');
|
||||
my $REP_TMP = File::Temp->newdir("rep_tmp_".$NOM_PROG.'_XXXXX');
|
||||
my $racine_fic_latex = "toto";
|
||||
|
||||
#deplacement vers le repertoire temporaire
|
||||
chdir $rep_tmp;
|
||||
chdir $REP_TMP;
|
||||
|
||||
#------------------------------------------------------------------------------------------
|
||||
#creation du fichier .tex avec encodage $ENCODAGE_TEX (et debut du document : preambule)
|
||||
|
@ -139,111 +166,32 @@ preambule_fic_tex_tmp($HANDLE_TEX);
|
|||
#--- tests rapides ---
|
||||
print $HANDLE_TEX "\\clearpage\\newpage\n";
|
||||
print $HANDLE_TEX "\\section{Tests rapides}\n";
|
||||
|
||||
my $no_test = 0;
|
||||
foreach my $rep_test (@REP_TESTS_R) {
|
||||
$_ = $rep_test; s/^\.+\///;
|
||||
print "ajout test : $_\n";
|
||||
|
||||
#incrementation numero test
|
||||
$no_test++;
|
||||
|
||||
#chemin du fichier README
|
||||
my $fic_README = "../$rep_test/README";
|
||||
|
||||
#derniere partie du nom du repertoire
|
||||
my $nom_test = basename $rep_test;
|
||||
$nom_test =~ s/_/\$\\_\$/g;#tiret bas entre dollars
|
||||
|
||||
#ecriture d une nouvelle sous-section pour ce test
|
||||
print $HANDLE_TEX "\\subsection{Test\$\\_\$R n\$^\\circ\$$no_test : $nom_test}\n";
|
||||
|
||||
#ecriture du nom complet du repertoire sous forme d une arborescence simple
|
||||
print $HANDLE_TEX "\\noindent \\underline{R\\\'epertoire} :\\\\\n";
|
||||
my @rep_arbo = split(/\/+/, $rep_test);
|
||||
shift(@rep_arbo) if($rep_arbo[0] =~ /^\.+$/);#suppression d un eventuel ./ ou ../ devant le nom du repertoire
|
||||
#--variables pour faire une jolie indentation via \hspace
|
||||
my $hspace_cm = 0.5;
|
||||
my $hspace_cm_incr = 0.35;
|
||||
foreach my $rep_arbo (@rep_arbo) {
|
||||
$rep_arbo =~ s/_/\$\\_\$/g;
|
||||
print $HANDLE_TEX "\\hspace*{${hspace_cm}cm}\$\\triangleright\$ $rep_arbo\\\\\n";
|
||||
$hspace_cm += $hspace_cm_incr;
|
||||
}
|
||||
|
||||
#saisie de l encodage du README (par defaut : rien) (rq : on utilise la commande linux/Unix "file")
|
||||
my $encodage_source = '';
|
||||
#cas UTF-nombre (exemples : UTF-8, UTF-16, etc...)
|
||||
if(qx(file $fic_README) =~ /utf-(\d+)/i) {
|
||||
$encodage_source = ":encoding(UTF-$1)";
|
||||
}
|
||||
|
||||
#ecriture de la partie "But du test"
|
||||
ecrire_rubrique_README($fic_README, $encodage_source, $HANDLE_TEX, qw(But du test) );
|
||||
|
||||
|
||||
#ecriture de la partie "Description du calcul"
|
||||
ecrire_rubrique_README($fic_README, $encodage_source, $HANDLE_TEX, qw(Description du calcul) );
|
||||
}
|
||||
recopie_README("R", $HANDLE_TEX, \@REP_TESTS_R, @LISTE_RUBRIQUES_README);
|
||||
|
||||
#--- tests longs ---
|
||||
print $HANDLE_TEX "\\clearpage\\newpage\n";
|
||||
print $HANDLE_TEX "\\section{Tests longs}\n";
|
||||
recopie_README("L", $HANDLE_TEX, \@REP_TESTS_L, @LISTE_RUBRIQUES_README);
|
||||
|
||||
$no_test = 0;
|
||||
foreach my $rep_test (@REP_TESTS_L) {
|
||||
$_ = $rep_test; s/^\.+\///;
|
||||
print "ajout test : $_\n";
|
||||
|
||||
#incrementation numero test
|
||||
$no_test++;
|
||||
|
||||
#chemin du fichier README
|
||||
my $fic_README = "../$rep_test/README";
|
||||
|
||||
#derniere partie du nom du repertoire
|
||||
my $nom_test = basename $rep_test;
|
||||
$nom_test =~ s/_/\$\\_\$/g;#tiret bas entre dollars
|
||||
|
||||
#ecriture d une nouvelle sous-section pour ce test
|
||||
print $HANDLE_TEX "\\subsection{Test\$\\_\$L n\$^\\circ\$$no_test : $nom_test}\n";
|
||||
|
||||
#ecriture du nom complet du repertoire sous forme d une arborescence simple
|
||||
print $HANDLE_TEX "\\noindent \\underline{R\\\'epertoire} :\\\\\n";
|
||||
my @rep_arbo = split(/\/+/, $rep_test);
|
||||
shift(@rep_arbo) if($rep_arbo[0] =~ /^\.+$/);#suppression d un eventuel ./ ou ../ devant le nom du repertoire
|
||||
#--variables pour faire une jolie indentation via \hspace
|
||||
my $hspace_cm = 0.5;
|
||||
my $hspace_cm_incr = 0.35;
|
||||
foreach my $rep_arbo (@rep_arbo) {
|
||||
$rep_arbo =~ s/_/\$\\_\$/g;
|
||||
print $HANDLE_TEX "\\hspace*{${hspace_cm}cm}\$\\triangleright\$ $rep_arbo\\\\\n";
|
||||
$hspace_cm += $hspace_cm_incr;
|
||||
}
|
||||
|
||||
#saisie de l encodage du README (par defaut : rien) (rq : on utilise la commande linux/Unix "file")
|
||||
my $encodage_source = '';
|
||||
#cas UTF-nombre (exemples : UTF-8, UTF-16, etc...)
|
||||
if(qx(file $fic_README) =~ /utf-(\d+)/i) {
|
||||
$encodage_source = ":encoding(UTF-$1)";
|
||||
}
|
||||
|
||||
#ecriture de la partie "But du test"
|
||||
ecrire_rubrique_README($fic_README, $encodage_source, $HANDLE_TEX, qw(But du test) );
|
||||
|
||||
|
||||
#ecriture de la partie "Description du calcul"
|
||||
ecrire_rubrique_README($fic_README, $encodage_source, $HANDLE_TEX, qw(Description du calcul) );
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------------------
|
||||
#fin de l ecriture du fichier .tex : ajout de end{document}
|
||||
#fin de l ecriture du fichier .tex
|
||||
#------------------------------------------------------------------------------------------
|
||||
#ajout de l index (ajout egalement dans le sommaire sans numerotation)
|
||||
print $HANDLE_TEX "\\clearpage\\newpage\n";
|
||||
print $HANDLE_TEX "\\printindex\n";#ecriture de l index
|
||||
|
||||
#ajout de \end{document}
|
||||
print $HANDLE_TEX "\\end{document}\n";
|
||||
close($HANDLE_TEX);
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------------------
|
||||
#compilation pdflatex (1 premiere fois pour voir si ca marche et une 2eme fois pour generer la table des matieres et les hyperliens
|
||||
#compilation pdflatex (avec index)
|
||||
# en trois temps :
|
||||
# 1- premier pdflatex (generation du .pdf et du .idx)
|
||||
# 2- makeindex (creation de l index)
|
||||
# 3- deuxieme pdflatex (table des matieres et index)
|
||||
#------------------------------------------------------------------------------------------
|
||||
print "\n";
|
||||
print "compilation pdflatex (1ere fois)\n";
|
||||
|
@ -261,14 +209,37 @@ system("pdflatex -halt-on-error $racine_fic_latex.tex > toto.log");
|
|||
chdir "..";
|
||||
sortie_programme();
|
||||
}
|
||||
#-2eme compilation (etant donne que ca a marche la 1ere fois, pdflatex ne peut pas echouer cette 2eme fois)
|
||||
#-generation de l index
|
||||
print "compilation index (makeindex)\n";
|
||||
#-verif presence .idx
|
||||
if(not -e "$racine_fic_latex.idx") {
|
||||
warn "\nErreur (prog:$NOM_PROG) : le fichier index .idx n a pas ete cree\n";
|
||||
warn " Les fichiers suivants ont ete cree a des fins de debug :\n";
|
||||
warn " - $NOM_PDF_CATALOGUE.tex (fichier .tex donne en argument de pdflatex)\n";
|
||||
warn " - $NOM_PDF_CATALOGUE.error_log (affichage renvoye par pdflatex)\n";
|
||||
warn "\n";
|
||||
system("mv -f $racine_fic_latex.tex ../$NOM_PDF_CATALOGUE.tex");
|
||||
system("mv -f toto.log ../$NOM_PDF_CATALOGUE.error_log");
|
||||
chdir "..";
|
||||
sortie_programme();
|
||||
}
|
||||
system("makeindex $racine_fic_latex.idx > toto.log");
|
||||
#-2eme compilation (pdflatex avec option -halt-on-error pour forcer a quitter a la moindre erreur)
|
||||
print "compilation pdflatex (2eme fois)\n";
|
||||
system("pdflatex $racine_fic_latex.tex > toto.log");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
system("rm -f $racine_fic_latex.pdf");
|
||||
system("pdflatex -halt-on-error $racine_fic_latex.tex > toto.log");
|
||||
#-verif presence .pdf
|
||||
if(not -e "$racine_fic_latex.pdf") {
|
||||
warn "\nErreur (prog:$NOM_PROG) : erreur a l execution de pdflatex.\n";
|
||||
warn " Les fichiers suivants ont ete cree a des fins de debug :\n";
|
||||
warn " - $NOM_PDF_CATALOGUE.tex (fichier .tex donne en argument de pdflatex)\n";
|
||||
warn " - $NOM_PDF_CATALOGUE.error_log (affichage renvoye par pdflatex)\n";
|
||||
warn "\n";
|
||||
system("mv -f $racine_fic_latex.tex ../$NOM_PDF_CATALOGUE.tex");
|
||||
system("mv -f toto.log ../$NOM_PDF_CATALOGUE.error_log");
|
||||
chdir "..";
|
||||
sortie_programme();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -280,15 +251,15 @@ chdir "..";
|
|||
|
||||
#affichage fin programme
|
||||
print "\n";
|
||||
print_ligne_pointilles();
|
||||
afficher_ligne_pointilles('print');
|
||||
print "Le fichier $NOM_PDF_CATALOGUE a ete cree...\n";
|
||||
print_ligne_pointilles();
|
||||
afficher_ligne_pointilles('print');
|
||||
print "\n";
|
||||
|
||||
|
||||
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
#remarque : fin du programme => le repertoire temporaire $rep_tmp sera efface automatiquement
|
||||
#remarque : fin du programme => le repertoire temporaire $REP_TMP sera efface automatiquement
|
||||
# car utilisation de File::Temp->newdir()
|
||||
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -302,74 +273,392 @@ print "\n";
|
|||
#subroutine de sortie du programme
|
||||
#--------------------------------------------------
|
||||
sub sortie_programme {
|
||||
#- - - - - - - - -
|
||||
#effacement du repertoire temporaire (subroutine cleanup() du package File::Temp)
|
||||
#- - - - - - - - -
|
||||
# rq : on remonte d un cran dans l arborescence si le repertoire courant est le repertoire temporaire
|
||||
# (sinon le repertoire temporaire $REP_TMP ne pourra pas etre efface avec cleanup() )
|
||||
chdir ".." if(cwd() =~ /$REP_TMP/);
|
||||
cleanup();
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}#sub sortie_programme
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
#subroutine qui ecrit une rubrique du fichier du README
|
||||
#subroutine pour generer un label de section sur 9 caracteres de A a Z
|
||||
# rq : la variable $LABEL_ACTUEL est hors subroutine pour la rendre globale
|
||||
# elle est initialisee lors du premier appel a la subroutine
|
||||
# rq : le label est constitue de 9 caracteres (a priori, il ne faut pas depasser ce nombre
|
||||
# pour eviter une erreur latex dans les index)
|
||||
# de toute facon, avec 9 caracteres, la batterie peut contenir jusqu a 26 puissance 9, soit plus de 5400 milliards de tests !!!!
|
||||
#--------------------------------------------------
|
||||
sub ecrire_rubrique_README {
|
||||
my $LABEL_ACTUEL;
|
||||
sub genere_label_section {
|
||||
#initialisation du label actuel si c est la premiere fois que cette subroutine est appelee
|
||||
$LABEL_ACTUEL = 'AAAAAAAAA' if(not defined $LABEL_ACTUEL);
|
||||
|
||||
|
||||
#le label a renvoyer est le label actuel
|
||||
my $label_a_renvoyer = $LABEL_ACTUEL;
|
||||
|
||||
|
||||
#table de conversion lettre en position alphabet (et l inverse)
|
||||
my $TAB_CONVERT_lettre2pos = {
|
||||
'A' => 1, 'B' => 2, 'C' => 3, 'D' => 4, 'E' => 5, 'F' => 6,
|
||||
'G' => 7, 'H' => 8, 'I' => 9, 'J' => 10, 'K' => 11, 'L' => 12,
|
||||
'M' => 13, 'N' => 14, 'O' => 15, 'P' => 16, 'Q' => 17, 'R' => 18,
|
||||
'S' => 19, 'T' => 20, 'U' => 21, 'V' => 22, 'W' => 23, 'X' => 24,
|
||||
'Y' => 25, 'Z' => 26};
|
||||
my $TAB_CONVERT_pos2lettre = {
|
||||
'1' => 'A', '2' => 'B', '3' => 'C', '4' => 'D', '5' => 'E', '6' => 'F',
|
||||
'7' => 'G', '8' => 'H', '9' => 'I', '10' => 'J', '11' => 'K', '12' => 'L',
|
||||
'13' => 'M', '14' => 'N', '15' => 'O', '16' => 'P', '17' => 'Q', '18' => 'R',
|
||||
'19' => 'S', '20' => 'T', '21' => 'U', '22' => 'V', '23' => 'W', '24' => 'X',
|
||||
'25' => 'Y', '26' => 'Z'};
|
||||
|
||||
#- - - - - - - - -
|
||||
#actualisation du label pour le prochain appel
|
||||
#- - - - - - - - -
|
||||
#label actuel sous forme d un tableau d entier par conversion
|
||||
my @tab_label = map {$TAB_CONVERT_lettre2pos->{$_}} split(//, $LABEL_ACTUEL);
|
||||
my $nb_chars = $#tab_label + 1;
|
||||
|
||||
#test qui ne devrait jamais poser probleme (a moins que la batterie de verif ne contiennent 26 puissance 9 tests !!!!)
|
||||
my $is_max_test = 1;
|
||||
for(my $i=0; $i<$nb_chars; $i++) {$is_max_test = 0 if($tab_label[$i] != 26);}
|
||||
if($is_max_test) {
|
||||
warn "\n";
|
||||
afficher_ligne_pointilles('warn');
|
||||
warn "Erreur (prog:$NOM_PROG) : le nombre de tests de la batterie a atteint son maximum de 26 puissance $nb_chars !!!!!!\n\n";
|
||||
afficher_ligne_pointilles('warn');
|
||||
warn "\n";
|
||||
sortie_programme();
|
||||
}
|
||||
|
||||
#incrementation du label
|
||||
$tab_label[0]++;
|
||||
for(my $i=0; $i<$nb_chars; $i++) {
|
||||
#incrementation de l indice suivant si l indice courant depasse 26
|
||||
if($tab_label[$i] > 26) {
|
||||
$tab_label[$i] = 1;
|
||||
$tab_label[$i+1]++ if($i != ($nb_chars-1));
|
||||
}
|
||||
else {
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
#-conversion inverse
|
||||
$LABEL_ACTUEL = '';
|
||||
foreach my $val (@tab_label) {$LABEL_ACTUEL .= $TAB_CONVERT_pos2lettre->{$val};}
|
||||
|
||||
#rappel : on return la valeur precedente de $LABEL_ACTUEL et non celle que l on vient d actualiser
|
||||
return $label_a_renvoyer;
|
||||
}#sub genere_label_section
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
#subroutine pour recopier les fichiers README d une
|
||||
# liste de repertoires de tests vers un fichier ouvert
|
||||
#--------------------------------------------------
|
||||
#
|
||||
# en entree :
|
||||
# - lettre indiquant test rapide ou long (donc la lettre "R" ou "L")
|
||||
# - handle du fichier destination (donc deja ouvert par open() )
|
||||
# - reference vers la liste des repertoires de test (antislash devant pour une reference : par exemple \@REP_TESTS_R)
|
||||
# - liste des noms de rubriques a recopier (
|
||||
#
|
||||
# pas de sortie
|
||||
#
|
||||
sub recopie_README {
|
||||
my $lettre_rapide_ou_long = shift;#doit etre egal a R ou L
|
||||
my $handle_destination = shift;
|
||||
my $ref_liste_rep_tests = shift;
|
||||
my @liste_rubriques = @_;
|
||||
|
||||
my $no_test = 0;
|
||||
foreach my $rep_test (@$ref_liste_rep_tests) {
|
||||
$_ = $rep_test; s/^\.+\///;#suppression de l eventuel ./ ou ../ devant le nom du repertoire
|
||||
print "ajout test : $_\n";
|
||||
|
||||
#incrementation numero test
|
||||
$no_test++;
|
||||
|
||||
#chemin du fichier README
|
||||
my $fic_README = "../$rep_test/README";
|
||||
|
||||
#derniere partie du nom du repertoire
|
||||
my $nom_test = basename $rep_test;
|
||||
$nom_test =~ s/_/\$\\_\$/g;#tiret bas entre dollars
|
||||
|
||||
#saisie de l encodage du README (par defaut : rien) (rq : on utilise la commande linux/Unix "file" pour avoir des infos sur l encodage)
|
||||
my $encodage_source = '';
|
||||
#cas UTF-nombre (exemples : UTF-8, UTF-16, etc...)
|
||||
if(qx(file $fic_README) =~ /utf-(\d+)/i) {
|
||||
$encodage_source = ":encoding(UTF-$1)";
|
||||
}
|
||||
#autres cas a definir
|
||||
#elsif() {}
|
||||
|
||||
|
||||
#- - - - - - - - - - - - - - - -
|
||||
#ecriture d une nouvelle sous-section pour ce test
|
||||
#- - - - - - - - - - - - - - - -
|
||||
print $HANDLE_TEX "\\subsection{Test\$\\_\$$lettre_rapide_ou_long n\$^\\circ\$$no_test : $nom_test}\n";
|
||||
|
||||
#- - - - - - - - - - - - - - - -
|
||||
#indexage et ecriture de la liste des mots-cles eventuels de ce test
|
||||
#- - - - - - - - - - - - - - - -
|
||||
my @mots_cles = saisir_mots_cles_README($fic_README, $encodage_source);
|
||||
if($#mots_cles > -1) {
|
||||
#indexage
|
||||
#--generation d un label
|
||||
my $label_section = genere_label_section();
|
||||
print $HANDLE_TEX "\\label{$label_section}\n";
|
||||
#indexage de chaque mot-cle via commande \ind (voir preambule du document latex dans la subroutine preambule_fic_tex_tmp() )
|
||||
foreach my $mot_cle (@mots_cles) {
|
||||
print $HANDLE_TEX "\\ind{$mot_cle}{$label_section}\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#- - - - - - - - - - - - - - - -
|
||||
#ecriture du nom complet du repertoire sous forme d une arborescence simple
|
||||
#- - - - - - - - - - - - - - - -
|
||||
print $HANDLE_TEX "\\noindent \\underline{R\\\'epertoire} :\\\\\n";
|
||||
my @rep_arbo = split(/\/+/, $rep_test);
|
||||
shift(@rep_arbo) if($rep_arbo[0] =~ /^\.+$/);#suppression d un eventuel ./ ou ../ devant le nom du repertoire
|
||||
#--variables pour faire une jolie indentation via \hspace
|
||||
my $hspace_cm = 0.5;
|
||||
my $hspace_cm_incr = 0.35;
|
||||
foreach my $rep_arbo (@rep_arbo) {
|
||||
$rep_arbo =~ s/_/\$\\_\$/g;#eventuels tirets bas entre dollars
|
||||
print $HANDLE_TEX "\\hspace*{${hspace_cm}cm}\$\\triangleright\$ $rep_arbo\\\\\n";
|
||||
$hspace_cm += $hspace_cm_incr;
|
||||
}
|
||||
|
||||
|
||||
#- - - - - - - - - - - - - - - -
|
||||
#recopie des rubriques dans l ordre de la liste @liste_rubriques
|
||||
#- - - - - - - - - - - - - - - -
|
||||
#indicateurs de reussite de la recopie des rubriques du README
|
||||
my ($is_probleme_rubrique, $message);
|
||||
|
||||
foreach my $rubrique (@liste_rubriques) {
|
||||
$rubrique =~ s/^\s+//;
|
||||
$rubrique =~ s/\s+$//;
|
||||
my @mots_rubriques = split(/\s+/, $rubrique);
|
||||
#ecriture de la rubrique
|
||||
($is_probleme_rubrique, $message) = recopie_rubrique_README($fic_README, $encodage_source, $HANDLE_TEX, @mots_rubriques);
|
||||
#-- erreur si la rubrique n a pas ete trouvee
|
||||
if($is_probleme_rubrique) {
|
||||
warn "Erreur (prog:$NOM_PROG) : lecture README => probleme dans la recopie de la rubrique \"$rubrique\" avec le message d erreur suivant :\n";
|
||||
warn " **$message\n";
|
||||
warn "\n";
|
||||
sortie_programme();
|
||||
}
|
||||
}#foreach my $rubrique (@liste_rubriques)
|
||||
|
||||
}#foreach my $rep_test (@$ref_liste_rep_tests)
|
||||
}#sub recopie_README
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
#subroutine qui ecrit une rubrique du fichier README vers un fichier deja ouvert
|
||||
#--------------------------------------------------
|
||||
#
|
||||
# en entree :
|
||||
# - chemin vers le fichier README
|
||||
# - encodage du fichier README (de la forme ":encoding(nom_encodage)", par exemple : ":encoding(UTF-8)"
|
||||
# - handle du fichier destination (donc deja ouvert par open() )
|
||||
# - liste de mots de la rubrique
|
||||
#
|
||||
# en sortie :
|
||||
# - un indicateur de reussite avec les valeurs suivantes :
|
||||
# 0 => la rubrique a ete trouvee et recopiee avec succes
|
||||
# 1 => il y a eu une non-conformite
|
||||
# - message
|
||||
#
|
||||
sub recopie_rubrique_README {
|
||||
my $fic_source = shift;
|
||||
my $encodage_source = shift;
|
||||
my $handle_fic_destination = shift;
|
||||
my @mots_rubriques = @_;
|
||||
|
||||
#construction du titre de la rubrique a partir des mots @mots_rubriques
|
||||
# et d une expression reguliere pour rechercher la rubrique
|
||||
my $regexp = shift(@mots_rubriques);
|
||||
my $nom_rubrique = $regexp;
|
||||
foreach my $mot (@mots_rubriques) {
|
||||
$regexp .= '\s+'."$mot";
|
||||
$nom_rubrique .= " $mot";
|
||||
}
|
||||
#a ce stade, le motif a trouver est de la forme : mot\s+mot\s+mot etc...
|
||||
|
||||
#indicateur de reussite et message associe
|
||||
my $is_probleme_rubrique = 1;
|
||||
my $message = 'rubrique introuvable';
|
||||
|
||||
open(my $Hlocal, "<$encodage_source", "$fic_source");
|
||||
while(<$Hlocal>) {
|
||||
next if(not /^\s*$regexp\s*$/i);
|
||||
$_ = <$Hlocal>;
|
||||
print $handle_fic_destination "\\subsubsection{Description du calcul}\n";
|
||||
next if(not /^\s*$regexp\s*$/i);#recherche du bloc correspondant a la rubrique
|
||||
#normalement, la ligne suivante est une ligne de pointilles
|
||||
$_ = <$Hlocal>; chomp;
|
||||
#-si ce n est pas une ligne de pointilles => echec
|
||||
if(not /^\s*-+\s*$/) {
|
||||
$is_probleme_rubrique = 1;
|
||||
$message = 'rubrique trouvee mais non conforme (absence de la ligne de pointilles apres le nom de la rubrique)';
|
||||
last;
|
||||
}
|
||||
|
||||
#- - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
#recopie de la rubrique vers le fichier de destination
|
||||
#- - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
$is_probleme_rubrique = 0;
|
||||
$message = 'rubrique trouvee et recopiee avec succes';
|
||||
|
||||
#creation d une sous-sous-section pour cette rubrique
|
||||
print $handle_fic_destination "\\subsubsection{$nom_rubrique}\n";
|
||||
|
||||
while(<$Hlocal>) {
|
||||
last if(/^\s*-+$/);
|
||||
chomp();
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------
|
||||
#A FAIRE EVOLUER : gestion au cas par cas des caracteres speciaux dans Latex
|
||||
#--------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------
|
||||
s/_/\$\\_\$/g;#tiret bas (solution : entre dollars)
|
||||
s/\^($format_reel)/\$\^$1\$/g;#cas d un exposant mathematique : symbole circonflexe suivi d un nombre (solution : entre dollars)
|
||||
s/([<>])/\$$1\$/;#symboles inferieur et superieur (solution : entre dollars)
|
||||
#--------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------
|
||||
last if(/^\s*-+$/);#critere d arret : ligne de pointilles (a moins que la fin du fichier n ait ete atteinte avant)
|
||||
chomp;
|
||||
|
||||
#gestion des caracteres ou groupes de caracteres speciaux
|
||||
$_ = translate_to_latex($_);
|
||||
|
||||
print $handle_fic_destination "$_\\\\\n";
|
||||
}
|
||||
|
||||
last;
|
||||
}
|
||||
close($Hlocal);
|
||||
|
||||
}#sub ecrire_rubrique_README
|
||||
return ($is_probleme_rubrique, $message);
|
||||
}#sub recopie_rubrique_README
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
#subroutine permettant de saisir les mots-cles contenus dans la rubrique "Mots-cles" d un fichier README
|
||||
# important : cette subroutine s attend a trouver un seul mot-cle par ligne et pouvant contenir des espaces (exemple : "contraintes planes")
|
||||
# rq : le nom de la rubrique a trouver est contenu dans la variable $NOM_RUBRIQUE_MOTS_CLES
|
||||
#--------------------------------------------------
|
||||
#
|
||||
# en entree :
|
||||
# - chemin vers le fichier README
|
||||
# - encodage du fichier README (de la forme ":encoding(nom_encodage)", par exemple : ":encoding(UTF-8)"
|
||||
#
|
||||
# en sortie :
|
||||
# - liste de mots-cles
|
||||
#
|
||||
sub saisir_mots_cles_README {
|
||||
my $fic_source = shift;
|
||||
my $encodage_source = shift;
|
||||
|
||||
#construction d une expression reguliere pour rechercher la rubrique
|
||||
$NOM_RUBRIQUE_MOTS_CLES =~ s/^\s+//;
|
||||
$NOM_RUBRIQUE_MOTS_CLES =~ s/\s+$//;
|
||||
my @mots_rubrique = split(/\s+/, $NOM_RUBRIQUE_MOTS_CLES);
|
||||
my $regexp = shift(@mots_rubrique);
|
||||
foreach my $mot (@mots_rubrique) {
|
||||
$regexp .= '\s+'."$mot";
|
||||
}
|
||||
#a ce stade, le motif a trouver est de la forme : mot\s+mot\s+mot etc...
|
||||
|
||||
#liste des mots-cles de la rubrique Mots-cles de ce README
|
||||
my @liste_mots_cles;
|
||||
|
||||
open(my $Hlocal, "<$encodage_source", "$fic_source");
|
||||
while(<$Hlocal>) {
|
||||
next if(not /^\s*$regexp\s*$/i);#recherche du bloc correspondant a la rubrique
|
||||
#normalement, la ligne suivante est une ligne de pointilles
|
||||
$_ = <$Hlocal>; chomp;
|
||||
#-si ce n est pas une ligne de pointilles => echec
|
||||
if(not /^\s*-+\s*$/) {
|
||||
last;
|
||||
}
|
||||
|
||||
#- - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
#saisie des mots-cles
|
||||
#- - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
while(<$Hlocal>) {
|
||||
last if(/^\s*-+$/);#critere d arret : ligne de pointilles (a moins que la fin du fichier n ait ete atteinte avant)
|
||||
next if(/^\s*$/);
|
||||
chomp;
|
||||
s/^\s+//; s/\s+$//;
|
||||
|
||||
#gestion des caracteres ou groupes de caracteres speciaux
|
||||
$_ = translate_to_latex($_);
|
||||
|
||||
#ajout du mots-cle a la liste
|
||||
push(@liste_mots_cles, $_);
|
||||
}
|
||||
|
||||
last;
|
||||
}
|
||||
close($Hlocal);
|
||||
|
||||
return(@liste_mots_cles);
|
||||
}#sub saisir_mots_cles_README
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
#subroutine de conversion des caracteres ou groupe de caracteres speciaux en vue
|
||||
# d une ecriture latex
|
||||
#--------------------------------------------------
|
||||
#
|
||||
# en entree :
|
||||
# - une chaine de caracteres
|
||||
#
|
||||
# en sortie :
|
||||
# - la chaine convertie
|
||||
#
|
||||
sub translate_to_latex {
|
||||
my $string = shift;
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------
|
||||
#A FAIRE EVOLUER : gestion au cas par cas des caracteres speciaux dans Latex
|
||||
#
|
||||
# (important : ne pas oublier de l option "g" a la fin de l operateur de substitution => $string =~ s/bla bla/ha ha/g; )
|
||||
#--------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------
|
||||
$string =~ s/_/\$\\_\$/g;#tiret bas (solution : antislash devant + entre dollars)
|
||||
$string =~ s/\^($format_reel)/\$\^$1\$/g;#cas d un exposant mathematique : symbole circonflexe suivi d un nombre (solution : entre dollars)
|
||||
$string =~ s/([<>])/\$$1\$/g;#symboles inferieur et superieur (solution : entre dollars)
|
||||
#ajouter ici d autres cas sous la forme : $string =~ s/bla bla/ha ha/g;
|
||||
#--------------------------------------------------------------------------------
|
||||
#--------------------------------------------------------------------------------
|
||||
|
||||
return $string;
|
||||
}#sub translate_to_latex
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
#subroutine permettant d ecrire une ligne de pointilles de la largeur du terminal
|
||||
#--------------------------------------------------
|
||||
sub print_ligne_pointilles {
|
||||
#
|
||||
# en entree :
|
||||
# - print ou warn (suivant que l on souhaite afficher avec print (donc vers STDOUT) ou warn (donc vers STDERR)
|
||||
#
|
||||
sub afficher_ligne_pointilles {
|
||||
use Term::ReadKey;
|
||||
my $nb_char_largeur_terminal = ( GetTerminalSize() )[0];
|
||||
my $nb_char_largeur_terminal = ( GetTerminalSize() )[0];#largeur du terminal en nombre de caracteres (via package Term::ReadKey)
|
||||
|
||||
my $funct_disp = shift;
|
||||
|
||||
|
||||
my $ligne_pointilles = '';
|
||||
$ligne_pointilles .= '-' for(1 .. $nb_char_largeur_terminal);
|
||||
print "$ligne_pointilles\n";
|
||||
}#sub print_message_avec_pointilles
|
||||
|
||||
print "$ligne_pointilles\n" if($funct_disp eq 'print');
|
||||
warn "$ligne_pointilles\n" if($funct_disp eq 'warn');
|
||||
}#sub afficher_ligne_pointilles
|
||||
|
||||
|
||||
#--------------------------------------------------
|
||||
|
@ -390,7 +679,7 @@ sub preambule_fic_tex_tmp {
|
|||
\usepackage{amsmath}
|
||||
\usepackage{subfigure}
|
||||
%\usepackage{/Users/troufflard/LATEX/BIBLIOTHEQUE/macro_figure}
|
||||
%\usepackage{eurosym}
|
||||
%\usepackage{eurosym}
|
||||
\usepackage{calc}
|
||||
%\usepackage{t1enc}
|
||||
\usepackage{ifthen}
|
||||
|
@ -439,6 +728,19 @@ citecolor= green %couleur citation biblio
|
|||
|
||||
%\pagestyle{arabic}
|
||||
\pagenumbering{arabic}
|
||||
|
||||
%remarque : le package makeidx doit etre place apres \usepackage{hyperref} pour beneficier des liens hyperef dans l index
|
||||
\usepackage{imakeidx}
|
||||
%-- nouvelles commandes pour que ce soit des numeros de section (et non des pages) qui apparaissent dans l index
|
||||
% selon astuce (2015-06-26) : http://www.latex-community.org/forum/viewtopic.php?f=51&t=14334
|
||||
%:: \ind => 2 arguments : index entry, label de section
|
||||
\newcommand{\ind}[2]{\index{#1|inds{\ref{#2}}}}
|
||||
%:: \inds => ne sert qu a enlever les numeros de page dans la \ref de \ind
|
||||
\newcommand{\inds}[2]{#1}
|
||||
% exemple de sequence avec une section et 2 mots indexes concernant cette section :
|
||||
% \section{Revelations : la face cachee du monde de la recherche}\label{section_1}\ind{scandale}{section_1}\ind{Capital_sur_M6}{section_1}
|
||||
\makeindex[intoc]
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
|
|
Binary file not shown.
Loading…
Reference in a new issue