| author | desharna | 
| Fri, 01 Aug 2025 12:16:43 +0200 | |
| changeset 82911 | 22169c4f13d1 | 
| 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: 
51665diff
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: 
51665diff
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: 
81557diff
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: 
51665diff
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: 
51665diff
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: 
51665diff
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: 
81557diff
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; |