3 | Id of string (* literal *)
4 | Symbol of string * int (* literal, instance num *)
5 | Num of int (* instance num *)
10 let compare = Pervasives.compare
13 module Domain = Set.Make (OrderedDomain)
14 module Environment = Map.Make (OrderedDomain)
17 string * (* description *)
18 (environment -> string -> Cic.term list -> Cic.term)
19 (* environment, literal number, arguments as needed *)
21 and environment = codomain_item Environment.t
23 module type Callbacks =
25 val output_html : ?append_NL:bool -> Ui_logger.html_msg -> unit
26 val interactive_user_uri_choice :
27 selection_mode:[`SINGLE | `MULTIPLE] ->
29 ?enable_button_for_non_vars:bool ->
30 title:string -> msg:string -> id:string -> string list -> string list
31 val interactive_interpretation_choice :
32 (string * string) list list -> int
33 val input_or_locate_uri : title:string -> UriManager.uri
36 let string_of_domain_item = function
37 | Id s -> Printf.sprintf "ID(%s)" s
38 | Symbol (s, i) -> Printf.sprintf "SYMBOL(%s,%d)" s i
39 | Num i -> Printf.sprintf "NUM(instance %d)" i
41 let string_of_domain dom =
42 let buf = Buffer.create 1024 in
44 (fun item -> Buffer.add_string buf (string_of_domain_item item ^ "; "))
48 module EnvironmentP3 =
57 | Id id ->s ^ Printf.sprintf "alias %s %s\n" id (fst v)
61 let of_string inputtext =
63 let alfa = "[a-zA-Z_-]" in
64 let digit = "[0-9]" in
65 let ident = alfa ^ "\(" ^ alfa ^ "\|" ^ digit ^ "\)*" in
66 let blanks = "\( \|\t\|\n\)+" in
67 let nonblanks = "[^ \t\n]+" in
68 let uri = "/\(" ^ ident ^ "/\)*" ^ nonblanks in (* not very strict check *)
70 ("alias" ^ blanks ^ "\(" ^ ident ^ "\)" ^ blanks ^ "\(" ^ uri ^ "\)")
74 let n' = Str.search_forward regexpr inputtext n in
75 let id = Id (Str.matched_group 2 inputtext) in
76 let uri = "cic:" ^ (Str.matched_group 5 inputtext) in
77 let resolve_id = aux (n' + 1) in
78 if Environment.mem id resolve_id then
82 HelmLibraryObjects.term_of_uri (UriManager.uri_of_string uri)
84 (Environment.add id (uri, (fun _ _ _ -> term))
87 Not_found -> Environment.empty