1:- module(st_white, [
2 st_strip_indent/2
3]).
10:- use_module(library(dcg/basics)).
16st_strip_indent(Codes, Stripped):-
17 phrase(strip_rest(Tmp), Codes),
18 phrase(collapse(Out), Tmp), !,
19 Stripped = Out.
20
21strip_rest([0'\n|Codes]) -->
22 whites, ln, whites, !,
23 strip_rest(Codes).
24
25strip_rest([]) -->
26 eos, !.
27
28strip_rest([Code|Codes]) -->
29 [Code], strip_rest(Codes).
30
34
35collapse([0'\n|Codes]) -->
36 line_ends, !, collapse(Codes).
37
38collapse([Code|Codes]) -->
39 [Code], !, collapse(Codes).
40
41collapse([]) --> "".
42
43line_ends -->
44 "\n", line_ends.
45
46line_ends -->
47 "\n".
48
49ln --> "\r\n", !.
50ln --> "\n", !.
51ln --> "\r"
Whitespace handling
Removes indents and collapses extra line ends. */