+ let console = (gui#console :> MatitaTypes.console) in
+ let currentProof = (currentProof :> MatitaTypes.currentProof) in
+ new MatitaInterpreter.interpreter
+ ~disambiguator ~currentProof ~console ~mathViewer ~dbd ()
+let _ =
+ let href_callback uri =
+ let term = CicAst.Uri (UriManager.string_of_uri uri, None) in
+ ignore (interpreter#evalAst (TacticAst.Command (TacticAst.Check term)))
+ in
+ proof_viewer#set_href_callback (Some href_callback);
+ sequent_viewer#set_href_callback (Some href_callback);
+ mathViewer#set_href_callback (Some href_callback)
+
+(** {2 Script window handling} *)
+
+let script_forward _ =
+ let buf = gui#script#scriptTextView#buffer in
+ let locked_iter = buf#get_iter_at_mark (`NAME "locked") in
+ let (success, hide) =
+ interpreter#evalPhrase
+ (buf#get_text ~start:locked_iter ~stop:buf#end_iter ())
+ in
+ if success then
+ gui#lockScript (locked_iter#offset + interpreter#endOffset)
+
+let script_jump _ =
+ let buf = gui#script#scriptTextView#buffer in
+ let locked_iter = buf#get_iter_at_mark (`NAME "locked") in
+ let cursor_iter = buf#get_iter_at_mark (`NAME "insert") in
+ let raw_text = buf#get_text ~start:locked_iter ~stop:cursor_iter () in
+ let len = String.length raw_text in
+ let rec parse offset =
+ if offset < len then begin
+ let (success, hide) =
+ interpreter#evalPhrase (String.sub raw_text offset (len - offset))
+ in
+ if success then begin
+ let new_offset = interpreter#endOffset + offset in
+ gui#lockScript (new_offset + locked_iter#offset);
+ parse new_offset
+ end else
+ raise Exit
+ end
+ in
+ try
+ parse 0
+ with Exit -> ()
+
+let script_back _ = not_implemented "script_back"
+
+let load_script fname =
+ gui#script#scriptTextView#buffer#set_text (input_file fname);
+ gui#script#scriptWin#show ();
+ gui#main#showScriptMenuItem#set_active true
+
+(** {2 GUI callbacks} *)