src/Pure/System/options.ML
changeset 51942 527e39becafc
parent 48698 2585042b1a30
child 51943 3278729bfa38
equal deleted inserted replaced
51941:ead4248aef3b 51942:527e39becafc
     6 
     6 
     7 signature OPTIONS =
     7 signature OPTIONS =
     8 sig
     8 sig
     9   type T
     9   type T
    10   val empty: T
    10   val empty: T
       
    11   val typ: T -> string -> string
    11   val bool: T -> string -> bool
    12   val bool: T -> string -> bool
    12   val int: T -> string -> int
    13   val int: T -> string -> int
    13   val real: T -> string -> real
    14   val real: T -> string -> real
    14   val string: T -> string -> string
    15   val string: T -> string -> string
    15   val declare: {name: string, typ: string, value: string} -> T -> T
    16   val declare: {name: string, typ: string, value: string} -> T -> T
    16   val decode: XML.body -> T
    17   val decode: XML.body -> T
    17   val default: unit -> T
    18   val default: unit -> T
       
    19   val default_bool: string -> bool
       
    20   val default_int: string -> int
       
    21   val default_real: string -> real
       
    22   val default_string: string -> string
    18   val set_default: T -> unit
    23   val set_default: T -> unit
    19   val reset_default: unit -> unit
    24   val reset_default: unit -> unit
    20   val load_default: unit -> unit
    25   val load_default: unit -> unit
    21 end;
    26 end;
    22 
    27 
    31 val stringT = "string";
    36 val stringT = "string";
    32 
    37 
    33 datatype T = Options of {typ: string, value: string} Symtab.table;
    38 datatype T = Options of {typ: string, value: string} Symtab.table;
    34 
    39 
    35 val empty = Options Symtab.empty;
    40 val empty = Options Symtab.empty;
       
    41 
       
    42 
       
    43 (* typ *)
       
    44 
       
    45 fun typ (Options tab) name =
       
    46   (case Symtab.lookup tab name of
       
    47     SOME opt => #typ opt
       
    48   | NONE => error ("Unknown option " ^ quote name));
    36 
    49 
    37 
    50 
    38 (* get *)
    51 (* get *)
    39 
    52 
    40 fun get T parse (Options tab) name =
    53 fun get T parse (Options tab) name =
    85 fun default () =
    98 fun default () =
    86   (case Synchronized.value global_default of
    99   (case Synchronized.value global_default of
    87     SOME options => options
   100     SOME options => options
    88   | NONE => error "No global default options");
   101   | NONE => error "No global default options");
    89 
   102 
       
   103 fun default_bool name = bool (default ()) name;
       
   104 fun default_int name = int (default ()) name;
       
   105 fun default_real name = real (default ()) name;
       
   106 fun default_string name = string (default ()) name;
       
   107 
    90 fun set_default options = Synchronized.change global_default (K (SOME options));
   108 fun set_default options = Synchronized.change global_default (K (SOME options));
    91 fun reset_default () = Synchronized.change global_default (K NONE);
   109 fun reset_default () = Synchronized.change global_default (K NONE);
    92 
   110 
    93 fun load_default () =
   111 fun load_default () =
    94   (case getenv "ISABELLE_PROCESS_OPTIONS" of
   112   (case getenv "ISABELLE_PROCESS_OPTIONS" of