user defined messages

This commit is contained in:
Vítor Santos Costa 2013-11-22 00:44:28 +00:00
parent 02526db2d1
commit cc03317bd0
3 changed files with 35 additions and 17 deletions

View File

@ -246,7 +246,7 @@ print_message(Severity, Msg) :-
% This predicate has more hooks than a pirate ship! % This predicate has more hooks than a pirate ship!
print_message(Severity, Term) :- print_message(Severity, Term) :-
% first step at hook processing % first step at hook processing
'$message_to_lines'(Term, Lines), '$messages':translate_message(Term, Lines, []),
( nonvar(Term), ( nonvar(Term),
user:message_hook(Term, Severity, Lines) user:message_hook(Term, Severity, Lines)
-> ->
@ -262,17 +262,9 @@ print_message(_, loaded(A, F, _, Time, Space)) :- !,
print_message(_, Term) :- print_message(_, Term) :-
format(user_error,'~q~n',[Term]). format(user_error,'~q~n',[Term]).
'$message_to_lines'(Term, Lines) :-
user:generate_message_hook(Term, [], Lines), !.
'$message_to_lines'(Term, Lines) :-
prolog:message(Term, Lines, []), !.
'$message_to_lines'(Term, Lines) :-
'$messages':generate_message(Term, Lines, []), !.
% print_system_message(+Term, +Level, +Lines) % print_system_message(+Term, +Level, +Lines)
% %
% Print the message if the user did not intecept the message. % Print the message if the user did not intercept the message.
% The first is used for errors and warnings that can be related % The first is used for errors and warnings that can be related
% to source-location. Note that syntax errors have their own % to source-location. Note that syntax errors have their own
% source-location and should therefore not be handled this way. % source-location and should therefore not be handled this way.

View File

@ -180,10 +180,6 @@ yap_hacks:cut_by(CP) :- '$$cut_by'(CP).
% :- yap_flag(gc_trace,verbose). % :- yap_flag(gc_trace,verbose).
:- multifile prolog:message/3.
:- dynamic prolog:message/3.
:- multifile :- multifile
prolog:comment_hook/3. prolog:comment_hook/3.

View File

@ -22,6 +22,8 @@
prefix/5, prefix/5,
file_location/3]). file_location/3]).
:- multifile prolog:message/3.
file_location(Prefix) --> file_location(Prefix) -->
{ {
prolog_load_context(file, FileName) prolog_load_context(file, FileName)
@ -35,6 +37,19 @@ file_position(user_input,LN,MsgCodes) -->
file_position(FileName,LN,MsgCodes) --> file_position(FileName,LN,MsgCodes) -->
[ '~a (~a:~d).' - [MsgCodes,FileName,LN] ]. [ '~a (~a:~d).' - [MsgCodes,FileName,LN] ].
translate_message(Term) -->
generate_message(Term), !.
translate_message(Term) -->
{ Term = error(_, _) },
[ 'Unknown exception: ~p'-[Term] ].
translate_message(Term) -->
[ 'Unknown message: ~p'-[Term] ].
generate_message(Term, Lines, []) :-
user:generate_message_hook(Term, [], Lines), !.
generate_message(Term) -->
prolog:message(Term), !.
generate_message(halt) --> !, generate_message(halt) --> !,
['YAP execution halted']. ['YAP execution halted'].
generate_message(false) --> !, generate_message(false) --> !,
@ -211,7 +226,7 @@ system_message(error(out_of_heap_error, Where)) -->
[ 'OUT OF DATABASE SPACE ERROR- ~w' - [Where] ]. [ 'OUT OF DATABASE SPACE ERROR- ~w' - [Where] ].
system_message(error(out_of_stack_error, Where)) --> system_message(error(out_of_stack_error, Where)) -->
[ 'OUT OF STACK SPACE ERROR- ~w' - [Where] ]. [ 'OUT OF STACK SPACE ERROR- ~w' - [Where] ].
system_message(error(out_of_trail_error, Where)) --> vsystem_message(error(out_of_trail_error, Where)) -->
[ 'OUT OF TRAIL SPACE ERROR- ~w' - [Where] ]. [ 'OUT OF TRAIL SPACE ERROR- ~w' - [Where] ].
system_message(error(out_of_attvars_error, Where)) --> system_message(error(out_of_attvars_error, Where)) -->
[ 'OUT OF STACK SPACE ERROR- ~w' - [Where] ]. [ 'OUT OF STACK SPACE ERROR- ~w' - [Where] ].
@ -488,12 +503,23 @@ prolog:print_message_lines(_, _, []) :- !.
prolog:print_message_lines(S, P, [at_same_line|Lines]) :- !, prolog:print_message_lines(S, P, [at_same_line|Lines]) :- !,
print_message_line(S, Lines, Rest), print_message_line(S, Lines, Rest),
prolog:print_message_lines(S, P, Rest). prolog:print_message_lines(S, P, Rest).
prolog:print_message_lines(S, kind(Kind), Lines) :- !,
prefix(Kind, Prefix, _),
lists:append([ begin(Kind, Ctx)
| Lines
],
[ end(Ctx)
],
AllLines),
print_message_lines(S, Prefix, AllLines).
prolog:print_message_lines(S, P-Opts, Lines) :- !, prolog:print_message_lines(S, P-Opts, Lines) :- !,
atom(P), !,
atom_concat('~N', P, Prefix), atom_concat('~N', P, Prefix),
format(S, Prefix, Opts), format(S, Prefix, Opts),
print_message_line(S, Lines, Rest), print_message_line(S, Lines, Rest),
prolog:print_message_lines(S, P-Opts, Rest). prolog:print_message_lines(S, P-Opts, Rest).
prolog:print_message_lines(S, P, Lines) :- prolog:print_message_lines(S, P, Lines) :-
atom(P), !,
atom_concat('~N', P, Prefix), atom_concat('~N', P, Prefix),
format(S, Prefix, []), format(S, Prefix, []),
print_message_line(S, Lines, Rest), print_message_line(S, Lines, Rest),
@ -505,6 +531,10 @@ print_message_line(S, [], []) :- !,
nl(S). nl(S).
print_message_line(S, [nl|T], T) :- !, print_message_line(S, [nl|T], T) :- !,
nl(S). nl(S).
print_message_line(S, [begin(_,_)|T0], T) :- !,
print_message_line(S, T0, T).
print_message_line(S, [end(_)|T0], T) :- !,
print_message_line(S, T0, T).
print_message_line(S, [Fmt-Args|T0], T) :- !, print_message_line(S, [Fmt-Args|T0], T) :- !,
format(S, Fmt, Args), format(S, Fmt, Args),
print_message_line(S, T0, T). print_message_line(S, T0, T).
@ -512,8 +542,6 @@ print_message_line(S, [Fmt|T0], T) :-
format(S, Fmt, []), format(S, Fmt, []),
print_message_line(S, T0, T). print_message_line(S, T0, T).
prefix(error, ' ', user_error, 'ERROR!! ').
prefix(warning, '% ', user_error, 'Warning: ').
prefix(help, '', user_error) --> []. prefix(help, '', user_error) --> [].
prefix(query, '', user_error) --> []. prefix(query, '', user_error) --> [].
@ -549,5 +577,7 @@ prefix(error, ' ', user_error) -->
prefix(banner, '', user_error) --> []. prefix(banner, '', user_error) --> [].
prefix(informational, '~*|% '-[LC], user_error) --> prefix(informational, '~*|% '-[LC], user_error) -->
{ '$show_consult_level'(LC) }. { '$show_consult_level'(LC) }.
prefix(debug(_), '% ', user_error).
prefix(information, '% ', user_error).