#!/usr/bin/perl -w

use strict;
use diagnostics;

<<DOC;
Loïc D. :
MAI 2013
 usage : perl term.pl fichier_etiqueter_cordial.cnr fichier_texte_avec_patron.txt
 Le programme prend en entrée un fichier '.cnr' étiqueté via le logiciel Cordial et un fichier texte contenant la liste des patrons recherchés
 Le programme affiche en sortie toutes les occurrences du/des patron(s) syntaxique(s) recherchées
DOC

# ouverture du fichier étiqueté via Cordial
open (CNR, "<:encoding(iso-8859-1)", $ARGV[0]);

my $nouvelle_ligne="";

# suppression des sauts de ligne dans le fichier étiqueté
while (my $ligne_cordial=<CNR>) {
	$ligne_cordial=~s/[\n\r]*//g;
	# ajout d'une tabulation pour correspondre aux expressions régulières contenues dans le fichier étiqueté
	$nouvelle_ligne.=$ligne_cordial."\t";
}

# fermeture du fichier étiqueté via Cordial
close (CNR);

# ouverture du fichier contenant les patrons
open (TERM, "<:encoding(iso-8859-1)", $ARGV[1]);

while (my $terme=<TERM>) {
	# suppression des sauts de ligne afin de faire correspondre le patron avec l'expression régulière
	chomp($terme);
	# si l'expression régulière correspondant à un patron 
	while ($nouvelle_ligne=~/$terme/g) {
        my $i=0;
		# on compte le nombre de parenthèses ouvrantes (correspondant à une forme selon le patron prédéfini)
        while ($terme=~/[(]/g) {
            $i++;
        }
		# pour chaque forme appartenant aux patrons reconnus, on affiche sa valeur (via les variables d'environnement)
        for ($j=1;$j<=$i;$j++) {
            print ${$j}." "; # si le patron compte deux formes grammaticales alors '${$j}' prendra successivement les valeurs de '$1' et de '$2'
        }
		print "\n";
	}
}

close (TERM);
