]> matita.cs.unibo.it Git - pkg-cerco/acc.git/blob - src/utilities/printPottier.mli
first version of the package
[pkg-cerco/acc.git] / src / utilities / printPottier.mli
1 (* Pasted from Pottier's PP compiler *)
2
3 (** This module provides printing utilities. *)
4
5 type punctuation =
6     unit -> string
7
8 type 'a printer =
9     unit -> 'a -> string
10
11 (* [nl] prints a newline character and a certain amount of
12    whitespace that reflects the current indentation level. *)
13
14 val nl: punctuation
15
16 (* [indent ofs] transforms a printer into another printer
17    that indents material [ofs] characters to the right. *)
18
19 val indent: int -> 'a printer -> 'a printer
20
21 (* [list] prints a list without any delimiters. *)
22
23 val list: 'a printer -> 'a list printer
24
25 (* [preclist] prints a list where a delimiter precedes every
26    element. *)
27
28 val preclist: punctuation -> 'a printer -> 'a list printer
29
30 (* [termlist] prints a list where a delimiter terminates every
31    element. *)
32
33 val termlist: punctuation -> 'a printer -> 'a list printer
34
35 (* [seplist] prints a list where a separator separates every two
36    consecutive elements. *)
37
38 val seplist: punctuation -> 'a printer -> 'a list printer
39
40 (* [annlist] prints nothing if its list argument is empty, and prints
41    an announcement followed by the list if the list is nonempty. *)
42
43 val annlist: punctuation -> 'a list printer -> 'a list printer
44
45 (* Punctuation. *)
46
47 val space: punctuation
48 val comma: punctuation
49 val semicolon: punctuation
50 val var: punctuation
51 val seminl: punctuation
52 val nlspace: int -> punctuation
53 val nlnl: punctuation
54
55 (* [atmost n delimiter stop] normally prints a [delimiter], except that,
56    every [n] calls, it prints a [stop] in addition. *)
57
58 val atmost: int -> punctuation -> punctuation -> punctuation
59
60 (* [catenate] turns a list of columns into a single column, adding
61    padding (whitespace) to enforce alignment. *)
62
63 val catenate: string list list -> string list
64
65 (* [transposerev] turns a reversed list of lines into a list of columns. *)
66
67 val transposerev: string list list -> string list list
68
69 (* [showif flag printer x] displays [x] on standard output using
70    [printer] when [flag] is set. It returns [x]. *)
71
72 val showif: bool -> 'a printer -> 'a -> 'a
73