#!/usr/bin/perl

<<DOC;
Ce programme extrait les suites de mots correspondant aux patrons morphosyntaxiques données

Usage: programme.pl -p fichier_patrons -i fichier_cordial -o fichier_sortie

DOC
use warnings;

#utilisation du module Getopt::Std pour définir les options pour le programme
use Getopt::Std;
%opts=();
getopt("p:i:o:", \%opts);
#récupération du nom du fichier contenant des patrons morphosyntaxiques
$patrons = $opts{p};
$input = $opts{i};
$output = $opts{o};

open(FIC, "$input") or die "impossible ouvrir $input : $!";
open(FIC1, ">$output");
my $i=0;
my $j=0;
my $k=0;
my @token=();
while (<FIC>){
        my $ligne=$_;
        chomp $ligne;
        my @liste=split(/\t/,$ligne);
        push(@token, "$liste[$i++]"." ");
        push(@lemme, "$liste[$i++]" ." ");
        push(@patron, "$liste[$i++]" ." ");
        $i=0;
}
#on a 3 listes @token, @lemme, @patron
@sous_patron=();
while (defined($element_patron=shift(@patron))){
        $element_patron=~s/\n//;
        if ($element_patron !~ "PCTFORTE"){
                push(@sous_patron, $element_patron);
                $j++;
                next;
        }

        my @sous_token=@token[$k..$j-1];
        &cherche_patron(@sous_patron);
        @sous_patron=();
        $k=$j+1;
        $j++;
}
#=============================================
sub cherche_patron {
        my @liste=@_;
        my $suite_de_patrons=join("",@liste);
        $z=0;
        $nb=0;
        open(FIC, "$patrons") or die "impossible ouvrir $patrons : $!";
        while(<FIC>) {
                $nb=0;
                $ligne=$_;
                chomp $ligne;
                while ($ligne=~m/ /g) {$nb++};
                $nb++;
                while ($suite_de_patrons=~m/$ligne/g){
                        my $avant=substr ($suite_de_patrons, 0, pos($suite_de_patrons)-length($&));
                        while ($avant=~m/ /g) {$z++};
                        print FIC1 "@token[$k+$z..$k+$z+$nb-1]\n";
                        $z=0;
                }
        }
}