]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/matita/matitaMathView.ml
Coercion hiding implemented. Notes:
[helm.git] / helm / software / matita / matitaMathView.ml
index a6aa89e8190cb62a2a0414241d113d21bbdecf5b..255998c4f436884ab1e105136577bcb79528cf0c 100644 (file)
@@ -186,11 +186,8 @@ object (self)
   method set_href_callback f = href_callback <- f
 
   val mutable _cic_info = None
-  val mutable _ncic_info = None
   method private set_cic_info info = _cic_info <- info
   method private cic_info = _cic_info
-  method private set_ncic_info info = _ncic_info <- info
-  method private ncic_info = _ncic_info
 
   val normal_cursor = Gdk.Cursor.create `LEFT_PTR
   val href_cursor = Gdk.Cursor.create `HAND2
@@ -514,11 +511,6 @@ object (self)
         info, (~-1, [], t) (* dummy sequent for obj *)
     | None -> assert false
 
-  method private get_ncic_info id =
-    match self#ncic_info with
-    | Some info -> info
-    | None -> assert false
-
   method private sequent_of_id ~(paste_kind:paste_kind) id =
     let cic_info, unsh_sequent = self#get_cic_info id in
     let cic_sequent =
@@ -601,12 +593,15 @@ object (self)
     end;
     self#load_root ~root:mathml#get_documentElement
 
-  method nload_sequent metasenv subst metano =
+  method nload_sequent:
+   'status. #NCicCoercion.status as 'status -> NCic.metasenv ->
+     NCic.substitution -> int -> unit
+   = fun status metasenv subst metano ->
     let sequent = List.assoc metano metasenv in
-    let mathml,ids_to_father_ids =
-     ApplyTransformation.nmml_of_cic_sequent metasenv subst (metano,sequent)
+    let mathml =
+     ApplyTransformation.nmml_of_cic_sequent status metasenv subst
+      (metano,sequent)
     in
-    self#set_ncic_info (Some ids_to_father_ids);
     if BuildTimeConf.debug then begin
       let name =
        "/tmp/sequent_viewer_" ^ string_of_int (Unix.getuid ()) ^ ".xml" in
@@ -639,10 +634,13 @@ object (self)
         self#load_root ~root:mathml#get_documentElement;
         current_mathml <- Some mathml);
 
-  method load_nobject obj =
-    let mathml,ids_to_father_ids = ApplyTransformation.nmml_of_cic_object obj in
-     self#set_ncic_info (Some ids_to_father_ids);
+  method load_nobject :
+   'status. #NCicCoercion.status as 'status -> NCic.obj -> unit
+   = fun status obj ->
+    let mathml = ApplyTransformation.nmml_of_cic_object status obj in
 (*
+    self#set_cic_info
+      (Some (None, ids_to_terms, ids_to_hypotheses, ids_to_father_ids, ids_to_inner_types, Some annobj));
     (match current_mathml with
     | Some current_mathml when use_diff ->
         self#freeze;
@@ -726,9 +724,9 @@ class sequentsViewer ~(notebook:GPack.notebook) ~(cicMathView:cicMathView) () =
       _metasenv <- `Old []; 
       self#script#setGoal None
 
-    method load_sequents 
-      { proof = (_,metasenv,_subst,_,_, _) as proof; stack = stack } 
-    =
+    method load_sequents : 'status. #NCicCoercion.status as 'status -> 'a
+     = fun status { proof= (_,metasenv,_subst,_,_, _) as proof; stack = stack } 
+     ->
       _metasenv <- `Old metasenv;
       pages <- 0;
       let win goal_switch =
@@ -804,11 +802,11 @@ class sequentsViewer ~(notebook:GPack.notebook) ~(cicMathView:cicMathView) () =
             try List.assoc page page2goal with Not_found -> assert false
           in
           self#script#setGoal (Some (goal_of_switch goal_switch));
-          self#render_page ~page ~goal_switch))
+          self#render_page status ~page ~goal_switch))
 
-    method nload_sequents 
-      { NTacStatus.istatus = { NTacStatus.pstatus = (_,_,metasenv,subst,_) }; gstatus = stack } 
-    =
+    method nload_sequents : 'status. #NTacStatus.tac_status as 'status -> unit
+    = fun status ->
+     let _,_,metasenv,subst,_ = status#obj in
       _metasenv <- `New (metasenv,subst);
       pages <- 0;
       let win goal_switch =
@@ -833,7 +831,7 @@ class sequentsViewer ~(notebook:GPack.notebook) ~(cicMathView:cicMathView) () =
         w#coerce
       in
       assert (
-        let stack_goals = Stack.open_goals stack in
+        let stack_goals = Stack.open_goals status#stack in
         let proof_goals = List.map fst metasenv in
         if
           HExtlib.list_uniq (List.sort Pervasives.compare stack_goals)
@@ -871,27 +869,31 @@ class sequentsViewer ~(notebook:GPack.notebook) ~(cicMathView:cicMathView) () =
             match depth, pos with
             | 0, 0 -> `Current (render_switch sw)
             | 0, _ -> `Shift (pos, `Current (render_switch sw))
-            | 1, pos when Stack.head_tag stack = `BranchTag ->
+            | 1, pos when Stack.head_tag status#stack = `BranchTag ->
                 `Shift (pos, render_switch sw)
             | _ -> render_switch sw
           in
           add_tab markup sw)
         ~cont:add_switch ~todo:add_switch
-        stack;
+        status#stack;
       switch_page_callback <-
         Some (notebook#connect#switch_page ~callback:(fun page ->
           let goal_switch =
             try List.assoc page page2goal with Not_found -> assert false
           in
           self#script#setGoal (Some (goal_of_switch goal_switch));
-          self#render_page ~page ~goal_switch))
+          self#render_page status ~page ~goal_switch))
 
-    method private render_page ~page ~goal_switch =
+    method private render_page:
+     'status. #NCicCoercion.status as 'status -> page:int ->
+       goal_switch:Stack.switch -> unit
+     = fun status ~page ~goal_switch ->
       (match goal_switch with
       | Stack.Open goal ->
          (match _metasenv with
              `Old menv -> cicMathView#load_sequent menv goal
-           | `New (menv,subst) -> cicMathView#nload_sequent menv subst goal)
+           | `New (menv,subst) ->
+               cicMathView#nload_sequent status menv subst goal)
       | Stack.Closed goal ->
           let doc = Lazy.force closed_goal_mathml in
           cicMathView#load_root ~root:doc#get_documentElement);
@@ -900,7 +902,8 @@ class sequentsViewer ~(notebook:GPack.notebook) ~(cicMathView:cicMathView) () =
         List.assoc goal_switch goal2win ()
       with Not_found -> assert false)
 
