X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FgTopLevel%2FgTopLevel.ml;h=88d819fded0abd67afdc1a8f4a8dce14af9f1835;hb=4227b4756648f58c9db4bcea9a6aa2770df3ac01;hp=9df5f8f75439f8966374aecf0260362c7c3a40fb;hpb=e636941304a5567a90e0d271e25325c0c8b5fce1;p=helm.git diff --git a/helm/gTopLevel/gTopLevel.ml b/helm/gTopLevel/gTopLevel.ml index 9df5f8f75..88d819fde 100644 --- a/helm/gTopLevel/gTopLevel.ml +++ b/helm/gTopLevel/gTopLevel.ml @@ -1,4 +1,4 @@ -(* Copyright (C) 2000-2002, HELM Team. +(* Copyright (C) 2000-2003, HELM Team. * * This file is part of HELM, an Hypertextual, Electronic * Library of Mathematics, developed at the Computer Science @@ -77,6 +77,16 @@ let prooffiletype = Not_found -> "/public/currentprooftype" ;; +let environmentfile = + try + Sys.getenv "GTOPLEVEL_ENVIRONMENTFILE" + with + Not_found -> "/public/environment" +;; + +let restore_environment_on_boot = true ;; +let notify_hbugs_on_goal_change = false ;; + (* GLOBAL REFERENCES (USED BY CALLBACKS) *) let htmlheader_and_content = ref htmlheader;; @@ -170,9 +180,7 @@ let string_of_cic_textual_parser_uri uri = ;; let output_html outputhtml msg = - htmlheader_and_content := !htmlheader_and_content ^ msg ; - outputhtml#source (!htmlheader_and_content ^ htmlfooter) ; - outputhtml#set_topline (-1) + outputhtml#log msg ;; (* UTILITY FUNCTIONS TO DISAMBIGUATE AN URI *) @@ -211,7 +219,7 @@ let check_window outputhtml uris = with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") + (`Error (`T (Printexc.to_string e))) ) ) uris in @@ -224,7 +232,7 @@ let check_window outputhtml uris = exception NoChoice;; let - interactive_user_uri_choice ~(selection_mode:[`SINGLE|`EXTENDED]) ?(ok="Ok") + interactive_user_uri_choice ~(selection_mode:[`MULTIPLE|`SINGLE]) ?(ok="Ok") ?(enable_button_for_non_vars=false) ~title ~msg uris = let choices = ref [] in @@ -470,7 +478,7 @@ let save_obj uri obj = ;; let qed () = - match !ProofEngine.proof with + match ProofEngine.get_proof () with None -> assert false | Some (uri,[],bo,ty) -> if @@ -497,16 +505,14 @@ let qed () = (** save an unfinished proof on the filesystem *) let save_unfinished_proof () = - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in let (xml, bodyxml) = ProofEngine.get_current_status_as_xml () in Xml.pp ~quiet:true xml (Some prooffiletype) ; output_html outputhtml - ("

Current proof type saved to " ^ - prooffiletype ^ "

") ; + (`Msg (`T ("Current proof type saved to " ^ prooffiletype))) ; Xml.pp ~quiet:true bodyxml (Some prooffile) ; output_html outputhtml - ("

Current proof body saved to " ^ - prooffile ^ "

") + (`Msg (`T ("Current proof body saved to " ^ prooffile))) ;; (* Used to typecheck the loaded proofs *) @@ -531,7 +537,7 @@ let decompose_uris_choice_callback uris = CicTextualParser0.IndTyUri (uri,typeno) -> (uri,typeno,[]) | _ -> assert false) (interactive_user_uri_choice - ~selection_mode:`EXTENDED ~ok:"Ok" ~enable_button_for_non_vars:false + ~selection_mode:`MULTIPLE ~ok:"Ok" ~enable_button_for_non_vars:false ~title:"Decompose" ~msg:"Please, select the Inductive Types to decompose" (List.map (function (uri,typeno,_) -> @@ -559,10 +565,10 @@ let mk_fresh_name_callback context name ~typ = let refresh_proof (output : TermViewer.proof_viewer) = try let uri,currentproof = - match !ProofEngine.proof with + match ProofEngine.get_proof () with None -> assert false | Some (uri,metasenv,bo,ty) -> - ProofEngine.proof := Some(uri,metasenv,bo,ty); + ProofEngine.set_proof (Some (uri,metasenv,bo,ty)) ; if List.length metasenv = 0 then begin !qed_set_sensitive true ; @@ -577,12 +583,16 @@ let refresh_proof (output : TermViewer.proof_viewer) = ignore (output#load_proof uri currentproof) with e -> - match !ProofEngine.proof with + match ProofEngine.get_proof () with None -> assert false | Some (uri,metasenv,bo,ty) -> prerr_endline ("Offending proof: " ^ CicPp.ppobj (Cic.CurrentProof ("questa",metasenv,bo,ty,[]))) ; flush stderr ; raise (InvokeTactics.RefreshProofException e) +let set_proof_engine_goal g = + ProofEngine.goal := g +;; + let refresh_goals ?(empty_notebook=true) notebook = try match !ProofEngine.goal with @@ -596,7 +606,7 @@ let refresh_goals ?(empty_notebook=true) notebook = notebook#proofw#unload | Some metano -> let metasenv = - match !ProofEngine.proof with + match ProofEngine.get_proof () with None -> assert false | Some (_,metasenv,_,_) -> metasenv in @@ -612,18 +622,18 @@ let refresh_goals ?(empty_notebook=true) notebook = notebook#remove_all_pages ~skip_switch_page_event ; List.iter (function (m,_,_) -> notebook#add_page m) metasenv ; in - if empty_notebook then - begin - regenerate_notebook () ; - notebook#set_current_page - ~may_skip_switch_page_event:false metano - end - else - begin - notebook#set_current_page - ~may_skip_switch_page_event:true metano ; - notebook#proofw#load_sequent metasenv currentsequent - end + if empty_notebook then + begin + regenerate_notebook () ; + notebook#set_current_page + ~may_skip_switch_page_event:false metano + end + else + begin + notebook#set_current_page + ~may_skip_switch_page_event:true metano ; + notebook#proofw#load_sequent metasenv currentsequent + end with e -> let metano = @@ -632,7 +642,7 @@ let metano = | Some m -> m in let metasenv = - match !ProofEngine.proof with + match ProofEngine.get_proof () with None -> assert false | Some (_,metasenv,_,_) -> metasenv in @@ -658,7 +668,7 @@ module InvokeTacticsCallbacks = let decompose_uris_choice_callback = decompose_uris_choice_callback let mk_fresh_name_callback = mk_fresh_name_callback - let output_html msg = output_html (outputhtml ()) msg + let output_html msg = output_html (outputhtml ()) (`Msg (`T msg)) end ;; module InvokeTactics' = InvokeTactics.Make (InvokeTacticsCallbacks);; @@ -677,7 +687,7 @@ let dummy_uri = "/dummy.con" (** load an unfinished proof from filesystem *) let load_unfinished_proof () = - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in let output = ((rendering_window ())#output : TermViewer.proof_viewer) in let notebook = (rendering_window ())#notebook in try @@ -691,35 +701,34 @@ let load_unfinished_proof () = match CicParser.obj_of_xml prooffiletype (Some prooffile) with Cic.CurrentProof (_,metasenv,bo,ty,_) -> typecheck_loaded_proof metasenv bo ty ; - ProofEngine.proof := - Some (uri, metasenv, bo, ty) ; - ProofEngine.goal := + ProofEngine.set_proof (Some (uri, metasenv, bo, ty)) ; + refresh_proof output ; + set_proof_engine_goal (match metasenv with [] -> None | (metano,_,_)::_ -> Some metano ) ; - refresh_proof output ; refresh_goals notebook ; output_html outputhtml - ("

Current proof type loaded from " ^ - prooffiletype ^ "

") ; + (`Msg (`T ("Current proof type loaded from " ^ + prooffiletype))) ; output_html outputhtml - ("

Current proof body loaded from " ^ - prooffile ^ "

") ; + (`Msg (`T ("Current proof body loaded from " ^ + prooffile))) ; !save_set_sensitive true; | _ -> assert false with InvokeTactics.RefreshSequentException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "sequent: " ^ Printexc.to_string e))) | InvokeTactics.RefreshProofException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "proof: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "proof: " ^ Printexc.to_string e))) | e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) ;; let edit_aliases () = @@ -734,7 +743,7 @@ let edit_aliases () = let scrolled_window = GBin.scrolled_window ~border_width:10 ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - let input = GEdit.text ~editable:true ~width:400 ~height:100 + let input = GText.view ~editable:true ~width:400 ~height:100 ~packing:scrolled_window#add () in let hbox = GPack.hbox ~border_width:0 @@ -751,7 +760,7 @@ let edit_aliases () = (okb#connect#clicked (function () -> chosen := true ; window#destroy ())) ; let dom,resolve_id = !id_to_uris in ignore - (input#insert_text ~pos:0 + (input#buffer#insert ~iter:(input#buffer#get_iter_at_char 0) (String.concat "\n" (List.map (function v -> @@ -774,7 +783,7 @@ let edit_aliases () = GtkThread.main (); if !chosen then let dom,resolve_id = - let inputtext = input#get_chars 0 input#length in + let inputtext = input#buffer#get_text () in let regexpr = let alfa = "[a-zA-Z_-]" in let digit = "[0-9]" in @@ -815,7 +824,7 @@ let proveit () = let module G = Gdome in let notebook = (rendering_window ())#notebook in let output = (rendering_window ())#output in - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml (*: GHtml.xmhtml*)) in try output#make_sequent_of_selected_term ; refresh_proof output ; @@ -823,22 +832,22 @@ let proveit () = with InvokeTactics.RefreshSequentException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "sequent: " ^ Printexc.to_string e))) | InvokeTactics.RefreshProofException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "proof: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "proof: " ^ Printexc.to_string e))) | e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") + (`Error (`T (Printexc.to_string e))) ;; let focus () = let module L = LogicalOperations in let module G = Gdome in let notebook = (rendering_window ())#notebook in - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in let output = (rendering_window ())#output in try output#focus_sequent_of_selected_term ; @@ -846,15 +855,15 @@ let focus () = with InvokeTactics.RefreshSequentException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "sequent: " ^ Printexc.to_string e))) | InvokeTactics.RefreshProofException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "proof: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "proof: " ^ Printexc.to_string e))) | e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") + (`Error (`T (Printexc.to_string e))) ;; exception NoPrevGoal;; @@ -864,9 +873,10 @@ let setgoal metano = let module L = LogicalOperations in let module G = Gdome in let notebook = (rendering_window ())#notebook in - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let output = (rendering_window ())#output in + let outputhtml = (rendering_window ())#outputhtml in let metasenv = - match !ProofEngine.proof with + match ProofEngine.get_proof () with None -> assert false | Some (_,metasenv,_,_) -> metasenv in @@ -875,11 +885,11 @@ let setgoal metano = with InvokeTactics.RefreshSequentException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "sequent: " ^ Printexc.to_string e))) | e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") + (`Error (`T (Printexc.to_string e))) ;; let @@ -896,7 +906,7 @@ let let _ = window#event#connect#delete (fun _ -> window#misc#hide () ; true ) in let href = Gdome.domString "href" in let show_in_show_window_obj uri obj = - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in try let (acic,ids_to_terms,ids_to_father_ids,ids_to_inner_sorts, @@ -914,7 +924,7 @@ let with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) in let show_in_show_window_uri uri = let obj = CicEnvironment.get_obj uri in @@ -957,7 +967,7 @@ let user_uri_choice ~title ~msg uris = ;; let locate_callback id = - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in let out = output_html outputhtml in let query = MQG.locate id in let result = MQI.execute mqi_handle query in @@ -966,10 +976,10 @@ let locate_callback id = (function uri,_ -> MQueryMisc.wrong_xpointer_format_from_wrong_xpointer_format' uri) result in - out "

