:- ensure_loaded('$REGULUS/PrologLib/compatibility').

:- module(lite_read_sign_csv,
	[read_sign_csv/2,
	 read_sign_csv/3,
	 
	 test_read_sign_csv/1]
    ).

:- use_module('$REGULUS/PrologLib/utilities').

:- use_module(library(lists)).

%======================================================================

test_read_sign_csv(1) :-
	read_sign_csv('$MED_SLT2/Fre/corpora/trainslate1.csv',
		      '$MED_SLT2/Fre/corpora/trainslate1_converted.csv').

%======================================================================

read_sign_csv(CSVFile, TextFile) :-
	read_sign_csv(CSVFile, default_encoding, TextFile).

read_sign_csv(CSVFile, Encoding, TextFile) :-
	safe_absolute_file_name(CSVFile, AbsCSVFile),
	safe_absolute_file_name(TextFile, AbsTextFile),
	
	csv_file_to_list_of_lists(AbsCSVFile, Encoding, 0'", 0',, InList), %"'
	length(InList, NIn),
	format('~N--- Read CSV file (~d lines) ~w~n', [NIn, AbsCSVFile]),
	
	sign_csv_list_to_sign_text_list(InList, 1, OutList),
	length(OutList, NOut),
	write_atom_list_to_file(OutList, AbsTextFile),
	format('~N--- Written text Lite file (~d lines) ~w~n', [NOut, AbsTextFile]),
	!.
read_sign_csv(CSVFile, Encoding, _TextFile) :-
	format('~N*** Error: unable to convert CSV file ~w to Lite text form using encoding ~w~n',
	       [CSVFile, Encoding]),
	fail.

sign_csv_list_to_sign_text_list([], _N, []).
sign_csv_list_to_sign_text_list([F | R], I, [F1 | R1]) :-
	sign_csv_list_line_to_sign_text_line(F, I, F1),
	I1 is I + 1,
	!,
	sign_csv_list_to_sign_text_list(R, I1, R1).

sign_csv_list_line_to_sign_text_line(Line, _I, Atom) :-
	maybe_add_quotes_in_apply_template(Line, Line1),
	join_with_spaces(Line1, Atom),
	!.
sign_csv_list_line_to_sign_text_line(Line, I, _Atom) :-
	format('~N*** Error: unable to convert line ~d, ~w~n', [I, Line]),
	fail.

maybe_add_quotes_in_apply_template([ApplyTemplateField, Name | R], [ApplyTemplateField, Name | R1]) :-
	is_apply_template_field(ApplyTemplateField),
	add_quotes_in_apply_template_args(R, R1),
	!.
maybe_add_quotes_in_apply_template(Line, Line).

add_quotes_in_apply_template_args([], []).
add_quotes_in_apply_template_args([F | R], [F1 | R1]) :-
	add_quotes_in_apply_template_arg(F, F1),
	!,
	add_quotes_in_apply_template_args(R, R1).

is_apply_template_field(ApplyTemplateField) :-
	atomic(ApplyTemplateField),
	split_atom_into_words(ApplyTemplateField, [Word]),
	lowercase_atom(Word, Word1),
	Word1 = applytemplate.

add_quotes_in_apply_template_arg(Arg, Arg) :-
	whitespace_atom(Arg),
	!.
add_quotes_in_apply_template_arg(Arg, Arg1) :-
	format_to_atom('"~w"', [Arg], Arg1),
	!.