#########################################################################
#FLEMM-v1.1 -- French Lemmatizer : Lemmatisation du franais  partir de# 
#corpus tiquets - Version 1.1						#
#Copyright (C) 1998 (NAMER Fiammetta)					#
#########################################################################

# $Id: exceptions,v 1.1 1998/10/12 07:56:11 namer Exp $

package exceptions;

# Le constructeur de la classe exceptions
# IN : le type de la classe et les parametres
# OUT: la reference vers l'objet construit
# exemple:    $x = new exceptions($ENV{"BASE_EXCEP"});

sub new {
    # La classe en premier argument (ex: exceptions)
    my $type = shift;
    # Les arguments du constructeur (ex: le catalogue o on trouve les fichiers
    # d'exceptions.
    my ($path) = @_;

    # On construit une reference (= un pointeur) qui pointe vers un hashage vide
    my $self = {};

    # On donne un type  ce pointeur
    bless $self,$type;

    # On appelle la methode init_all pour cette reference
    $self->initialize($path);

    # On doit retourner la reference comme resultat du constructeur ($x = new ...)
    return $self;
}
    
# La methode initialize de la classe exceptions
# IN : le chemin dans lequel se trouvent les exceptions
# OUT: 

sub initialize {
    my ($self)=shift;

    my ($chemin)=@_;

    $self->readFromFile($chemin."/noms_finissant_par_AEus","N_aeus");
    $self->readFromFile($chemin."/noms_finissant_par_ail_x","N_aux2ail");
    $self->readFromFile($chemin."/noms_finissant_par_as","N_as");
    $self->readFromFile($chemin."/noms_finissant_par_au_x","N_aux2au");
    $self->readFromFile($chemin."/noms_finissant_par_aux","N_aux");
    $self->readFromFile($chemin."/noms_finissant_par_e_ee","N_ee2e");
    $self->readFromFile($chemin."/noms_finissant_par_euse","N_euse");
    $self->readFromFile($chemin."/noms_finissant_par_eux","N_eux");
    $self->readFromFile($chemin."/noms_finissant_par_i_s","N_is2i");
    $self->readFromFile($chemin."/noms_finissant_par_ier_e","N_iere2ier");
    $self->readFromFile($chemin."/noms_finissant_par_os","N_os");
    $self->readFromFile($chemin."/noms_finissant_par_ou_x","N_oux2ou");
    $self->readFromFile($chemin."/noms_finissant_par_ous","N_ous");
    $self->readFromFile($chemin."/noms_finissant_par_u_s","N_us2u");
    $self->readFromFile($chemin."/verbes_finissant_par_ERer","V_erer");
    $self->readFromFile($chemin."/verbes_finissant_par_FPHer","V_fpher");
    $self->readFromFile($chemin."/verbes_finissant_par_eCer_naccent","V_eCer_naccent");
    $self->readFromFile($chemin."/verbes_finissant_par_eLer_aigu","V_eLer_aigu");
    $self->readFromFile($chemin."/verbes_finissant_par_eMer_naccent","V_eMer_naccent");
    $self->readFromFile($chemin."/verbes_finissant_par_eNTer_aigu","V_eNTer_aigu");
    $self->readFromFile($chemin."/verbes_finissant_par_ePer_naccent","V_ePer_naccent");
    $self->readFromFile($chemin."/verbes_finissant_par_eRer_naccent","V_eRer_naccent");
    $self->readFromFile($chemin."/verbes_finissant_par_eSer_naccent","V_eSer_naccent");
    $self->readFromFile($chemin."/verbes_finissant_par_eVer_aigu","V_eVer_aigu");
    $self->readFromFile($chemin."/verbes_finissant_par_ier","V_ier");
    $self->readFromFile($chemin."/verbes_finissant_par_irer","V_irer");
    $self->readFromFile($chemin."/verbes_finissant_par_isser","V_iss");
    $self->readFromFile($chemin."/verbes_finissant_par_ller","V_ll");
    $self->readFromFile($chemin."/verbes_finissant_par_tter","V_tt");
    $self->readFromFile($chemin."/verbes_finissant_par_ayer","V_ayer");
    $self->readFromFile($chemin."/verbes_finissant_par_igner","V_ign");
    $self->readFromFile($chemin."/adjectifs_finissant_par_ine","A_ine");
    $self->readFromFile($chemin."/adjectifs_finissant_par_oOUil","A_oOUil");
    $self->readFromFile($chemin."/adjectifs_finissant_par_ere","A_ere");
    $self->readFromFile($chemin."/adjectifs_finissant_par_ure","A_ure");
    $self->readFromFile($chemin."/adjectifs_finissant_par_CCe","A_CCe");
    $self->readFromFile($chemin."/adjectifs_finissant_par_is","A_is");
    $self->readFromFile($chemin."/adjectifs_finissant_par_man_e","A_man_e");
    $self->readFromFile($chemin."/adjectifs_finissant_par_ane","A_ane");
    $self->readFromFile($chemin."/adjectifs_finissant_par_sOUte","A_sOUte");
    $self->readFromFile($chemin."/adjectifs_finissant_par_aOUos","A_aOUos");
    $self->readFromFile($chemin."/adjectifs_finissant_par_us","A_us");
    $self->readFromFile($chemin."/adjectifs_finissant_par_Ve","A_Ve");
    $self->readFromFile($chemin."/noms_finissant_par_Cs","N_Cs");
    $self->readFromFile($chemin."/noms_finissant_par_ys","N_ys");
}


sub readFromFile {
   my ($self)=shift;

   my($file,$liste)=@_;
    
   open(LIST_FILE,$file) || die "$file: $!";
   
   while (<LIST_FILE>) {
       chop;
       s/\#.*//;
       s/"(.*)"/$1/;
       next if (/^$/);
       $self->{$liste}->{$_}++;
   }
   
   close(LIST_FILE);
}



sub member {
    my ($self)=shift;

    my($mot,$liste)=@_;
    
    return defined $self->{$liste}->{$mot};
}

sub output {
    
    my ($self)=shift;
    
    my ($f,$e);
    
    foreach $f (sort keys %{$self}) {
	print "$f\n";
	foreach $e (sort keys %{$self->{$f}}) {
	    print"\t$e\n";
	}
    }
}

1;

