2:- module(tidylog_common, [ codes//1
3 , end_of_line//0
4 , eos//0
5 , format//2
6 , parsing//0
7 , prefer_none//1
8 , prefer_one//1
9 , rest_of_line//1
10 , when_generating//1
11 , when_parsing//1
12 ]). 13
14:- use_module(library(tidylog/char), [horizontal//0]).
21parsing(H,H) :-
22 nonvar(H).
28eos([],[]).
34:- meta_predicate greedy(//,?,?). 35greedy(Rule) -->
36 call(Rule),
37 greedy(Rule).
38greedy(_) -->
39 [].
46end_of_line -->
47 "\n".
48end_of_line -->
49 eos.
55codes([]) -->
56 [].
57codes([Code|Codes]) -->
58 [Code],
59 codes(Codes).
66rest_of_line([]) -->
67 prefer_none(horizontal),
68 ( \+ \+ "\n" ; eos ).
69rest_of_line([Code|Codes]) -->
70 [Code],
71 { Code \== 0'\n },
72 rest_of_line(Codes).
79:- meta_predicate prefer_none(//,?,?). 80prefer_none(Rule) -->
81 ( parsing -> greedy(Rule); [] ).
88:- meta_predicate prefer_one(//,?,?). 89prefer_one(Rule) -->
90 ( parsing -> greedy(Rule); call(Rule) ).
96:- meta_predicate when_generating(0,?,?). 97when_generating(Goal) -->
98 ( parsing -> []; { call(Goal) } ).
104:- meta_predicate when_parsing(0,?,?). 105when_parsing(Goal) -->
106 ( parsing -> { call(Goal) }; [] ).
112format(Pattern,Args,H,T) :-
113 format(codes(H,T),Pattern,Args)