]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/gTopLevel/termViewer.ml
removed dependency on netclient, use http_client module from ocaml-http
[helm.git] / helm / gTopLevel / termViewer.ml
index 9a9c9c9b884ae941d0d976dcf20cb49735b39f1f..e105d5f0ea32ef9a3df3b50b66a1e6bd80872628 100644 (file)
@@ -33,6 +33,8 @@
 (*                                                                            *)
 (******************************************************************************)
 
+let use_stylesheets = ref false;;(* false performs the transformations in OCaml*)
+
 (* List utility functions *)
 exception Skip;;
 
@@ -63,6 +65,7 @@ class sequent_viewer obj =
   (* returns the list of selected terms         *)
   (* selections which are not terms are ignored *)
   method get_selected_terms =
+   prerr_endline (string_of_int (List.length self#get_selections)) ;
    let selections = self#get_selections in
     list_map_fail
      (function node ->
@@ -71,6 +74,7 @@ class sequent_viewer obj =
           ~namespaceURI:Misc.helmns
           ~localName:(Gdome.domString "xref"))#to_string
        in
+        prerr_endline ("YAHHHHHHHHHH " ^ xpath) ;
         if xpath = "" then assert false (* "ERROR: No xref found!!!" *)
         else
          match current_infos with
@@ -109,11 +113,21 @@ class sequent_viewer obj =
     ApplyStylesheets.mml_of_cic_sequent metasenv sequent
    in
     self#load_doc ~dom:sequent_mml ;
-    current_infos <-
+(*
+Misc.domImpl#saveDocumentToFile ~name:"/tmp/pippo" ~doc:sequent_mml () ;
+*)
+     current_infos <-
      Some (ids_to_terms,ids_to_father_ids,ids_to_hypotheses)
  end
 ;;
 
+let sequent_viewer ?hadjustment ?vadjustment ?font_size ?log_verbosity =
+  GtkBase.Container.make_params ~cont:(
+  OgtkMathViewProps.pack_return
+    (fun p -> OgtkMathViewProps.set_params (new sequent_viewer (GtkMathViewProps.MathView.create p)) ~font_size ~log_verbosity)) []
+;;
+
+(*
 let sequent_viewer ?adjustmenth ?adjustmentv ?font_size ?font_manager
  ?border_width ?width ?height ?packing ?show () =
  let w =
@@ -136,7 +150,7 @@ let sequent_viewer ?adjustmenth ?adjustmentv ?font_size ?font_manager
   end;
   mathview
 ;;
-
+*)
 
 (** A widget to render proofs **)
 
@@ -145,9 +159,10 @@ class proof_viewer obj =
 
   inherit GMathViewAux.single_selection_math_view obj
 
-  initializer self#set_font_size 10
+(*   initializer self#set_font_size 10 *)
 
   val mutable current_infos = None
+  val mutable current_mml = None
 
   method make_sequent_of_selected_term =
    match self#get_selection with
@@ -157,6 +172,7 @@ class proof_viewer obj =
           ~namespaceURI:Misc.helmns
           ~localName:(Gdome.domString "xref"))#to_string
        in
+        prerr_endline ("YAEEEEEEEEEEEEEEEEEEE " ^ xpath) ;
         if xpath = "" then assert false (* "ERROR: No xref found!!!" *)
         else
          begin
@@ -194,18 +210,82 @@ class proof_viewer obj =
    =
     Cic2acic.acic_object_of_cic_object currentproof
    in
-    let mml =
-     ApplyStylesheets.mml_of_cic_object
-      ~explode_all:true uri acic ids_to_inner_sorts ids_to_inner_types
-    in
-     self#load_doc ~dom:mml ;
-     current_infos <-
-      Some
-       (ids_to_terms,ids_to_father_ids,ids_to_conjectures,ids_to_hypotheses) ;
-     (acic, ids_to_inner_types, ids_to_inner_sorts)
+    if !use_stylesheets then
+     let mml =
+      ApplyStylesheets.mml_of_cic_object
+       ~explode_all:true uri acic ids_to_inner_sorts ids_to_inner_types
+     in
+      self#load_doc ~dom:mml ;
+      current_mml <- Some mml ;
+      current_infos <-
+       Some
+        (ids_to_terms,ids_to_father_ids,ids_to_conjectures,ids_to_hypotheses) ;
+    else
+     (match acic with
+         Cic.ACurrentProof (id,idbody,n,conjectures,bo,ty,params) ->
+           let time1 = Sys.time () in
+           let content = 
+              Cic2content.annobj2content 
+                ~ids_to_inner_sorts ~ids_to_inner_types acic in
+           let pres = Content2pres.content2pres ~ids_to_inner_sorts content in
+           let time2 = Sys.time () in
+           (* prerr_endline ("Fine trasformazione:" ^ (string_of_float (time2 -. time1))); *)
+           let xmlpres = Mpresentation.print_mpres pres in
+           let time25 = Sys.time () in
+            (*
+            prerr_endline ("FINE printing to stream:" ^ (string_of_float (time25 -. time2)));
+            Xml.pp xmlpres (Some "tmp");
+            let time3 = Sys.time () in
+             prerr_endline ("FINE valutazione e printing dello stream:" ^ (string_of_float (time3 -. time25)));
+            *)
+           (try 
+             prerr_endline "(******** INIZIO DOM **********)";
+             let mml = Xml2Gdome.document_of_xml Misc.domImpl xmlpres in
+             let time3 = Sys.time () in
+             (* ignore (Misc.domImpl#saveDocumentToFile mml "tmp1" ()); *)
+             prerr_endline "(******** FINE DOM **********)";
+             (match current_mml with
+                 None ->
+                  let time1 = Sys.time () in
+                  self#load_doc ~dom:mml ;
+                  let time2 = Sys.time () in
+                  prerr_endline ("Loading and displaying the proof took " ^ string_of_float (time2 -. time1) ^ "seconds") ;
+                  current_mml <- Some mml
+               | Some current_mml' ->
+                  self#freeze ;
+                  let time1 = Sys.time () in
+                  XmlDiff.update_dom ~from:current_mml' mml ;
+                  let time2 = Sys.time () in
+                  prerr_endline ("XMLDIFF took " ^ string_of_float (time2 -. time1) ^ "seconds") ;
+                  self#thaw ;
+                  let time3 = Sys.time () in
+                  prerr_endline ("The refresh of the widget took " ^ string_of_float (time3 -. time2) ^ "seconds")
+                  ) ;
+(*
+              self#load_doc ~dom:mml ;
+              current_mml <- Some mml ;
+*)
+             prerr_endline ("Fine loading:" ^ (string_of_float (time3 -. time2)))
+            (*
+             self#load_uri "tmp";
+             let time4 = Sys.time () in
+             prerr_endline
+              ("Fine loading:" ^ (string_of_float (time4 -. time3)))
+            *)
+           with (GdomeInit.DOMException (_,s)) as e ->
+              prerr_endline s; raise e)
+       | _ -> assert false);
+    (acic, ids_to_inner_types, ids_to_inner_sorts)
  end
 ;;
 
+let proof_viewer ?hadjustment ?vadjustment ?font_size ?log_verbosity =
+  GtkBase.Container.make_params ~cont:(
+  OgtkMathViewProps.pack_return
+    (fun p -> OgtkMathViewProps.set_params (new proof_viewer (GtkMathViewProps.MathView.create p)) ~font_size ~log_verbosity)) []
+;;
+
+(*
 let proof_viewer ?adjustmenth ?adjustmentv ?font_size ?font_manager
  ?border_width ?width ?height ?packing ?show () =
  let w =
@@ -228,3 +308,8 @@ let proof_viewer ?adjustmenth ?adjustmentv ?font_size ?font_manager
   end;
   mathview
 ;;
+*)
+
+let _ =
+ Cexpr2pres_hashtbl.init Cexpr2pres.cexpr2pres Cexpr2pres.cexpr2pres_charcount
+;;