]> 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 15fe2c9ac044613ce59f3a432529161fb5c59141..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
 
@@ -479,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
@@ -514,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:";