#!user/bin/perl
#Author: Juliette POTIER & Laetitia Etcheverry
#-*- coding:utf-8 -*-

use warnings;
use strict;

#-----------------PROGRAMME PRINCIPAL-----------------
#déclaration de listes
my @LISTETOKEN=();
my @LISTELEMME=();
my @LISTEETIQUETTE=();
#lecture du fichier patrons.txt
open(FIC,">encoding(utf-8)","terminologie.txt"); #création du fichier de sortie pour la BAO 4
open(PATRONS,"$ARGV[1]");
#lit toutes les lignes du fichier en les stockant dans une liste /!\ à ne pas utiliser avec de gros fichiers : ils font planter la machine /!\
my @LISTEPATRONS=<PATRONS>; #lecture globale du fichier dans une liste
#print @LISTEPATRONS;
#print "TAPEZ SUR UNE TOUCHE POUR CONTINUER...";
#my $rep=<STDIN>;	
close(PATRONS);
#récupération du premier argument de la ligne de commande
#1er argument = fichier cordial
open(CORDIAL,"$ARGV[0]"); #visiblement pas de problèmes d'encodage
#lecture de fichier en associant chaque ligne avec un scalaire
while (my $ligne=<CORDIAL>){
	$ligne=~s/\r//;
	chomp($ligne);
	#les parenthèses servent à capturer les éléments pour les récupérer plus tard dans des variables
	if ($ligne=~/^([^\t]+)\t([^\t]+)\t([^\t]+)$/){
		my ($token,$lemme,$etiquette)=($1,$2,$3);
		#my $token=$1; etc.
		if($etiquette!~/PCTF/){
			#ajouter qlqc ds une liste à le fin de celle-ci = push
			push(@LISTETOKEN,$token);
			push(@LISTELEMME,$lemme);
			push(@LISTEETIQUETTE,$etiquette);
		}
		else{
			#&compare(@LISTETOKEN,@LISTEETIQUETTE); => concatène les deux listes en une seule liste voirs @_
			#création d'un pointeur/ d'une référence vers une liste => \ transforme la liste en un scalaire qui renvoie vers la liste initiale
			&compare(\@LISTETOKEN,\@LISTEETIQUETTE);
			#on purge les listes
			@LISTETOKEN=();
			@LISTELEMME=();
			@LISTEETIQUETTE=();
		}
	}
}



#----------------------SOUS-PROGRAMMES----------------------------
sub compare{
	#IL FAUT DÉRÉFÉRENCER LES LISTES /!\
	my ($first,$second)=@_;
	my @LISTETOKEN = @$first;
	my @LISTEETIQUETTE = @$second;
	#print "LISTE DES TOKENS : @LISTETOKEN\n";
	#print "LISTE DES TAGS : @LISTEETIQUETTE\n";
	#on a besoin de comparer un élément d'une liste avec une chaine de caractère, 
	#transformation de la liste en une chaine de caractères où chaque élément de la liste seront séparés par des blancs
	foreach my $patrons (@LISTEPATRONS){
		#$patrons=~s/\r?\n//;
		chomp $patrons;
		#print "$patrons\n";
		my $texte_des_pos=join(' ',@LISTEETIQUETTE);
		while ($texte_des_pos=~/$patrons/g){
			# SORTIR LA CORRESPONDANCE DANS LA LISTE DES TOKENS
			my $contextedavant=$`; #variable spéciale = quand il y a une correspondance il prend l'élément avant la correspondance			
			#print "CA :", $contextedavant,"\n";
			my $compteurblanc=0;
			while ($contextedavant=~/ /g){
				$compteurblanc++;
			}
			my $longueurpatron=$#LISTEPATRONS; # $# ne fonctionne que sur des listes
			my $bornesup = $compteurblanc+$longueurpatron;			
			print FIC "@LISTETOKEN[$compteurblanc..$bornesup] \n"; #fichier sortie à insérer dans la BAO 4
			#print "TAPEZ SUR UNE TOUCHE POUR CONTINUER...";
			#my $rep=<STDIN>;
		}
		
	}
	
}
#JMD la monstruosité de l'informatique c'est l'utilisateur
#CTRL-S met sur pause un script en train de s'exécuter sur le terminal s permet de reprendre la tâche