-    method goto_sequent goal =
+    method goto_sequent: 'status. #NCicCoercion.status as 'status -> int -> unit
+     = fun status goal ->
       let goal_switch, page =
         try
           List.find
@@ -909,7 +912,7 @@ class sequentsViewer ~(notebook:GPack.notebook) ~(cicMathView:cicMathView) () =
         with Not_found -> assert false
       in
       notebook#goto_page page;
-      self#render_page page goal_switch
+      self#render_page status ~page ~goal_switch
 
   end
 
@@ -1343,7 +1346,7 @@ class cicBrowser_impl ~(history:MatitaTypes.mathViewer_entry MatitaMisc.history)
 
     method private home () =
       self#_showMath;
-      match self#script#grafite_status.proof_status with
+      match self#script#grafite_status#proof_status with
       | Proof  (uri, metasenv, _subst, bo, ty, attrs) ->
          let name = UriManager.name_of_uri (HExtlib.unopt uri) in
          let obj =
@@ -1357,10 +1360,10 @@ class cicBrowser_impl ~(history:MatitaTypes.mathViewer_entry MatitaMisc.history)
          in
           self#_loadObj obj
       | _ ->
-        match self#script#grafite_status.ng_status with
-           ProofMode tstatus ->
-            let nobj = tstatus.NTacStatus.istatus.NTacStatus.pstatus in
-             self#_loadNObj nobj
+        match self#script#grafite_status#ng_mode with
+           `ProofMode ->
+             self#_loadNObj self#script#grafite_status
+             self#script#grafite_status#obj
          | _ -> self#blank ()
 
       (** loads a cic uri from the environment
@@ -1372,7 +1375,7 @@ class cicBrowser_impl ~(history:MatitaTypes.mathViewer_entry MatitaMisc.history)
 
     method private _loadNReference (NReference.Ref (uri,_)) =
       let obj = NCicEnvironment.get_checked_obj uri in
-      self#_loadNObj obj
+      self#_loadNObj self#script#grafite_status obj
 
     method private _loadUnivs uri =
       let uri = UriManager.strip_xpointer uri in
@@ -1414,12 +1417,12 @@ class cicBrowser_impl ~(history:MatitaTypes.mathViewer_entry MatitaMisc.history)
       self#_showMath;
       mathView#load_object obj
 
-    method private _loadNObj obj =
+    method private _loadNObj status obj =
       (* showMath must be done _before_ loading the document, since if the
        * widget is not mapped (hidden by the notebook) the document is not
        * rendered *)
       self#_showMath;
-      mathView#load_nobject obj
+      mathView#load_nobject status obj
 
     method private _loadTermCic term metasenv =
       let context = self#script#proofContext in