#/usr/bin/perl
my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie 
my $DUMPFULL1="";
#----------------------------------------
my $output1="tree.xml";
if (!open (FILEOUT,">$output1")) { die "Pb a l'ouverture du fichier $output1"};

# On crée une variable $output2 qui va contenir le nom du fichier treetag.txt. 
# Ce fichier contiendra tous les mots contenus sur une ligne différente.
my $output2="treetag.txt";

if (!open (OUTPUT2,">$output2")) { die "Pb a l'ouverture du fichier $output2"};

# On crée une variable $output3 qui va contenir le nom du fichier mot.txt. 
# Ce fichier contiendra l'analyse au fur et à mesure de Tree Tagger.
my $output3="mot.txt";

# Si le fichier mot.txt ne peut s'ouvrir ce message apparait.
if (!open (OUTPUT3,">$output3")) { die "Pb a l'ouverture du fichier $output3"};

#----------------------------------------
&parcoursarborescencefichiers($rep);    #recurse!
#----------------------------------------
print FILEOUT "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print FILEOUT "<PARCOURS>\n";
print FILEOUT "<NOM>Hoby RATSIMBA</NOM>\n";
print FILEOUT "<FILTRAGE>".$DUMPFULL1."</FILTRAGE>\n";
print FILEOUT "</PARCOURS>\n";

# On imprime dans le fichier sortietree.txt le contenu de la variable $cont.
# Dans ce fichier, tous les mots seront chacun sur une ligne.
print OUTPUT2 $cont;

close(FILEOUT);
close(FILEOUT2);
exit;
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    foreach my $file (@files) {
    next if $file =~ /^\.\.?$/;
    $file = $path."/".$file;
    if (-d $file) {
        &parcoursarborescencefichiers($file);    #recurse!
    }
    if (-f $file) {
# On appelle deux sous programmes indiqués par &. 
        &ouvre;
        &entete;

        open (FILEIN,"$file");


        open (FICHIER, ">>sortietree.txt");


        print FICHIER "<fichier>\n <name>".$file."</name>\n";

        close (FICHIER);


        while ($ligne = <FILEIN>){
        if ($ligne=~/<description>([^<]+)<\/description>/) {

            $filtr= "<FICHIER><NOM>".$file."</NOM><CONTENU>".$1."</CONTENU></FICHIER>";

            $contenu =$1."\n";


            $contenu=~s/(['":!\?\.\-\(\)\[\]\{\}\-])/\n$1\n/g;
                    $contenu=~s/(&#38;#39;)/\n'\n/g;
            $contenu=~s/(&#38;#34;)/\n"\n/g;
            $contenu=~s/([,])/\n$1/g;
            $contenu=~s/(Ã©|&#233;)/é/g;
            $contenu=~s/&#234;/ê/g;
            $contenu=~s/Ã¨/è/g;
            $contenu=~s/Ã´/ô/g;
            $contenu=~s/Ã[^.*]/à/g;
            $contenu=~s/[ ]/\n/g;


                print OUTPUT3 $contenu;

                close (OUTPUT3);


                my $texte="mot.txt";
                    $ENV{'PATH'} = "./bin;";
                    system("set $ENV{'PATH'}");
                    system("./bin/tree-tagger.exe -token -lemma -no-unknown ./lib/french.par $texte >>sortietree.txt");


# On appelle le sous-programme traitement.
            &traitement;
 

            open (OUTPUT3,">mot.txt");
                      
                    $DUMPFULL1 = $DUMPFULL1 . $filtr ;


             $cont=$cont.$contenu;
         
              } 
          }

     open (FICHIER, ">>sortietree.txt");
     print FICHIER "</fichier>\n";
     close (FICHIER);

     close (FILEIN);
     print $i++,"\n";
         }

# on appelle deux sous-programmes.
   &fin;
   &ferme;                   
   }
}

sub ouvre {
    my $FichierEntree="sortietree.txt";
    open(Entree,$FichierEntree);
    $FichierSortie=$FichierEntree . ".xml";
    open(Sortie,">$FichierSortie");
}

# On imprime dans le fichier xml ces balises.
sub entete {
    print Sortie "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>\n";
    print Sortie "<PARCOURS>\n";
    print Sortie "<NOM> Hoby RATSIMBA </NOM>\n";
    print Sortie "<ETIQUETAGE>\n";    
}

# Traitement
sub traitement {
    while ($Ligne = <Entree>) 
    {
    if ($Ligne!~/\ô\¯\:\\ô\¯\:\^C\^Q/) {
        # Remplacement des guillemets par <![CDATA["]]> (évite erreur d'interprétation XML)
        $Ligne=~s/\"/<![CDATA[\"]]>/g;
        $Ligne=~s/([^\t]*)\t([^\t]*)\t(.*)/<element>\n <data type=\"type\">$2<\/data>\n <data type=\"lemma\">$3<\/data>\n <data type=\"string\">$1<\/data>\n<\/element>/;
        print Sortie $Ligne;
    }
    }
}


# Fin de fichier
sub fin {
print Sortie "</fichier>\n";
    print Sortie "</ETIQUETAGE>\n";
    print Sortie "</PARCOURS>\n";
}

sub ferme {
    close(Entree);
    close(Sortie);
}

