|
95 | 95 | op(200, fy, @)
|
96 | 96 | ]).
|
97 | 97 |
|
98 |
| -:- use_module(library(lists),[member/2,memberchk/2]). |
| 98 | +:- use_module(library(lists),[member/2,memberchk/2,reverse/2]). |
| 99 | +:- use_module(library(charsio)). |
99 | 100 | :- use_module(library(error)).
|
100 | 101 | :- use_module(library(dcgs)).
|
101 | 102 | :- use_module(library(si)).
|
|
636 | 637 | xsd_number_chars(Number, Chars) :-
|
637 | 638 | number_chars(Number, Chars).
|
638 | 639 |
|
639 |
| -normalize_space(Text0, Text) :- |
640 |
| - Text0 = Text. % no conversion for the moment. |
| 640 | +normalize_space(Cs0, Cs) :- |
| 641 | + must_be(chars, Cs0), |
| 642 | + no_leading_whitespace(Cs0, Cs1), |
| 643 | + reverse(Cs1, Cs2), |
| 644 | + no_leading_whitespace(Cs2, Cs3), |
| 645 | + reverse(Cs3, Cs4), |
| 646 | + single_intermediate_space(Cs4, Cs). |
| 647 | + |
| 648 | +no_leading_whitespace([], []). |
| 649 | +no_leading_whitespace([C0|Cs0], Cs) :- |
| 650 | + ( char_type(C0, whitespace) -> |
| 651 | + no_leading_whitespace(Cs0, Cs) |
| 652 | + ; Cs = [C0|Cs0] |
| 653 | + ). |
| 654 | + |
| 655 | +single_intermediate_space([], []). |
| 656 | +single_intermediate_space([C0|Cs0], [C|Cs]) :- |
| 657 | + ( char_type(C0, whitespace) -> |
| 658 | + no_leading_whitespace(Cs0, Cs1), |
| 659 | + C = ' ', |
| 660 | + single_intermediate_space(Cs1, Cs) |
| 661 | + ; C = C0, |
| 662 | + single_intermediate_space(Cs0, Cs) |
| 663 | + ). |
0 commit comments