% UTILITAIRES

%%%%%%% SAISIE D'UN TEXTE À LA CONSOLE, TRANSFORMATION EN LISTE D'ATOMES

lire_phrase(Cars) :- 
	get_char(Car),
	traite_car(Car, Cars).
traite_car(Car, Cars) :-
	Car = '.', !, Cars = [], skip('\n').
traite_car(Car, [Car|Cars]) :-
	lire_phrase(Cars).

%%%%%%% TOKENISATION

/* - listes d'atomes-caractères (cf lire_phrase)
- Seul séparateur reconnu = espace (suite de )
- Adaptation selon ces remarques de Covington et al.
- Pas de blancs en tête, mais répétictions de blancs acceptée
- Skippe les RC (et éventuellement d'autres caractères).
- AMELIORATION : ACCEPTER LES MAJUSCULES, LES ACCENTS ET "NORMALISER"
*/

% tokenise(+LCar, -Mots) :- LCars est une liste d'atomes-caractères tokenisée en une liste d'atomes Mots. 

tokenise([],[]) :- !.
tokenise(LCar, [Mot|Mots]) :-
	chope_mot(LCar, Cars, NouvLCar),!,
	atom_chars(Mot, Cars),
	tokenise(NouvLCar, Mots).

chope_mot([' '|Suite], [], NouvLCar) :- !,
	skip_blancs(Suite, NouvLCar).
chope_mot([C|Suite], Reste, NouvLCar) :-
	skipable(C), !,
	chope_mot(Suite, Reste,NouvLCar ).
chope_mot([C|Suite], [C|Reste], NouvLCar) :-
	chope_mot(Suite, Reste,NouvLCar ).
chope_mot([],[],[]).

skip_blancs([' '|Suite], LCar) :- !,
	skip_blancs(Suite, LCar).
skip_blancs(X,X ).

skipable(C) :- member(C, ['\n']).
