- List.iter prerr_endline (MetadataQuery.instance ~dbd term);
- assert false
-
- | TacticAst.Check (_,t) ->
- let metasenv = MatitaMisc.get_proof_metasenv status in
- let context = MatitaMisc.get_proof_context status in
- let aliases = MatitaMisc.get_proof_aliases status in
- let db = MatitaDb.instance () in
- let (_env,_metasenv,term,_graph) =
- let interps =
- MatitaDisambiguator.disambiguate_term db context metasenv aliases t
- in
- match interps with
- | [x] -> x
- | _ -> assert false
- in
- let ty,_ =
- CicTypeChecker.type_of_aux' metasenv context term
- CicUniv.empty_ugraph
- in
- mathviewer # show_term (`Cic (ty,metasenv) );
- [ status, "" ] , parsed_text_length
- | _ -> failwith "not implemented")
+ [ new_status , extra_text ], parsed_text_length
+ | _ ->
+ MatitaLog.error
+ "The result of the urichooser should be only 1 uri, not:\n";
+ List.iter (
+ fun u -> MatitaLog.error (u ^ "\n")
+ ) selected;
+ assert false)
+ | TA.Check (_,term) ->
+ let metasenv = MatitaMisc.get_proof_metasenv status in
+ let context = MatitaMisc.get_proof_context status in
+ let aliases = MatitaMisc.get_proof_aliases status in
+ let interps =
+ MatitaDisambiguator.disambiguate_term
+ dbd context metasenv aliases term
+ in
+ let _, metasenv , term, ugraph =
+ match interps with
+ | [x] -> x
+ | _ -> assert false
+ in
+ let ty,_ = CTC.type_of_aux' metasenv context term ugraph in
+ let t_and_ty = Cic.Cast (term,ty) in
+ mathviewer#show_entry (`Cic (t_and_ty,metasenv));
+ [], parsed_text_length
+(* | TA.Abort _ ->
+ let rec go_back () =
+ let status = script#status.proof_status in
+ match status with
+ | No_proof -> ()
+ | _ -> script#retract ();go_back()
+ in
+ [], parsed_text_length, Some go_back
+ | TA.Redo (_, Some i) -> [], parsed_text_length,
+ Some (fun () -> for j = 1 to i do advance () done)
+ | TA.Redo (_, None) -> [], parsed_text_length,
+ Some (fun () -> advance ())
+ | TA.Undo (_, Some i) -> [], parsed_text_length,
+ Some (fun () -> for j = 1 to i do script#retract () done)
+ | TA.Undo (_, None) -> [], parsed_text_length,
+ Some (fun () -> script#retract ()) *)
+ (* TODO *)
+ | TA.Quit _ -> failwith "not implemented"
+ | TA.Print (_,kind) -> failwith "not implemented"
+ | TA.Search_pat (_, search_kind, str) -> failwith "not implemented"
+ | TA.Search_term (_, search_kind, term) -> failwith "not implemented"
+
+
+let eval_executable status (mathviewer:MatitaTypes.mathViewer) urichooser
+user_goal parsed_text script ex =
+ let module TA = TacticAst in
+ let module TAPp = TacticAstPp in
+ let module MD = MatitaDisambiguator in
+ let parsed_text_length = String.length parsed_text in
+ match ex with
+ | TA.Command (loc, _) | TA.Tactical (loc, _) ->
+ eval_with_engine status user_goal parsed_text (TA.Executable (loc, ex))
+ | TA.Macro (_,mac) ->
+ eval_macro status mathviewer urichooser parsed_text script mac
+
+let rec eval_statement status (mathviewer:MatitaTypes.mathViewer) urichooser
+user_goal script s =
+ if Pcre.pmatch ~rex:only_dust_RE s then raise Margin;
+ let st = CicTextualParser2.parse_statement (Stream.of_string s) in
+ let text_of_loc loc =
+ let parsed_text_length = snd (CicAst.loc_of_floc loc) in
+ let parsed_text = safe_substring s 0 parsed_text_length in
+ parsed_text, parsed_text_length
+ in
+ match st with
+ | TacticAst.Comment (loc,_)->
+ let parsed_text, parsed_text_length = text_of_loc loc in
+ let remain_len = String.length s - parsed_text_length in
+ let s = String.sub s parsed_text_length remain_len in
+ let s,len =
+ eval_statement status mathviewer urichooser user_goal script s
+ in
+ (match s with
+ | (status, text) :: tl ->
+ ((status, parsed_text ^ text)::tl), (parsed_text_length + len)
+ | [] -> [], 0)
+ | TacticAst.Executable (loc, ex) ->
+ let parsed_text, parsed_text_length = text_of_loc loc in
+ eval_executable
+ status mathviewer urichooser user_goal parsed_text script ex
+