#!/usr/bin/perl

#ON RECUPERE LES PARAMETRES
#On affiche "Donnez moi le nom du fichier de travail : "
print "Donnez moi le nom du fichier de travail : ";
#On affecte à la variable $fichierdetravail le contenu de l'entrée standard <STDIN> (Pointeur qui permet de lire le flux d'entrée au clavier)
my $fichierdetravail=<STDIN>;
#On supprime le dernier caractère contenu dans la variable $fichierdetravail seulement si celui-ci est un retour à la ligne
chomp ($fichierdetravail);
#On affiche "Donnez moi le pole a chercher : "
print "Donnez moi le pole a chercher : ";
#On affecte à la variable $pole le contenu de l'entrée standard <STDIN> (Pointeur qui permet de lire le flux d'entrée au clavier)
my $pole=<STDIN>;
#On supprime le dernier caractère contenu dans la variable $pole seulement si celui-ci est un retour à la ligne
chomp ($pole);
#On affiche "Donnez moi le nombre de mots qu'il faut afficher autour du pole : "
print "Donnez moi le nombre de mots qu'il faut afficher autour du pole : ";
#On affecte à la variable $nbmots le contenu de l'entrée standard <STDIN> (Pointeur qui permet de lire le flux d'entrée au clavier)
my $nbmots=<STDIN>;
#On supprime le dernier caractère contenu dans la variable $nbmots seulement si celui-ci est un retour à la ligne
chomp ($nbmots);

#ON PREPARE LA SORTIE HTML
#On ouvre en écriture le fichier resultat.html et on le référence sous le nom FICHIERSORTIE
open(FICHIERSORTIE, ">resultat.html");
#On écrit le début du fichier html, l'entête et le début du corps dans le fichier référencé sous le nom FICHIERSORTIE
print FICHIERSORTIE "<html>\n<head><style type=\"text/css\">body { font-family: \"arial\" }</style></head><body bgcolor=\"black\">\n";
#On écrit le début du tableau dans le fichier référencé sous le nom FICHIERSORTIE
print FICHIERSORTIE "<table align=\"center\" border=\"1\" bgcolor=\"white\">\n";
#On écrit la ligne d'entête du tableau dans le fichier référencé sous le nom FICHIERSORTIE
print FICHIERSORTIE "<tr><td align=\"center\"><b>Contexte n°</b></td><td align=\"right\"><b>Contexte gauche</b></td><td align=\"center\"><b>Pole</b></td><td align=\"left\"><b>Contexte droit</b></td></tr>\n";

#ON TROUVE LES CONTEXTES GAUCHE ET DROIT AUTOUR DU POLE
#On crée un compteur $compteur et on l'initialise à 0
my $compteur=0;
#On ouvre en lecture le fichier dont le nom est contenu dans la variable $fichierdetravail et on le référence sous le nom FICHIERENTREE
open(FICHIERENTREE, "$fichierdetravail");
#Tant qu'on peut associer une ligne du fichier référencé sous le nom FICHIERENTREE à la variable $ligne, on exécute le bloc d'instructions
while (my $ligne=<FICHIERENTREE>) {
	#Tant que le contenu de la variable $ligne contient la forme pole contenue dans la variable $pole, on exécute le bloc d'instructions
	while (my $ligne=~/\b$pole\/[A-Z]+/gi) {
		#On incrémente le compteur $compteur
		++$compteur;
		#On sépare (Grâce aux espaces) les mots contenus dans la chaîne de caractères qui se trouve à gauche du motif cherché (Contenu dans la variable $`) et on les affecte au tableau @gauche
		my @gauche=split(/ /,$`);
		#On affecte à la variable $mot le motif recherché (Contenu dans la variable $&)
		my $mot=$&;
		#On affecte à la variable $droite la chaîne de caractères qui se trouve à droite du motif recherché (Contenu dans la variable $')
		my $droite=$';
		#On enlève les blancs qui se trouvent au début de la chaîne de caractères de la variable $droite
		my $droite=~s/^ +//;
		#On sépare (Grâce aux espaces) les mots contenus dans la variable $droite et on les affecte au tableau @droite
		my @droite=split(/ /,$droite);
		#On crée une variable vide qu'on nomme $d
		my $d="";
		#On crée une variable vide qu'on nomme $g
		my $g="";
		#On crée une boucle avec une variable $i comme compteur et qui est initialisé à 1
		#On incrémente à chaque passage ($i++) la variable $i
		#On exécute le bloc d'instructions (= Instructions contenues entre accolades) tant que la variable $i est inférieure ou égale à la valeur contenue dans la variable $nbmots ($i<=$nbmots)
		for (my $i=1;$i<=$nbmots;$i++) {
			#On met à la suite du contenu de la variable $d un espace et le $i-1 ème élément du tableau $droite
			$d.=" ".$droite[$i-1];
			#On affecte à la variable $g, le numéro du dernier élément du tableau $gauche - $i + 1, suivi d'un espace et du contenu de la variable $g
			$g=$gauche[$#gauche-$i+1]." ".$g;
		}
		#Si le contenu de la variable $g ne contient rien ou contient un ou plusieurs espace(s), on remplace le contenu de la variable $g par "&nbsp;" (= Espace insécable)
		if (($g eq "") || ($g=~/^[ ]+$/)) {$g="&nbsp;"};
		#Si le contenu de la variable $d ne contient rien ou contient un ou plusieurs espace(s), on remplace le contenu de la variable $d par "&nbsp;" (= Espace insécable)
		if (($d eq "") || ($d=~/^[ ]*$/)) {$d="&nbsp;"};
		#On écrit le contenu des cellules de la ligne du tableau dans le fichier référencé sous le nom FICHIERSORTIE
		print FICHIERSORTIE "<tr><td align=\"center\"><font color=\"green\"><b>$compteur</b></font></td><td align=\"right\">$g</td><td align=\"center\"><font color=\"red\"><b>$mot</b></font></td><td align=\"left\">$d</td></tr>\n";
	}
}

#On écrit la fin du tableau, la fin du corps et la fin du fichier html dans le fichier référencé sous le nom FICHIERSORTIE
print FICHIERSORTIE "</table>\n</body>\n</html>\n";
#On ferme le fichier référencé sous le nom FICHIERSORTIE
close(FICHIERSORTIE);
#On ferme le fichier référencé sous le nom FICHIERENTREE
close(FICHIERENTREE);