X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2FmatitaTypes.ml;h=5df68ea86dca84d94d0ff52b4c86c082a9081935;hb=5a702cea95883f7095c16b450e065ccb1714fc5a;hp=f5ec78ee00c33c4ee29f94f1038b069d4de442aa;hpb=de4483296d06aac3df4da10d5401b1f97c4350ab;p=helm.git diff --git a/helm/matita/matitaTypes.ml b/helm/matita/matitaTypes.ml index f5ec78ee0..5df68ea86 100644 --- a/helm/matita/matitaTypes.ml +++ b/helm/matita/matitaTypes.ml @@ -57,19 +57,53 @@ type option_value = type options = option_value StringMap.t let no_options = StringMap.empty +type ast_command = (CicNotationPt.term, GrafiteAst.obj) GrafiteAst.command + type status = { - aliases: DisambiguateTypes.environment; (** disambiguation aliases *) + aliases: DisambiguateTypes.environment; + multi_aliases: DisambiguateTypes.multiple_environment; + moo_content_rev: ast_command list; proof_status: proof_status; options: options; - coercions: CoercGraph.coercions; objects: (UriManager.uri * string) list; - (** in-scope objects, with their paths *) + notation_ids: CicNotation.notation_id list; } +let set_metasenv metasenv status = + let proof_status = + match status.proof_status with + | No_proof -> Intermediate metasenv + | Incomplete_proof ((uri, _, proof, ty), goal) -> + Incomplete_proof ((uri, metasenv, proof, ty), goal) + | Intermediate _ -> Intermediate metasenv + | Proof _ -> assert false + in + { status with proof_status = proof_status } + +let add_moo_content cmds status = + let content = status.moo_content_rev in + let content' = + List.fold_right + (fun cmd acc -> +(* prerr_endline ("adding to moo command: " ^ GrafiteAstPp.pp_command cmd); *) + match cmd with + | GrafiteAst.Interpretation _ + | GrafiteAst.Default _ -> + if List.mem cmd content then acc + else cmd :: acc + | GrafiteAst.Alias _ -> (* move Alias as the last inserted one *) + cmd :: (List.filter ((<>) cmd) acc) + | _ -> cmd :: acc) + cmds content + in +(* prerr_endline ("new moo content: " ^ String.concat " " (List.map + GrafiteAstPp.pp_command content')); *) + { status with moo_content_rev = content' } + let dump_status status = MatitaLog.message "status.aliases:\n"; MatitaLog.message - (CicTextualParser2.EnvironmentP3.to_string status.aliases ^ "\n"); + (DisambiguatePp.pp_environment status.aliases ^ "\n"); MatitaLog.message "status.proof_status:"; MatitaLog.message (match status.proof_status with @@ -86,11 +120,6 @@ let dump_status status = in MatitaLog.message (k ^ "::=" ^ v)) status.options; MatitaLog.message "status.coercions\n"; - List.iter - (fun (u1,u2,u3) -> MatitaLog.message - ((UriManager.string_of_uri u1) ^ - (UriManager.string_of_uri u2) ^ - (UriManager.string_of_uri u3))) status.coercions; MatitaLog.message "status.objects:\n"; List.iter (fun (u,_) -> @@ -132,7 +161,10 @@ let set_option status name value = with Failure _ -> command_error (sprintf "Not an integer value \"%s\"" value)) in - { status with options = StringMap.add name value status.options } + if StringMap.mem name status.options && name = "baseuri" then + command_error "Redefinition of 'baseuri' is forbidden." + else + { status with options = StringMap.add name value status.options } (* subset of MatitaConsole.console methods needed by MatitaInterpreter *) class type console = @@ -156,8 +188,8 @@ type mathViewer_entry = | `Check of string (* term *) | `Cic of Cic.term * Cic.metasenv | `Dir of string (* "directory" in cic uris namespace *) - | `Uri of string (* cic object uri *) - | `Whelp of string * string list (* query and results *) + | `Uri of UriManager.uri (* cic object uri *) + | `Whelp of string * UriManager.uri list (* query and results *) ] let string_of_entry = function @@ -166,8 +198,16 @@ let string_of_entry = function | `About `Us -> "about:us" | `Check _ -> "check:" | `Cic (_, _) -> "term:" - | `Dir uri | `Uri uri -> uri - | `Whelp (query, _) -> sprintf "whelp:%s" query + | `Dir uri -> uri + | `Uri uri -> UriManager.string_of_uri uri + | `Whelp (query, _) -> query + +let entry_of_string = function + | "about:blank" -> `About `Blank + | "about:proof" -> `About `Current_proof + | "about:us" -> `About `Us + | _ -> (* only about entries supported ATM *) + raise (Invalid_argument "entry_of_string") class type mathViewer = object @@ -176,6 +216,6 @@ class type mathViewer = *) method show_entry: ?reuse:bool -> mathViewer_entry -> unit method show_uri_list: - ?reuse:bool -> entry:mathViewer_entry -> string list -> unit + ?reuse:bool -> entry:mathViewer_entry -> UriManager.uri list -> unit end