#!/usr/bin/perl
#########################################
# DESCRIPTION DU PROGRAMME
# Recherche de patrons syntaxiques dans le corpus (un même fichier avec 5 formats/mise en formes différentes). 
# Le programme doit être générique.
#########################################

#########################################
# INTERACTIONS UTILISATEUR
#########################################
print "Quel est le format du fichier traiter (ne pas écrire le point)?\n";
$format=<STDIN>;
chomp $format; # cette variable va servir à : (1) ouvrir le bon fichier ; (2) lancer le traitement correspondant à sa mise en forme spécifique

print "Quel mot chercher ? (ex: soins bebe douloureux detendu contact pleure)\n";
$mot=<STDIN>;
chomp $mot;

print "Combien de mots AVANT l'occurrence ?\n";
$nbr1=<STDIN>;
chomp $nbr1 ;
--$nbr1 ; # désincrémentation de 1 (ce nbr va être utilisé pour indiquer une POSITION dans un tableau -- or la numérotation des tableaux commence à 0)

print "Combien de mots APRES l'occurrence ?\n";
$nbr2=<STDIN>;
chomp $nbr2 ;
--$nbr2 ;

#########################################
# SORTIE
#########################################
open (FILE, "p96.$format");
open (FILEOUT, ">concordancier5_$format.html");

print FILEOUT "<HTML>\n";
print FILEOUT "<HEAD><TITLE>Concordances pour : $mot</TITLE></HEAD>\n";
print FILEOUT "<BODY bgcolor=\"#FFFFFF\">\n";
print FILEOUT "<TABLE bgcolor=\"#3399CC\"><TR><TD><u>Forme recherchée</u> :		</TD><TD><i><b>$mot</b></i></TD></TR><TR><TD><u>Format traité</u> :		</TD><TD><b>.$format</b></TD></TR></TABLE>\n";
print FILEOUT "<TABLE width=\"50%\" align=\"center\">\n";
print FILEOUT "<TR bgcolor=\"#CDB99C\"><TD align=\"right\"><b>Contexte gauche</b></TD><TD align=\"center\"><b>Forme pole</b></TD><TD align=\"left\"><b>Contexte droit</b></TD></TR>\n";

#########################################
# TRAITEMENT
#########################################
while ($ligne = <FILE>)
{
	if ($format eq "tag"){
		if ($ligne=~/($mot)/){
			$gauche = $`;
			$droite = $';
			$pole = $1;								# on ne récupère que le mot recherché (contenu des parenthèses)
			chomp($droite);
			@g = split (/\/[A-Z|0-9]* /, $gauche); # segmentation et suppression des étiquettes
			@d = split (/\/[A-Z|0-9]* /, $droite);
			if ($#g==0){
				push (@g, " ");}
			$t=$#g-$nbr1;							# $t est à $# de @g (cad le dernier indice du tableau g) moins $nbr1 (cad le nbr de mots à afficher (moins 1))
			$u=$nbr2+1;
			print FILEOUT "<TR>	<TD align=\"right\">@g[$t..$#g]</TD>
								<TD align=\"center\"><font color=\"#CC0000\"><b>$pole</b></font></TD>
								<TD align=\"left\">@d[0..$u]</TD></TR>";
		}
	}
	
	if ($format eq "bal"){
		if ($ligne=~/<TXT>(.*)($mot)([^<]+)</){		# on ne récupère que ce qui est contenu entre la dernière balise du début et la première balise de fin de texte
			$gauche = $1;
			$droite = $3;
			$pole = $2;
			chomp($droite);
			$droite=~s/^ +//g;
			$droite=~s/ +$//g;
			@g = split (/ /, $gauche);
			@d = split (/ /, $droite);
			$t=$#g-$nbr1;
			print FILEOUT "<TR>	<TD align=\"right\">@g[$t..$#g]</TD>
								<TD align=\"center\"><font color=\"#CC0000\"><b>$pole</b></font></TD>
								<TD align=\"left\">@d[0..$nbr2]</TD></TR>";
		}
	}
	
	if ($format eq "fic"){
		if ($ligne=~/$mot/){
			$gauche = $`;
			$pole = $&;
			$droite = $';
			$gauche=~s/<[^>]+>//;
			$droite=~s/^ +//g;
			$droite=~s/ +$//g;
			@g = split (/ /, $gauche);
			@d = split (/ /, $droite);
			$t=$#g-$nbr1;
			print FILEOUT "<TR>	<TD align=\"right\">@g[$t..$#g]</TD>
								<TD align=\"center\"><font color=\"#CC0000\"><b>$pole</b></font></TD>
								<TD align=\"left\">@d[0..$nbr2]</TD></TR>";
		}
	}
	
	if ($format eq "tab"){
		if ($ligne=~/$mot/i){ 			# insensibilisation à la casse (dans le fichier tab il y a des majuscules)
			$gauche = $`;
			$pole = $&;
			$droite = $';
			
			$gauche=~s/N° //g;
			$gauche=~s/[0-9]+//g;
			$gauche=~s/- //g;
			$gauche=~s/[ ]+/ /g;
			$droite =~s/\.\s+[0-9]+.*//g;
			$droite=~s/- //g;
			$gauche=~s/[ ]+/ /g;
			$droite=~s/^ +//g;
			$droite=~s/ +$//g;
			
			@g = split (/ /, $gauche);
			@d = split (/ /, $droite);
			$t=$#g-$nbr1;
			print FILEOUT "<TR>	<TD align=\"right\">@g[$t..$#g]</TD>
								<TD align=\"center\"><font color=\"#CC0000\"><b>$pole</b></font></TD>
								<TD align=\"left\">@d[0..$nbr2]</TD></TR>";
		}
	}
}
print FILEOUT "</BODY></TABLE></HTML>\n";
close (FILE);
close (FILEOUT);