X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2FmatitaScript.ml;h=af38ff8c2c86589f306cfcdcebb2cf644f12a7ff;hb=7aa0e7901b71a660c6d6f55d96a38a3a9d1d3c7d;hp=5dd6550a9d49a8a81c059f1f223ab054a8ed9a5c;hpb=b60666721441e676081a6e3b2f436b23dbcdae0f;p=helm.git diff --git a/helm/matita/matitaScript.ml b/helm/matita/matitaScript.ml index 5dd6550a9..af38ff8c2 100644 --- a/helm/matita/matitaScript.ml +++ b/helm/matita/matitaScript.ml @@ -77,10 +77,11 @@ let eval_with_engine status user_goal parsed_text st = match status.proof_status with | Incomplete_proof (_, goal) when goal <> user_goal -> goal_changed := true; - MatitaEngine.eval_ast status (goal_ast user_goal) + MatitaEngine.eval_ast + ~do_heavy_checks:true status (goal_ast user_goal) | _ -> status in - let new_status = MatitaEngine.eval_ast status st in + let new_status = MatitaEngine.eval_ast ~do_heavy_checks:true status st in let new_aliases = match ex with | TA.Command (_, TA.Alias _) @@ -326,17 +327,15 @@ object (self) match filename with Some f -> f | None -> sprintf ".unnamed%d.ma" scriptId initializer - ignore(GMain.Timeout.add ~ms:30000 + ignore(GMain.Timeout.add ~ms:300000 ~callback:(fun _ -> self#_saveToBackuptFile ();true)); - set_star self#ppFilename false; ignore(buffer#connect#modified_changed (fun _ -> if buffer#modified then set_star self#ppFilename true else set_star self#ppFilename false)); self#reset (); - self#template (); - buffer#set_modified false + self#template () val mutable statements = []; (** executed statements *) val mutable history = [ init ]; @@ -347,7 +346,7 @@ object (self) (** goal as seen by the user (i.e. metano corresponding to current tab) *) val mutable userGoal = ~-1 - + val mutable lock_mark_pos = 0 (** text mark and tag representing locked part of a script *) val locked_mark = @@ -398,18 +397,23 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; try self#_advance ?statement (); self#notify - with Margin -> () + with + | Margin -> self#notify + | exc -> self#notify; raise exc method retract () = try self#_retract (); self#notify - with Margin -> () + with + | Margin -> self#notify + | exc -> self#notify; raise exc method private getFuture = buffer#get_text ~start:(buffer#get_iter_at_mark (`MARK locked_mark)) ~stop:buffer#end_iter () + (** @param rel_offset relative offset from current position of locked_mark *) method private moveMark rel_offset = let mark = `MARK locked_mark in @@ -424,6 +428,7 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; in buffer#move_mark mark ~where:new_mark_pos; buffer#apply_tag locked_tag ~start:buffer#start_iter ~stop:new_mark_pos; + lock_mark_pos <- new_mark_pos#offset; buffer#move_mark `INSERT old_insert; begin match self#status.proof_status with @@ -432,6 +437,11 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; end ; while Glib.Main.pending () do ignore(Glib.Main.iteration false); done + method clean_dirty_lock = + let lock_mark_iter = buffer#get_iter (`OFFSET lock_mark_pos) in + buffer#remove_tag locked_tag ~start:buffer#start_iter ~stop:buffer#end_iter; + buffer#apply_tag locked_tag ~start:buffer#start_iter ~stop:lock_mark_iter + val mutable observers = [] method addObserver (o: MatitaTypes.status -> unit) = @@ -478,11 +488,15 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; method reset () = self#goto_top; buffer#delete ~start:buffer#start_iter ~stop:buffer#end_iter; - self#notify + self#notify; + buffer#set_modified false method template () = let template = MatitaMisc.input_file BuildTimeConf.script_template in - buffer#insert ~iter:(buffer#get_iter `START) template + buffer#insert ~iter:(buffer#get_iter `START) template; + filename <- None; + buffer#set_modified false; + set_star self#ppFilename false method goto (pos: [`Top | `Bottom | `Cursor]) () = match pos with @@ -497,7 +511,9 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; in dowhile (getpos ()); self#notify - with Margin -> ()) + with + | Margin -> self#notify + | exc -> self#notify; raise exc) | `Cursor -> let locked_iter () = buffer#get_iter_at_mark (`NAME "locked") in let cursor_iter () = buffer#get_iter_at_mark `INSERT in @@ -519,8 +535,10 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; (back_until_cursor (); self#notify) else (* cursor = locked *) () - with Margin -> ()) - + with + | Margin -> self#notify + | exc -> self#notify; raise exc) + method onGoingProof () = match self#status.proof_status with | No_proof | Proof _ -> false