#!/usr/bin/perl
# dans l'invite de commande : perl concordance.pl
# début de récupération des paramètres.
print "le nom du fichier de travail est : ";
my $file=<STDIN>; 	# attente de la réponse stockée dans <STDIN>
chomp ($file); 	# chomp permet de supprimer le retour-chariot de la ligne précédente
print "le pole pour la correspondance est : ";
my $pole=<STDIN>;  	# attente de la réponse stockée dans <STDIN>
chomp ($pole); 	# chomp permet de supprimer le retour-chariot de la ligne précédente
print "le nombre de mots du contexte à afficher est : ";
my $nbdemots=<STDIN>;
chomp ($nbdemots);


# préparation de la sortie HTML
open (OUT, ">concordance.html");
print OUT "<HTML> <BODY bgcolor=\"black\">\n";
print OUT "<p align=\"center\"><font color=\"white\">Concordance de \"$pole\" dans le fichier $file <br/> construite avec le programme $0 </p> \n";
# $0 est une variable spéciale en Perl qui permet de récupérer le nom du programme en cours d'éxécution
print OUT "<TABLE align=\"center\" bgcolor=\"white\" border=\"1\" \n"; 	# écriture de l'en-tête du tableau
print OUT "<tr> <td/> <td align=\"right\">Contexte gauche</td> <td align=\"center\">Pole</td> <td align=\"left\">Contexte droit</td> </tr> \n";

	$nbdemots; # la variable $nbdemots contient le nombre de mots que l'utilisateur entre au clavier
		
# fin de lecture des paramètres de la préparation du fichier en sortie

open (FILE, "$file");	 # ouverture du fichier de travail
$k=1; 	# début du compteur
	while (my $ligne = <FILE>) { 	# lecture du fichier ouvert ligne à ligne
		while ($ligne=~/\b$pole\b/gi) { 	
		# tant qu'on peut trouver le pole dans la chaîne de caractères, on le fait. "\b...\b" permet de ne demander que le pole et non pas un début ou une fin de mot. L'option i permet de rechercher aussi parmiles majuscules.
		#my $contgauche = $`; 	# on récupère la variable du contexte gauche
		my $p = $&; 	# on récupère la variable du pole
		my $droite = $'; 	# on récupère la variable du contexte droit
		my @gauche = split(/[\W]+/, $`); 
		$droite=~s/^ +//; 	# il faut enlever les blancs au début, pour que le contexte droit commence directement par un mot et non par un blanc.
		my @droite = split(/[\W]+/, $droite);
		# transformation des mots des contextes gauches et droits en un tableau. [\W]+ : tout ce qui n'est pas un caractère alphanumérique
		my $g="";
		my $d="";
		for (my $i=1;$i<=$nbdemots;$i++)
			{
			$d.=" ".$droite[$i-1];
			$g = $gauche[$#contgauche-$i+1]." ".$g;
			}	# fin de boucle for
		
		#if (($contgauche eq "") || ($contgauche=~/^[ ]+$/)) {$contgauche="&nbsp;"};		# si $contgauche est vide ou ne contient rien, on met un espace html à la place dans le tableau
		#if (($contdroit eq "") || ($contdroit=~/^[ ]*$/)) {$contdroit="&nbsp;"};	# si $contdroit est vide ou ne contient rien, on met un espace html à la place dans le tableau
		print OUT "<tr> <td>$i</td> <td align=\"right\">$g</td> <td align=\"center\">&nbsp;$p&nbsp;</td> <td align=\"left\">$d</td> </tr>";
		# impression des contextes contenant le pole et du pole dans le tableau
		$k++; # incrémentation du compteur
		} 	# fermeture de la 2ème boucle while
	}	# fermeture de la 1ère boucle while


print OUT "</TABLE> \n"; 	# fermeture de la balise <TABLE> dans le fichier HTML
print OUT "</BODY> </HTML> \n"; 	# fermeture des balises <BODY> et <HTML>
close (OUT); 	# fermeture du fichier en écriture (html)
close (FILE); 	# fermeture du fichier lu