Locate Query:

";
-  MQueryUtil.text_of_query out query ""; 
-  out "

Result:

"; - MQueryUtil.text_of_result out result "
"; + out (`Msg (`T "Locate Query:")) ; + MQueryUtil.text_of_query (fun m -> out (`Msg (`T m))) "" query; + out (`Msg (`T "Result:")) ; + MQueryUtil.text_of_result (fun m -> out (`Msg (`T m))) "" result; user_uri_choice ~title:"Ambiguous input." ~msg: ("Ambiguous input \"" ^ id ^ @@ -1021,25 +1031,25 @@ let input_or_locate_uri ~title = ignore (cancelb#connect#clicked (function () -> uri := None ; window#destroy ())) ; let check_callback () = - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in let uri = "cic:" ^ manual_input#text in try ignore (Getter.resolve (UriManager.uri_of_string uri)) ; - output_html outputhtml "

OK

" ; + output_html outputhtml (`Msg (`T "OK")) ; true with Getter.Unresolved -> output_html outputhtml - ("

URI " ^ uri ^ - " does not correspond to any object.

") ; + (`Error (`T ("URI " ^ uri ^ + " does not correspond to any object."))) ; false | UriManager.IllFormedUri _ -> output_html outputhtml - ("

URI " ^ uri ^ " is not well-formed.

") ; + (`Error (`T ("URI " ^ uri ^ " is not well-formed."))) ; false | e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) ; false in ignore @@ -1098,7 +1108,7 @@ module Callbacks = let get_metasenv () = !ChosenTextualParser0.metasenv let set_metasenv metasenv = ChosenTextualParser0.metasenv := metasenv - let output_html msg = output_html (outputhtml ()) msg;; + let output_html msg = output_html (outputhtml ()) (`Msg (`T msg));; let interactive_user_uri_choice = fun ~selection_mode ?ok ?enable_button_for_non_vars ~title ~msg ~id -> interactive_user_uri_choice ~selection_mode ?ok @@ -1114,7 +1124,7 @@ module TexTermEditor' = ChosenTermEditor.Make(Callbacks);; let locate () = let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in try match GToolbox.input_string ~title:"Locate" "Enter an identifier to locate:" @@ -1126,7 +1136,7 @@ let locate () = with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") + (`Error (`T (Printexc.to_string e))) ;; @@ -1135,7 +1145,7 @@ exception NotAUriToAConstant;; let new_inductive () = let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in let output = ((rendering_window ())#output : TermViewer.proof_viewer) in let notebook = (rendering_window ())#notebook in @@ -1235,7 +1245,7 @@ let new_inductive () = with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) )) (* Second phase *) and phase2 () = @@ -1342,7 +1352,7 @@ let new_inductive () = with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) )) (* Third phase *) and phase3 name cons = @@ -1416,7 +1426,7 @@ let new_inductive () = with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) )) ; window2#show () ; GtkThread.main (); @@ -1441,7 +1451,7 @@ let new_inductive () = (*CSC: Da finire *) let params = [] in let tys = !get_types_and_cons () in - let obj = Cic.InductiveDefinition tys params !paramsno in + let obj = Cic.InductiveDefinition(tys,params,!paramsno) in begin try prerr_endline (CicPp.ppobj obj) ; @@ -1462,12 +1472,12 @@ let new_inductive () = with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) ;; let new_proof () = let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in let output = ((rendering_window ())#output : TermViewer.proof_viewer) in let notebook = (rendering_window ())#notebook in @@ -1561,7 +1571,7 @@ prerr_endline ("######################## " ^ xxx) ; with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) )) ; window#show () ; GtkThread.main (); @@ -1569,9 +1579,9 @@ prerr_endline ("######################## " ^ xxx) ; try let metasenv,expr = !get_metasenv_and_term () in let _ = CicTypeChecker.type_of_aux' metasenv [] expr in - ProofEngine.proof := - Some (!get_uri (), (1,[],expr)::metasenv, Cic.Meta (1,[]), expr) ; - ProofEngine.goal := Some 1 ; + ProofEngine.set_proof + (Some (!get_uri (), (1,[],expr)::metasenv, Cic.Meta (1,[]), expr)) ; + set_proof_engine_goal (Some 1) ; refresh_goals notebook ; refresh_proof output ; !save_set_sensitive true ; @@ -1582,15 +1592,15 @@ prerr_endline ("######################## " ^ xxx) ; with InvokeTactics.RefreshSequentException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "sequent: " ^ Printexc.to_string e))) | InvokeTactics.RefreshProofException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "proof: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "proof: " ^ Printexc.to_string e))) | e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) ;; let check_term_in_scratch scratch_window metasenv context expr = @@ -1610,9 +1620,9 @@ let check_term_in_scratch scratch_window metasenv context expr = let check scratch_window () = let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in let metasenv = - match !ProofEngine.proof with + match ProofEngine.get_proof () with None -> [] | Some (_,metasenv,_,_) -> metasenv in @@ -1631,23 +1641,23 @@ let check scratch_window () = with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) ;; let show () = - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in try show_in_show_window_uri (input_or_locate_uri ~title:"Show") with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) ;; exception NotADefinition;; let open_ () = - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in let output = ((rendering_window ())#output : TermViewer.proof_viewer) in let notebook = (rendering_window ())#notebook in try @@ -1661,24 +1671,23 @@ let open_ () = | Cic.Variable _ | Cic.InductiveDefinition _ -> raise NotADefinition in - ProofEngine.proof := - Some (uri, metasenv, bo, ty) ; - ProofEngine.goal := None ; + ProofEngine.set_proof (Some (uri, metasenv, bo, ty)) ; + set_proof_engine_goal None ; refresh_goals notebook ; refresh_proof output ; !save_set_sensitive true with InvokeTactics.RefreshSequentException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "sequent: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "sequent: " ^ Printexc.to_string e))) | InvokeTactics.RefreshProofException e -> output_html outputhtml - ("

Exception raised during the refresh of the " ^ - "proof: " ^ Printexc.to_string e ^ "

") + (`Error (`T ("Exception raised during the refresh of the " ^ + "proof: " ^ Printexc.to_string e))) | e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) ;; let show_query_results results = @@ -1919,7 +1928,7 @@ let refine_constraints (must_obj,must_rel,must_sort) = let completeSearchPattern () = let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in try let metasenv,expr = inputt#get_metasenv_and_term ~context:[] ~metasenv:[] in let must = CGSearchPattern.get_constraints expr in @@ -1932,11 +1941,11 @@ let completeSearchPattern () = with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) ;; let insertQuery () = - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in try let chosen = ref None in let window = @@ -1949,7 +1958,7 @@ let insertQuery () = let scrolled_window = GBin.scrolled_window ~border_width:10 ~height:400 ~width:600 ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in - let input = GEdit.text ~editable:true + let input = GText.view ~editable:true ~packing:scrolled_window#add () in let hbox = GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in @@ -1967,7 +1976,7 @@ let insertQuery () = ignore (okb#connect#clicked (function () -> - chosen := Some (input#get_chars 0 input#length) ; window#destroy ())) ; + chosen := Some (input#buffer#get_text ()) ; window#destroy ())) ; ignore (loadb#connect#clicked (function () -> @@ -1985,8 +1994,8 @@ let insertQuery () = End_of_file -> "" in let text = read_file () in - input#delete_text 0 input#length ; - ignore (input#insert_text text ~pos:0))) ; + input#buffer#delete input#buffer#start_iter input#buffer#end_iter ; + ignore (input#buffer#insert text))) ; window#set_position `CENTER ; window#show () ; GtkThread.main (); @@ -2000,7 +2009,7 @@ let insertQuery () = with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") ; + (`Error (`T (Printexc.to_string e))) ;; let choose_must list_of_must only = @@ -2076,7 +2085,7 @@ let choose_must list_of_must only = ~packing:(vbox#pack ~expand:true ~fill:true ~padding:5) () in let clist = GList.clist ~columns:2 ~packing:scrolled_window#add - ~selection_mode:`EXTENDED + ~selection_mode:`MULTIPLE ~titles:["URI" ; "Position"] () in ignore @@ -2130,10 +2139,10 @@ let choose_must list_of_must only = let searchPattern () = let inputt = ((rendering_window ())#inputt : TermEditor.term_editor) in - let outputhtml = ((rendering_window ())#outputhtml : GHtml.xmhtml) in + let outputhtml = ((rendering_window ())#outputhtml(* : GHtml.xmhtml*)) in try let proof = - match !ProofEngine.proof with + match ProofEngine.get_proof () with None -> assert false | Some proof -> proof in @@ -2143,8 +2152,8 @@ let searchPattern () = let uris' = TacticChaser.matchConclusion mqi_handle - ~output_html:(output_html outputhtml) ~choose_must () - ~status:(proof, metano) + ~output_html:(fun m -> output_html outputhtml (`Msg (`T m))) + ~choose_must () ~status:(proof, metano) in let uri' = user_uri_choice ~title:"Ambiguous input." @@ -2156,11 +2165,12 @@ let searchPattern () = with e -> output_html outputhtml - ("

" ^ Printexc.to_string e ^ "

") + (`Error (`T (Printexc.to_string e))) ;; let choose_selection mmlwidget (element : Gdome.element option) = let module G = Gdome in + prerr_endline "Il bandolo" ; let rec aux element = if element#hasAttributeNS ~namespaceURI:Misc.helmns @@ -2189,6 +2199,7 @@ let choose_selection mmlwidget (element : Gdome.element option) = (* Stuff for the widget settings *) +(* let export_to_postscript output = let lastdir = ref (Unix.getcwd ()) in function () -> @@ -2201,7 +2212,9 @@ let export_to_postscript output = (output :> GMathView.math_view)#export_to_postscript ~filename:filename (); ;; +*) +(* let activate_t1 output button_set_anti_aliasing button_set_transparency export_to_postscript_menu_item button_t1 () @@ -2230,6 +2243,7 @@ let set_anti_aliasing output button_set_anti_aliasing () = let set_transparency output button_set_transparency () = output#set_transparency button_set_transparency#active ;; +*) let changefont output font_size_spinb () = output#set_font_size font_size_spinb#value_as_int @@ -2292,14 +2306,18 @@ object(self) button_set_anti_aliasing#misc#set_sensitive false ; button_set_transparency#misc#set_sensitive false ; (* Signals connection *) + (* ignore(button_t1#connect#clicked (activate_t1 output button_set_anti_aliasing button_set_transparency export_to_postscript_menu_item button_t1)) ; + *) ignore(font_size_spinb#connect#changed (changefont output font_size_spinb)) ; + (* ignore(button_set_anti_aliasing#connect#toggled (set_anti_aliasing output button_set_anti_aliasing)); ignore(button_set_transparency#connect#toggled (set_transparency output button_set_transparency)) ; + *) ignore(log_verbosity_spinb#connect#changed (set_log_verbosity output log_verbosity_spinb)) ; ignore(closeb#connect#clicked settings_window#misc#hide) @@ -2642,15 +2660,93 @@ object(self) if not skip then try let (metano,setgoal,page) = List.nth !pages i in - ProofEngine.goal := Some metano ; + set_proof_engine_goal (Some metano) ; Lazy.force (page#compute) ; Lazy.force setgoal; - Hbugs.notify () + if notify_hbugs_on_goal_change then + Hbugs.notify () with _ -> () )) end ;; +let dump_environment () = + try + let oc = open_out environmentfile in + output_html (outputhtml ()) (`Msg (`T "Dumping environment ...")); + CicEnvironment.dump_to_channel + ~callback:(fun uri -> output_html (outputhtml ()) (`Msg (`T uri))) + oc; + output_html (outputhtml ()) (`Msg (`T "... done!")) ; + close_out oc + with exc -> + output_html (outputhtml ()) + (`Error (`T (Printf.sprintf + "

Dump failure, uncaught exception:%s

" + (Printexc.to_string exc)))) +;; +let restore_environment () = + try + let ic = open_in environmentfile in + output_html (outputhtml ()) (`Msg (`L [`T "Restoring environment ... " ; `BR])); + CicEnvironment.restore_from_channel + ~callback:(fun uri -> output_html (outputhtml ()) (`Msg (`L [`T uri ; `BR]))) + ic; + output_html (outputhtml ()) (`Msg (`T "... done!")); + close_in ic + with exc -> + output_html (outputhtml ()) + (`Error (`T (Printf.sprintf + "

Restore failure, uncaught exception:%s

" + (Printexc.to_string exc)))) +;; + +(* HTML simulator (first in its kind) *) + +type log_msg = + [ `T of string + | `L of log_msg list + | `BR + ] +;; + +class logger ~width ~height ~packing ~show () = + let scrolled_window = + GBin.scrolled_window ~packing ~show () in + let vadj = scrolled_window#vadjustment in + let tv = + GText.view ~editable:false ~cursor_visible:false + ~width ~height ~packing:(scrolled_window#add) () in + let green = + tv#buffer#create_tag + [`FOREGROUND_SET true ; + `FOREGROUND_GDK + (Gdk.Color.alloc (Gdk.Color.get_system_colormap ()) (`NAME "green"))] in + let red = + tv#buffer#create_tag + [`FOREGROUND_SET true ; + `FOREGROUND_GDK + (Gdk.Color.alloc (Gdk.Color.get_system_colormap ()) (`NAME "red"))] in + object + method log (m : [`Msg of log_msg | `Error of log_msg]) = + let process_msg tags = + let rec aux = + function + `T s -> tv#buffer#insert ~tags s + | `L l -> List.iter aux l + | `BR -> tv#buffer#insert ~tags "\n" + in + aux + in + begin + match m with + `Msg m -> process_msg [green] m + | `Error m -> process_msg [red] m + end ; + vadj#set_value (vadj#upper) + end +;; + (* Main window *) class rendering_window output (notebook : notebook) = @@ -2669,7 +2765,8 @@ class rendering_window output (notebook : notebook) = (* file menu *) let file_menu = factory0#add_submenu "File" in let factory1 = new GMenu.factory file_menu ~accel_group in - let export_to_postscript_menu_item = + (* let export_to_postscript_menu_item = *) + let _ = begin let _ = factory1#add_item "New Block of (Co)Inductive Definitions..." @@ -2693,19 +2790,26 @@ class rendering_window output (notebook : notebook) = factory1#add_item "Save Unfinished Proof" ~key:GdkKeysyms._S ~callback:save_unfinished_proof in + ignore (factory1#add_separator ()) ; + ignore (factory1#add_item "Clear Environment" ~callback:CicEnvironment.empty); + ignore (factory1#add_item "Dump Environment" ~callback:dump_environment); + ignore + (factory1#add_item "Restore Environment" ~callback:restore_environment); ignore (save_set_sensitive := function b -> save_menu_item#misc#set_sensitive b); ignore (!save_set_sensitive false); ignore (qed_set_sensitive:=function b -> qed_menu_item#misc#set_sensitive b); ignore (!qed_set_sensitive false); ignore (factory1#add_separator ()) ; + (* let export_to_postscript_menu_item = factory1#add_item "Export to PostScript..." ~callback:(export_to_postscript output) in + *) ignore (factory1#add_separator ()) ; ignore - (factory1#add_item "Exit" ~key:GdkKeysyms._Q ~callback:GMain.Main.quit) ; - export_to_postscript_menu_item + (factory1#add_item "Exit" ~key:GdkKeysyms._Q ~callback:GMain.Main.quit) (*; + export_to_postscript_menu_item *) end in (* edit menu *) let edit_menu = factory0#add_submenu "Edit Current Proof" in @@ -2756,7 +2860,10 @@ class rendering_window output (notebook : notebook) = factory6#add_check_item ~active:false ~key:GdkKeysyms._F5 ~callback:Hbugs.toggle "HBugs enabled" in - let _ = factory6#add_item ~callback:Hbugs.notify "(Re)Submit status!" in + let _ = + factory6#add_item ~key:GdkKeysyms._Return ~callback:Hbugs.notify + "(Re)Submit status!" + in let _ = factory6#add_separator () in let _ = factory6#add_item ~callback:Hbugs.start_web_services "Start Web Services" @@ -2780,20 +2887,20 @@ class rendering_window output (notebook : notebook) = ~callback: (function _ -> ApplyStylesheets.reload_stylesheets () ; - if !ProofEngine.proof <> None then + if ProofEngine.get_proof () <> None then try refresh_goals notebook ; refresh_proof output with InvokeTactics.RefreshSequentException e -> output_html (outputhtml ()) - ("

An error occurred while refreshing the " ^ - "sequent: " ^ Printexc.to_string e ^ "

") ; + (`Error (`T ("An error occurred while refreshing the " ^ + "sequent: " ^ Printexc.to_string e))) ; (*notebook#remove_all_pages ~skip_switch_page_event:false ;*) notebook#set_empty_page | InvokeTactics.RefreshProofException e -> output_html (outputhtml ()) - ("

An error occurred while refreshing the proof: " ^ Printexc.to_string e ^ "

") ; + (`Error (`T ("An error occurred while refreshing the proof: " ^ Printexc.to_string e))) ; output#unload ) in (* accel group *) @@ -2830,10 +2937,8 @@ class rendering_window output (notebook : notebook) = GBin.frame ~shadow_type:`IN ~packing:(vboxl#pack ~expand:true ~padding:5) () in let outputhtml = - GHtml.xmhtml - ~source:"" + new logger ~width:400 ~height: 100 - ~border_width:20 ~packing:frame#add ~show:true () in object @@ -2845,7 +2950,7 @@ object method show = window#show initializer notebook#set_empty_page ; - export_to_postscript_menu_item#misc#set_sensitive false ; + (*export_to_postscript_menu_item#misc#set_sensitive false ;*) check_term := (check_term_in_scratch scratch_window) ; (* signal handlers here *) @@ -2856,12 +2961,13 @@ object )) ; ignore (output#connect#click (show_in_show_window_callback output)) ; let settings_window = new settings_window output scrolled_window0 - export_to_postscript_menu_item (choose_selection output) in + (*export_to_postscript_menu_item*)() (choose_selection output) in set_settings_window settings_window ; set_outputhtml outputhtml ; ignore(window#event#connect#delete (fun _ -> GMain.Main.quit () ; true )) ; Logger.log_callback := - (Logger.log_to_html ~print_and_flush:(output_html outputhtml)) + (Logger.log_to_html + ~print_and_flush:(fun m -> (output_html outputhtml (`Msg (`T m))))) end;; (* MAIN *) @@ -2873,14 +2979,14 @@ let initialize_everything () = let rendering_window' = new rendering_window output notebook in set_rendering_window rendering_window' ; let print_error_as_html prefix msg = - output_html (outputhtml ()) - ("

" ^ prefix ^ msg ^ "

") + output_html (outputhtml ()) (`Error (`T (prefix ^ msg))) in Gdome_xslt.setErrorCallback (Some (print_error_as_html "XSLT Error: ")); Gdome_xslt.setDebugCallback (Some (print_error_as_html "XSLT Debug Message: ")); rendering_window'#show () ; -(* Hbugs.toggle true; *) + if restore_environment_on_boot && Sys.file_exists environmentfile then + restore_environment (); GtkThread.main () ;;