author | wenzelm |
Thu, 22 Nov 2007 14:51:34 +0100 | |
changeset 25456 | 6f79698f294d |
parent 25118 | 158149a6e95b |
child 25734 | b00b903ae8ae |
permissions | -rw-r--r-- |
23827 | 1 |
(* Title: Pure/General/print_mode.ML |
2 |
ID: $Id$ |
|
3 |
Author: Makarius |
|
4 |
||
5 |
Generic print mode -- implicit configuration for various output |
|
6 |
mechanisms. |
|
7 |
*) |
|
8 |
||
23934 | 9 |
signature BASIC_PRINT_MODE = |
23827 | 10 |
sig |
11 |
val print_mode: string list ref |
|
24613 | 12 |
val print_mode_value: unit -> string list |
23827 | 13 |
val print_mode_active: string -> bool |
14 |
end; |
|
15 |
||
23934 | 16 |
signature PRINT_MODE = |
17 |
sig |
|
18 |
include BASIC_PRINT_MODE |
|
25118
158149a6e95b
added input/internal, which are never active in print_mode_value;
wenzelm
parents:
24634
diff
changeset
|
19 |
val input: string |
158149a6e95b
added input/internal, which are never active in print_mode_value;
wenzelm
parents:
24634
diff
changeset
|
20 |
val internal: string |
24634 | 21 |
val setmp: string list -> ('a -> 'b) -> 'a -> 'b |
23934 | 22 |
val with_modes: string list -> ('a -> 'b) -> 'a -> 'b |
23 |
end; |
|
24 |
||
23827 | 25 |
structure PrintMode: PRINT_MODE = |
26 |
struct |
|
27 |
||
25118
158149a6e95b
added input/internal, which are never active in print_mode_value;
wenzelm
parents:
24634
diff
changeset
|
28 |
val input = "input"; |
158149a6e95b
added input/internal, which are never active in print_mode_value;
wenzelm
parents:
24634
diff
changeset
|
29 |
val internal = "internal"; |
24613 | 30 |
|
25118
158149a6e95b
added input/internal, which are never active in print_mode_value;
wenzelm
parents:
24634
diff
changeset
|
31 |
val print_mode = ref ([]: string list); |
158149a6e95b
added input/internal, which are never active in print_mode_value;
wenzelm
parents:
24634
diff
changeset
|
32 |
fun get_mode () = subtract (op =) [input, internal] (! print_mode); |
158149a6e95b
added input/internal, which are never active in print_mode_value;
wenzelm
parents:
24634
diff
changeset
|
33 |
|
158149a6e95b
added input/internal, which are never active in print_mode_value;
wenzelm
parents:
24634
diff
changeset
|
34 |
fun print_mode_value () = NAMED_CRITICAL "print_mode" get_mode; |
24613 | 35 |
fun print_mode_active s = member (op =) (print_mode_value ()) s; |
23827 | 36 |
|
24634 | 37 |
fun setmp modes f x = NAMED_CRITICAL "print_mode" (fn () => Library.setmp print_mode modes f x); |
38 |
fun with_modes modes f x = NAMED_CRITICAL "print_mode" (fn () => setmp (modes @ ! print_mode) f x); |
|
23934 | 39 |
|
23827 | 40 |
end; |
41 |
||
23934 | 42 |
structure BasicPrintMode: BASIC_PRINT_MODE = PrintMode; |
43 |
open BasicPrintMode; |