# Construction d'un tableau (hash) à partir de texte
# Noms latins et grecs modernes

use strict;
use warnings;

sub MajLat {
    return("+utf8::Lu\n" . "&utf8::Latin\n");
}

sub MinLat {
    return("+utf8::Ll\n" . "&utf8::Latin\n");
}

sub MajGrec {
    return("+utf8::Lu\n" . "&utf8::In_Greek_and_Coptic\n");
}

sub MinGrec {
    return("+utf8::Ll\n" . "&utf8::In_Greek_and_Coptic\n");
}

sub construire ($) { # nom de fichier -> hash
	my ($fich) = @_;
	open(ENTREE, "<utf8", $fich);
	
	my $formatNote = '^[01]\d|20$';
	my $formatLat = '^\p{MajLat}\p{MinLat}+(-\p{MajLat}\p{MinLat}+)?$';
	my $formatGrec = '^\p{MajGrec}\p{MinGrec}+(-\p{MajGrec}\p{MinGrec}+)?$';
	
	my %res;
	my $k = 0;
	my @tablignes = <ENTREE>;
	foreach my $ligne ( @tablignes  ){
	    $k++;	
		chomp($ligne); # supprime le "\n" final
		my ($le_nom, $la_note) = split( /\s+/, $ligne);
		if( $le_nom !~ m/$formatLat|$formatGrec/ ){
		    die("Erreur sur $le_nom, ligne $k");
		}
		if( $la_note !~ m/$formatNote/ ){
		    die("Erreur sur la note de $le_nom, ligne $k");
		}
		
		$res{$le_nom} = $la_note;
	}
		
    return %res;

}# construire

sub TxtVersHash($){
	my ($fichIn) = @_;
	my %res = construire($fichIn);
	foreach my $k ( keys(%res) ) {
   		print "$k : $res{$k}\n";
   	}
}#TxtVersHash

binmode(STDOUT, ":utf8");
TxtVersHash($ARGV[0]);