]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/matita/matitaScript.ml
matita now asks to save .moo if possible or cleans the dust the
[helm.git] / helm / matita / matitaScript.ml
index 4b548f6069f7e43860bf21125f2cb859ee14ef3e..965969a217855a611cdb309518744553aedff1cf 100644 (file)
@@ -255,25 +255,28 @@ ask_confirmation user_goal parsed_text script ex =
   let module TA = TacticAst in
   let module TAPp = TacticAstPp in
   let module MD = MatitaDisambiguator in
+  let module ML = MatitacleanLib in
   let parsed_text_length = String.length parsed_text in
   match ex with
   | TA.Command (loc, _) | TA.Tactical (loc, _) ->
-      (match MatitacleanLib.baseuri_of_baseuri_decl (TA.Executable (loc,ex))with
-      | None -> ()
-      | Some u -> 
-          if not (MatitacleanLib.is_empty u) then
-            match 
-              ask_confirmation 
-                ~title:"Baseuri redefinition" 
-                ~message:(
-                  "Baseuri " ^ u ^ " already exists.\n" ^
-                  "Do you want to redefine the corresponding "^
-                  "part of the library?")
-            with
-            | `YES -> MatitacleanLib.clean_baseuris [u]
-            | `NO -> ()
-            | `CANCEL -> raise MatitaTypes.Cancel);
-      eval_with_engine status user_goal parsed_text (TA.Executable (loc, ex))
+      (try 
+        (match ML.baseuri_of_baseuri_decl (TA.Executable (loc,ex)) with
+        | None -> ()
+        | Some u -> 
+            if not (MatitacleanLib.is_empty u) then
+              match 
+                ask_confirmation 
+                  ~title:"Baseuri redefinition" 
+                  ~message:(
+                    "Baseuri " ^ u ^ " already exists.\n" ^
+                    "Do you want to redefine the corresponding "^
+                    "part of the library?")
+              with
+              | `YES -> MatitacleanLib.clean_baseuris [u]
+              | `NO -> ()
+              | `CANCEL -> raise MatitaTypes.Cancel);
+        eval_with_engine status user_goal parsed_text (TA.Executable (loc, ex))
+      with MatitaTypes.Cancel -> [], 0)
   | TA.Macro (_,mac) ->
       eval_macro status mathviewer urichooser parsed_text script mac
 
@@ -420,9 +423,11 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements;
     buffer#move_mark mark ~where:new_mark_pos;
     buffer#apply_tag locked_tag ~start:buffer#start_iter ~stop:new_mark_pos;
     buffer#move_mark `INSERT old_insert;
-    match self#status.proof_status with
-       Incomplete_proof (_,goal) -> self#setGoal goal
-     | _ -> ();
+    begin
+     match self#status.proof_status with
+        Incomplete_proof (_,goal) -> self#setGoal goal
+      | _ -> ()
+    end ;
     while Glib.Main.pending () do ignore(Glib.Main.iteration false); done
 
   val mutable observers = []
@@ -477,7 +482,16 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements;
     match pos with
     | `Top -> self#goto_top; self#notify
     | `Bottom ->
-        (try while true do self#_advance () done; self#notify with Margin -> ())
+        (try 
+          let getpos _ = buffer#get_iter_at_mark (`MARK locked_mark) in 
+          let rec dowhile pos =
+            self#_advance ();
+            if pos#compare (getpos ()) < 0 then
+              dowhile (getpos ())
+          in
+          dowhile (getpos ());
+          self#notify 
+        with Margin -> ())
     | `Cursor ->
         let locked_iter () = buffer#get_iter_at_mark (`NAME "locked") in
         let cursor_iter () = buffer#get_iter_at_mark `INSERT in
@@ -512,6 +526,27 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements;
   method proofContext = MatitaMisc.get_proof_context self#status
   method setGoal n = userGoal <- n
 
+  method eos = 
+    let s = self#getFuture in
+    let rec is_there_and_executable s = 
+      if Pcre.pmatch ~rex:only_dust_RE s then raise Margin;
+      let st = CicTextualParser2.parse_statement (Stream.of_string s) in
+      match st with
+      | TacticAst.Comment (loc,_)-> 
+          let parsed_text_length = snd (CicAst.loc_of_floc loc) in
+          let remain_len = String.length s - parsed_text_length in
+          let next = String.sub s parsed_text_length remain_len in
+          is_there_and_executable next
+      | TacticAst.Executable (loc, ex) -> false
+    in
+    try
+      is_there_and_executable s
+    with 
+    | CicTextualParser2.Parse_error _ -> false
+    | Margin -> true
+      
+    
+    
   (* debug *)
   method dump () =
     MatitaLog.debug "script status:";