author | wenzelm |
Thu, 07 Aug 2025 22:42:21 +0200 | |
changeset 82968 | b2b88d5b01b6 |
parent 82906 | a27841dcd7df |
permissions | -rw-r--r-- |
28019 | 1 |
(* Title: Pure/General/properties.ML |
2 |
Author: Makarius |
|
3 |
||
4 |
Property lists. |
|
5 |
*) |
|
6 |
||
7 |
signature PROPERTIES = |
|
8 |
sig |
|
50842 | 9 |
type entry = string * string |
10 |
type T = entry list |
|
80504 | 11 |
val print_eq: entry -> string |
71465
910a081cca74
more position information for oracles (e.g. "skip_proof" for 'sorry'), requires Proofterm.proofs := 1;
wenzelm
parents:
51665
diff
changeset
|
12 |
val entry_ord: entry ord |
910a081cca74
more position information for oracles (e.g. "skip_proof" for 'sorry'), requires Proofterm.proofs := 1;
wenzelm
parents:
51665
diff
changeset
|
13 |
val ord: T ord |
28019 | 14 |
val defined: T -> string -> bool |
15 |
val get: T -> string -> string option |
|
50842 | 16 |
val put: entry -> T -> T |
28019 | 17 |
val remove: string -> T -> T |
77777 | 18 |
val make_string: string -> string -> T |
82906
a27841dcd7df
more direct support for "command_span" markup property "is_begin";
wenzelm
parents:
81557
diff
changeset
|
19 |
val make_bool: string -> bool -> T |
77777 | 20 |
val make_int: string -> int -> T |
77772 | 21 |
val get_string: T -> string -> string |
81557 | 22 |
val get_bool: T -> string -> bool |
77772 | 23 |
val get_int: T -> string -> int |
24 |
val get_seconds: T -> string -> Time.time |
|
28019 | 25 |
end; |
26 |
||
27 |
structure Properties: PROPERTIES = |
|
28 |
struct |
|
29 |
||
50842 | 30 |
type entry = string * string; |
80504 | 31 |
|
50842 | 32 |
type T = entry list; |
28019 | 33 |
|
80504 | 34 |
fun print_eq (a, b) = a ^ "=" ^ b; |
35 |
||
71465
910a081cca74
more position information for oracles (e.g. "skip_proof" for 'sorry'), requires Proofterm.proofs := 1;
wenzelm
parents:
51665
diff
changeset
|
36 |
val entry_ord = prod_ord string_ord string_ord; |
910a081cca74
more position information for oracles (e.g. "skip_proof" for 'sorry'), requires Proofterm.proofs := 1;
wenzelm
parents:
51665
diff
changeset
|
37 |
val ord = list_ord entry_ord; |
910a081cca74
more position information for oracles (e.g. "skip_proof" for 'sorry'), requires Proofterm.proofs := 1;
wenzelm
parents:
51665
diff
changeset
|
38 |
|
28019 | 39 |
fun defined (props: T) name = AList.defined (op =) props name; |
40 |
fun get (props: T) name = AList.lookup (op =) props name; |
|
43780 | 41 |
fun put entry (props: T) = AList.update (op =) entry props; |
28019 | 42 |
fun remove name (props: T) = AList.delete (op =) name props; |
43 |
||
77777 | 44 |
fun make_string k s = if s = "" then [] else [(k, s)]; |
82906
a27841dcd7df
more direct support for "command_span" markup property "is_begin";
wenzelm
parents:
81557
diff
changeset
|
45 |
fun make_bool k b = if not b then [] else [(k, Value.print_bool b)]; |
77777 | 46 |
fun make_int k i = if i = 0 then [] else [(k, Value.print_int i)]; |
47 |
||
77772 | 48 |
val get_string = the_default "" oo get; |
49 |
||
81557 | 50 |
fun get_bool props name = |
51 |
(case get props name of |
|
52 |
NONE => false |
|
53 |
| SOME s => Value.parse_bool s); |
|
54 |
||
77772 | 55 |
fun get_int props name = |
56 |
(case get props name of |
|
57 |
NONE => 0 |
|
58 |
| SOME s => Value.parse_int s); |
|
59 |
||
60 |
fun get_seconds props name = |
|
61 |
(case get props name of |
|
51665 | 62 |
NONE => Time.zeroTime |
63 |
| SOME s => Time.fromReal (the_default 0.0 (Real.fromString s))); |
|
64 |
||
28019 | 65 |
end; |