#!/usr/bin/perl
binmode(STDOUT, ":utf8"); # permet de préciser l'encodage des données de sortie


#MODE D'EMPLOI :
#perl bao1.pl dossier rubrique
#on va choisir differentes rubriques

#$ARGV[0] = répertoire à parcourir
#$ARGV[1] = nom de la rubrique qu'on a choisi pour la traiter

#Si la longueur de notre liste n'est pas 1, on comprend qu'il manque un argument et qu'on doit sortir du programme
if ($#ARGV != 1) {print "Il manque un argument au programme....\n";exit;} 
#le premier argument, le nom du dossier, est stocké dans la variable $rep.
my $rep="$ARGV[0]"; 

my $rubrique="$ARGV[1]"; #Le deuxième argument est stocké dans la variable $rubrique.

$rep=~ s/[\/]$//; # on enlève tous les "/" et on normalise les noms de dossier

#On ouvre deux fichiers en écriture: 
#- un fichier de texte brut
#- un fichier XML. 

open my $txt_output, ">:encoding(UTF-8)", "titre-description.txt";
open my $xml_output, ">:encoding(UTF-8)", "pre-titre-description.xml";

#On écrit la déclaration de la version XML et la balise racine <corpus> dans le fichier XML.

my $header = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<corpus>\n"; 
print $xml_output $header; # on envoie notre header XML dans note fichier de sortie

#On fait appel au sous-programme &parcoursarborescencefichiers
&parcoursarborescencefichiers($rep); 
#On écrit la balise racine fermante 
print $xml_output "</corpus>"; 

# on ferme nos fichiers et on sort du programme!
close $txt_output;
close $xml_output;

exit;

#----------------------------------------------
#sous-programmes &parcoursarborescencefichiers

sub parcoursarborescencefichiers {

    #On enlève le premier argument de la liste d'arguments ($rep) et on le met dans la variable $path.
    my $path = shift(@_);
    #On ouvre le dossier et en cas on n'arrive pas à l'ouvrir , on va afficher ce message:
    opendir(DIR, $path) or die "on ne peut pas l'ouvrir $path: $!\n"; 
    # on lit ce répertoire,on met les noms dans la liste @files
    my @files = readdir(DIR); 

    # on ferme le répertoire
    
    closedir(DIR); 
    foreach my $file (@files) {
	next if $file =~ /^\.\.?$/;
	$file = $path."/".$file; # on ajoute le nom des objets dans notre dossier à notre chemin
	if (-d $file) { # si cet objet est un repertoire, on refait ce qu'on a fait juste avant
	    &parcoursarborescencefichiers($file);
	}
	if (-f $file) { #sinon c'est un fichier, alors on continue...
        if ($file =~ /$rubrique.+\.xml$/) {
            open my $input, "<:encoding(UTF-8)", $file;
            undef $/; #undef permet de supprimer une variable
            my $line=<$input>; # lire chaque ligne du fichier
            close($input);

            while ($line=~/<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/gs) {                 my $title = $1; # correspond à la première parenthèse
                my $description=$2; # correspond à la seconde parenthèse
                my ($clean_title, $clean_description)=&clean($title, $description); # définir un sous-programme 

                print $txt_output "TITRE : $clean_title \n DESCRIPTION : $clean_description \n---------------------\n";
                print $xml_output "<item>\n<titre>$clean_title</titre>\n<description>$clean_description</description>\n</item>\n";
            }
        }
	}
    }
}

sub clean { # cette fonction sert à nettoyer les titres et descriptions
    my @clean_table=();

    foreach my $var (@_) {
        $var=~s/<!\[CDATA\[//;
        $var=~s/\]\]>//;
        push @clean_table, $var;
    }

    return @clean_table
}