#!/usr/bin/perl
#On affiche "Donnez moi plusieurs formes graphiques (Les separer par un espace) :"
#On retourne à la ligne
print "Donnez moi plusieurs formes graphiques (Les separer par un espace) :\n";
#On affecte à la variable $motifs le contenu de l'entrée standard <STDIN> (Pointeur qui permet de lire le flux d'entrée au clavier)
my $motifs=<STDIN>;
#On supprime le dernier caractère contenu dans la variable $motifs seulement si celui-ci est un retour à la ligne
chomp ($motifs);
#On sépare (Grâce aux espaces) les mots contenus dans la variable $motifs et on les affecte au tableau @mots
@mots=split(/ /,$motifs);
#On ouvre en écriture le fichier nommé resultats.html et on le référence sous le nom FICHIERSORTIE1
#Si le fichier n'existe pas, il est créé
#Si le fichier existe déjà, son contenu est écrasé
open(FICHIERSORTIE,">resultats.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>\n<body bgcolor=\"black\">\n";
#Pour chaque élément du tableau @mots qu'on affecte à la variable $mot, on exécute le bloc d'instructions
foreach $mot (@mots) {
	#On écrit le début du tableau dans le fichier référencé sous le nom FICHIERSORTIE
	print FICHIERSORTIE "<p>\n<table border=\"1\" align=\"center\" bgcolor=\"white\">\n<tr>\n";
	#On écrit la colonne
	#On écrit dans la 1ère ligne du tableau "Forme graphique : ", suivi en rouge du contenu de la variable $mot
	print FICHIERSORTIE "<tr align=\"center\">\n<td><h2>Forme graphique : <font color=\"red\">".$mot."</font></h2></td>\n</tr>\n";
	#On ouvre en lecture le fichier nommé p96.fic et on le référence sous le nom FICHIER1
	open(FICHIER1,"p96.fic");
	#On crée un tableau associatif vide qu'on appelle %bebe
	%bebe=();
	#Tant qu'on peut associer une ligne du fichier référencé sous le nom FICHIER1 à la variable $ligne, on exécute le bloc d'instructions
	while ($ligne=<FICHIER1>) {
		#Si le contenu de la variable $ligne contient la chaîne de caractères contenue dans la variable $mot, on exécute le bloc d'instructions
		if ($ligne=~/$mot/i) {
			#On affecte à la variable $1 les chiffres qui se trouvent entre les chevrons au début du contenu de la variable $ligne
			$ligne=~/^<([0-9][0-9][0-9][0-9]*)>/;
			#On affecte à la variable $tmp le motif recherché qui se trouve dans la première paranthèse (Contenu dans la variable $1)
			$tmp=$1;
			#Si le contenu de la variable $tmp contient au début de la chaîne de caractères un 1 suivi de trois autres chiffres, on exécute le bloc d'instructions
			if ($tmp=~/^(1[0-9])[0-9][0-9]/) {
				#On affecte à la variable $tmp le contenu de la première paranthèse (Contenu dans la variable $1)
				$tmp=$1;
			}
			#Sinon si la condition n'est pas remplie, on exécute le bloc d'instructions
			else {
				#On affecte à la variable $tmp la chaîne de caractères contenue dans la variable $tmp du caractère 0 au caractère 1
				$tmp=substr($tmp,0,1);
			}
			#Si les caractères contenus dans la variable $tmp ont une longueur égale à 1 (Donc si la variable $tmp contient un seul caractère), on exécute le bloc d'instructions
			if (length($tmp)==1) {
				#On affecte à la variable $tmp un zéro suivi du contenu de la variable $tmp
				$tmp="0".$tmp;
			}
			#On affecte la valeur 1 à la valeur de la clé $tmp du tableau $bebe
			$bebe{$tmp}=+1;
		}
	}
	#On ferme le fichier référencé sous le nom FICHIER1
	close(FICHIER1);
	#On crée une variable $listebebes vide
	$listebebes="";
	#On crée un compteur $i qui compte les lignes et on l'initialise à 0
	$i=0;
	#Pour chaque élément du tableau %bebe classé par ordre alphabetique qu'on affecte à la variable $nbbebes, on exécute le bloc d'instructions
	foreach $nbbebes (sort(keys %bebe)) {
		#On affecte à la variable $listebebes la valeur contenue dans la variable $listebebes suivie d'un espace et suivie du contenu de la variable $nbbebes
		$listebebes=$listebebes." ".$nbbebes;
		#On incrémente le compteur $i
		$i++;
	}
	#On écrit dans une ligne du tableau "Nombre de bébés concernés : " suivi en bleu et gras du contenu de la variable $i
	#On retourne à la ligne
	print FICHIERSORTIE "<tr>\n<td>Nombre de bébés concernés : <font color=\"blue\"><b>".$i."</b></font><br />";
	#On écrit dans la ligne précédente "Numéros des bébés concernés : " suivi en bleu et gras du contenu de la variable $listebebes
	#On ferme la ligne du tableau
	print FICHIERSORTIE "Numéros des bébés concernés : <font color=\"blue\"><b>".$listebebes."</b></font></td>\n</tr>\n";
	#On ouvre en lecture le fichier nommé p96.bal et on le référence sous le nom FICHIER2
	open(FICHIER2,"p96.bal");
	#On crée un tableau associatif vide qu'on appelle %infirmiere
	%infirmiere=();
	#Tant qu'on peut associer une ligne du fichier référencé sous le nom FICHIER2 à la variable $ligne, on exécute le bloc d'instructions
	while ($ligne=<FICHIER2>) {
		#Si le contenu de la variable $ligne contient la chaîne de caractères contenue dans la variable $mot, on exécute le bloc d'instructions
		if ($ligne=~/$mot/i) {
			#On affecte à la variable $1 les chiffres qui se trouvent après <INFIRMIERE> et qui sont contenus de la variable $ligne
			$ligne=~/<INFIRMIERE>([0-9]+)/;
			#On affecte à la variable $tmp le contenu de la première paranthèse (Contenu dans la variable $1)
			$tmp=$1;
			#Si les caractères contenus dans la variable $tmp ont une longueur égale à 1 (Donc si la variable $tmp contient un seul caractère), on exécute le bloc d'instructions
			if (length($tmp)==1) {
				#On affecte à la variable $tmp un zéro suivi du contenu de la variable $tmp
				$tmp="0".$tmp;
			}
			#On affecte la valeur 1 à la valeur de la clé $tmp du tableau $infirmiere
			$infirmiere{$tmp}=+1;
		}
	}
	#On ferme le fichier référencé sous le nom FICHIER2
	close(FICHIER2);
	#On crée une variable $listeinfirmieres vide
	$listeinfirmieres="";
	#On crée un compteur $i qui compte les lignes et on l'initialise à 0
	$i=0;
	#Pour chaque élément du tableau %infirmiere classé par ordre alphabétique qu'on affecte à la variable $nbinfirmieres, on exécute le bloc d'instructions
	foreach $nbinfirmieres (sort(keys %infirmiere)) {
		#On affecte à la variable $listeinfirmieres la valeur contenue dans la variable $listeinfirmieres suivie d'un espace et suivie du contenu de la variable $nbinfirmieres
		$listeinfirmieres=$listeinfirmieres." ".$nbinfirmieres;
		#On incrémente le compteur $i
		$i++;
	}
	#On écrit dans une ligne du tableau "Nombre d'infirmières employant ce mot : " et suivi en bleu et gras du contenu de la variable $i
	#On retourne à la ligne
	print FICHIERSORTIE "<tr>\n<td>Nombre d'infirmières employant ce mot : <font color=\"blue\"><b>".$i."</b></font><br />";
	#On écrit dans la ligne précédente "Numéros des infirmières employant ce mot : " et suivi en bleu et gras du contenu de la variable $listeinfirmieres
	#On ferme la ligne du tableau
	print FICHIERSORTIE "Numéros des infirmières employant ce mot : <font color=\"blue\"><b>".$listeinfirmieres."</b></font></td>\n</tr>\n";
	#On ouvre en lecture le fichier nommé p96.tag et on le référence sous le nom FICHIER3
	open(FICHIER3,"p96.tag");
	#On crée un compteur $verbe et on l'initialise à 0
	$verbe=0;
	#On crée un compteur $sansverbe et on l'initialise à 0
	$sansverbe=0;
	#On crée un compteur $singulier et on l'initialise à 0
	$singulier=0;
	#On crée un compteur $pluriel et on l'initialise à 0
	$pluriel=0;
	#Tant qu'on peut associer une ligne du fichier référencé sous le nom FICHIER3 à la variable $ligne, on exécute le bloc d'instructions
	while ($ligne=<FICHIER3>) {
		#Si le contenu de la variable $ligne contient la chaîne de caractères contenue dans la variable $mot, on exécute le bloc d'instructions
		if ($ligne=~/$mot/i) {
			#Si le contenu de la variable $ligne contient /V, on exécute le bloc d'instructions
			if ($ligne=~/\/V/g) {
				#On incrémente le compteur $verbe
				$verbe++;
			}
			#Sinon si la condition n'est pas remplie, on exécute le bloc d'instructions
			else {
				#On incrémente le compteur $sansverbe
				$sansverbe++;
			}
			#Si le contenu de la variable $ligne contient le contenu de la variable $mot suivi d'une lettre en minuscule répétée 0 ou plusieurs fois, suivie de /, suivi d'une lettre en majuscule répétée 1 ou plusieurs fois, suivie de S, on exécute le bloc d'instructions
			if ($ligne=~/$mot[a-z]*\/[A-Z]+S\b/i) {
				#On incrémente le compteur $singulier
				$singulier++;
			}
			#Si le contenu de la variable $ligne contient le contenu de la variable $mot suivi d'une lettre en minuscule répétée 0 ou plusieurs fois, suivie de /, suivi d'une lettre en majuscule répétée 1 ou plusieurs fois, suivie de P, on exécute le bloc d'instructions
			elsif ($ligne=~/$mot[a-z]*\/[A-Z]+P\b/i) {
				#On incrémente le compteur $pluriel
				$pluriel++;
			}
		}
	}
	#On ferme le fichier référencé sous le nom FICHIER3
	close(FICHIER3);
	#On écrit dans une ligne du tableau "Le mot est employé ", suivi en bleu et gras du contenu de la variable $verbe et de " fois sans verbe", suivi de " et ", suivi en bleu et gras du contenu de la variable $sansverbe et de " fois avec un verbe" et suivi d'un point
	#On retourne à la ligne
	print FICHIERSORTIE "<tr>\n<td>Le mot est employé <font color=\"blue\"><b>".$verbe." fois sans verbe</b></font> et <font color=\"blue\"><b>".$sansverbe." fois avec un verbe</b></font>.</td>\n</tr>\n";
	#On écrit dans une ligne du tableau "Le mot est employé ", suivi en bleu et gras du contenu de la variable $singulier et de " fois en emploi singulier", suivi de " et ", suivi en bleu et gras du contenu de la variable $pluriel et de " fois en emploi pluriel" et suivi d'un point
	#On ferme la ligne du tableau
	print FICHIERSORTIE "<tr>\n<td>Le mot est employé <font color=\"blue\"><b>".$singulier." fois en emploi singulier</b></font> et <font color=\"blue\"><b>".$pluriel." fois en emploi pluriel</b></font>.</td>\n</tr>\n";
	#On ouvre en lecture le fichier nommé p96.tab et on le référence sous le nom FICHIER4
	open(FICHIER4,"p96.tab");
	#On crée un compteur $negatif et on l'initialise à 0
	$negatif=0;
	#On crée un compteur $positif et on l'initialise à 0
	$positif=0;
	#Tant qu'on peut associer une ligne du fichier référencé sous le nom FICHIER4 à la variable $ligne, on exécute le bloc d'instructions
	while($ligne=<FICHIER4>) {
		#Si le contenu de la variable $ligne contient la chaîne de caractères contenue dans la variable $mot, on exécute le bloc d'instructions
		if ($ligne=~/($mot)/i) {
			#On affecte à la variable $gauche la chaîne de caractères qui se trouve à gauche du motif cherché (Contenu dans la variable $`)
			$gauche=$`;
			#On affecte à la variable $droite la chaîne de caractères qui se trouve à droite du motif cherché (Contenu dans la variable $`)
			$droite=$';
			#Si la variable $gauche contient en fin de chaîne de caractères le mot pas ou peu ou refuse ou impossib ou aucun ou difficile ou sans ou sursaute ou pleure ou agité ou non, non suivi par 1 ou plusieurs ponctuations ou, si la variable $droite contient en début de chaîne de caractères aucune ponctuation et le mot pas ou peu, on exécute le bloc d'instructions
			if (($gauche=~/(pas|peu|refuse|impossib|aucun|difficile|sans|sursaute|pleure|agité|non)[^,.;:?!-]+$/i) || ($droite=~/^[^,.;:?!-]+(pas|peu)/i)) {
				#On incrémente le compteur $negatif
				$negatif++;
			}
			#Sinon si la condition n'est pas remplie, on exécute le bloc d'instructions
			else {
				#On incrémente le compteur $positif
				$positif++;
			}
		}
	}
	#On ferme le fichier référencé sous le nom FICHIER4
	close(FICHIER4);
	#On écrit dans la ligne du tableau "Le mot est employé ", suivi en bleu du contenu de la variable $positif et de " fois en contexte positif", suivi de " et ", suivi en bleu du contenu de la variable $negatif et de " fois en contexte negatif" et suivi d'un point
	print FICHIERSORTIE "<tr>\n<td>Le mot est employé <font color=\"blue\"><b>".$positif." fois en contexte positif</b></font> et <font color=\"blue\"><b>".$negatif." fois en contexte negatif</b></font>.</td>\n</tr>\n";
	#On écrit la fin du tableau
	print FICHIERSORTIE "</table>\n</p>\n";
}
#On écrit la fin de la page html
print FICHIERSORTIE "</body>\n</html>";
#On ferme le fichier référencé sous le nom FICHIERSORTIE
close(FICHIERSORTIE);