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

use strict;
use warnings;

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

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

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

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

sub MajGrecModerne {
    return("+utf8::Lu\n" . "&utf8::In_Greek_and_Coptic\n"
            . "-0386 0390\n" );
}

sub MinGrecModerne {
    return("+utf8::Ll\n" . "&utf8::In_Greek_and_Coptic\n" 
    	   . "-03AC 03B0\n" . "-03CC 03CE\n" );
}

my $MajGrec = '(\p{MajGrecAncien}|\p{MajGrecModerne})';

my $MinGrec = '(\p{MinGrecAncien}|\p{MinGrecModerne})';

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 = "$MajGrec$MinGrec+(-$MajGrec$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]);