package cordial;
use strict;
use warnings;
use diagnostics;
use utf8;
use Exporter;
our @EXPORT = qw(&cnr2xml);
our @ISA = qw(Exporter);
use utile;
use erreur;
use analyseur;
my %element=("lemme"=>"lemme","Dialogue"=>"string","Codegram"=>"type");
my $headerXML=qq(<?xml version="1.0" encoding="utf-8"?>\n);
sub cnr2xml{
my ($input,$output)=@_;
open(FCOR,"<:utf8",$input) or erreur::affiche('ouvertureF',$input);
$output=utile::changeExtension($input,"xml") unless defined $output;
open (FCXML,">:utf8",$output) or erreur::affiche('ouvertureF',$output);
# adaptation au formatage de cordial
my $position=&getFormatage;
print FCXML $headerXML.qq(<parcours nom="$input">\n);
while(my $ligne=<FCOR>){
chop $ligne;
if($ligne=~/={4} DEBUT DE PHRASE ={4}/){ # si début ou fin de phrase
print FCXML "<passage>\n";
while($ligne=<FCOR>){
chop $ligne;
if ($ligne=~/={4} FIN DE PHRASE ={4}/){
print FCXML "</passage>\n";
last;
}
my @champs=split/\t/,$ligne;
print FCXML analyseur::formatageElementEnXML(
@champs[$position->{type}],
@champs[$position->{lemme}],
@champs[$position->{string}],
);
}
}
print FCXML "</parcours>";
}
#XML::write::footerXML(FCXML);
}
sub getFormatage{
my %position;
my $firstLine=<FCOR>;
chop $firstLine;
my @champs=split(/\t/,$firstLine);
for(my $i=0;$i<@champs;$i++){ # pour chaque champs de la ligne
foreach my $key (%element){
if($champs[$i] eq $key){ # s'il y en a qui correpondent à un des type recherchés
$position{$element{$key}}=$i; # on associe l'indice du champs au type
}
}
}
return \%position;
}
1;