34
35:- module(clpqr_highlight, []). 36
37:- multifile
38 prolog_colour:goal_colours/3,
39 prolog_colour:syntax_message//1. 40
41prolog_colour:goal_colours({Constraints}, imported(File), Colours) :-
42 clpqr_module(Module),
43 module_property(Module, file(File)), !,
44 Colours = imported(File) - ConstraintColours,
45 constraint_colours(Constraints, Module, ConstraintColours).
46
47clpqr_module(clpq).
48clpqr_module(clpr).
49
50constraint_colours(Var, _, classify) :-
51 var(Var), !.
52constraint_colours((R1,R2), M, classify-[C1,C2]) :- !,
53 constraint_colours(R1, M, C1),
54 constraint_colours(R2, M, C2).
55constraint_colours((R1;R2), M, classify-[C1,C2]) :- !,
56 constraint_colours(R1, M, C1),
57 constraint_colours(R2, M, C2).
58constraint_colours(Term, M, constraint(M)-[classify,classify]) :-
59 clpqr_constraint(Term), !.
60constraint_colours(_, M, type_error(Type)) :-
61 constraint_type(M, Type).
62
63constraint_type(clpq, clpq_constraint).
64constraint_type(clpr, clpr_constraint).
65
66clpqr_constraint(_ > _).
67clpqr_constraint(_ >= _).
68clpqr_constraint(_ < _).
69clpqr_constraint(_ =< _).
70clpqr_constraint(_ =:=_).
71clpqr_constraint(_ =\= _).
72clpqr_constraint(_ = _).
73
74prolog_colour:syntax_message(constraint(clpq)) -->
75 [ 'clp(Q) constraint'-[] ].
76prolog_colour:syntax_message(constraint(clpr)) -->
77 [ 'clp(R) constraint'-[] ].
78prolog_colour:syntax_message(type_error(constraint(clpq))) -->
79 [ 'Only clp(Q) constraints may appear inside {}'-[] ].
80prolog_colour:syntax_message(type_error(constraint(clpq))) -->
81 [ 'Only clp(R) constraints may appear inside {}'-[] ]