/* ========================================================================= */
/*                           STRINGS HANDLING                                */
/* ========================================================================= */      

:- module(string,
          [
            suffix/3,
            prefix/3,
            substring/4
          ]
         ). 

        /* creation de strings utiles */
:- string_to_list(Virgule, ","), assert(virgule(Virgule)).
:- string_to_list(Accolade_ouvrante, "{"), 
   assert(accolade_ouvrante(Accolade_ouvrante)).
:- string_to_list(Accolade_fermante, "}"), 
   assert(accolade_fermante(Accolade_fermante)).
:- string_to_list(Data, "@data"), 
   assert(code_data(Data)).
:- string_to_list(Code_attribut, "@attribute"), 
   assert(code_attribut(Code_attribut)).
:- string_to_list(Nom_classe, "@Class"), 
   assert(nom_classe(Nom_classe)). 
:- string_to_list(Espace, " "), assert(espace(Espace)).   


        /* retourne le suffixe de String commencant en position Deb */
suffix(String, Deb, S) :-
        string_length(String, N),
        Longueur is N-Deb,
        sub_string(String, Deb, Longueur, _, S).
        
        
        /* retourne le prefixe de String finissant en position Fin */
prefix(String, Fin, S) :-
        Fin1 is Fin+1,
        sub_string(String, 0, Fin1, _, S).
        
        
   /* retourne la sous chaine de String commencant a Deb et finissant a Fin */
substring(String, Deb, Fin, S) :-
        Longueur is Fin - Deb + 1,
        sub_string(String, Deb, Longueur, _, S).
