]> matita.cs.unibo.it Git - helm.git/commitdiff
new macro screenshot
authorEnrico Tassi <enrico.tassi@inria.fr>
Wed, 23 Sep 2009 11:30:42 +0000 (11:30 +0000)
committerEnrico Tassi <enrico.tassi@inria.fr>
Wed, 23 Sep 2009 11:30:42 +0000 (11:30 +0000)
16 files changed:
helm/software/components/grafite/grafiteAst.ml
helm/software/components/grafite/grafiteAstPp.ml
helm/software/components/grafite_parser/grafiteParser.ml
helm/software/matita/.depend
helm/software/matita/Makefile
helm/software/matita/matita.lang
helm/software/matita/matitaEngine.ml
helm/software/matita/matitaMathView.ml
helm/software/matita/matitaScript.ml
helm/software/matita/matitaTypes.ml
helm/software/matita/matitaTypes.mli
helm/software/matita/nlibrary/topology/Makefile [new file with mode: 0644]
helm/software/matita/nlibrary/topology/convert.awk [new file with mode: 0644]
helm/software/matita/nlibrary/topology/igft.ma
helm/software/matita/nlibrary/topology/postamble.xml [new file with mode: 0644]
helm/software/matita/nlibrary/topology/preamble.xml [new file with mode: 0644]

index 68350ac7536398a1452e864ecb106e5fdd0f9367..8fc37e4c543c430bd4a5ea08ea40a90953cbbee9 100644 (file)
@@ -193,10 +193,11 @@ type ('term,'lazy_term) macro =
 
 type nmacro =
   | NCheck of loc * CicNotationPt.term
+  | Screenshot of loc * string
 
 (** To be increased each time the command type below changes, used for "safe"
  * marshalling *)
-let magic = 27
+let magic = 28
 
 type ('term,'obj) command =
   | Index of loc * 'term option (* key *) * UriManager.uri (* value *)
index 3d6b864926b815ec25f88e9b67262c076be5df65..76651753f92cbe6c6232f7b53ab43efc84b654a8 100644 (file)
@@ -303,6 +303,7 @@ let pp_arg ~term_pp arg =
   
 let pp_nmacro = function
   | NCheck (_, term) -> Printf.sprintf "ncheck %s" (CicNotationPp.pp_term term)
+  | Screenshot (_, name) -> Printf.sprintf "screenshot \"%s\"" name
 ;;
 
 let pp_macro ~term_pp ~lazy_term_pp = 
index bf34fc283d4790c2ffc50244d0828faaacd5bd83..52f151fc274a59a8dca825506429c10d9f051c20 100644 (file)
@@ -660,6 +660,7 @@ EXTEND
 
     nmacro: [
       [ [ IDENT "ncheck" ]; t = term -> G.NCheck (loc,t)
+      | [ IDENT "screenshot"]; fname = QSTRING -> G.Screenshot (loc, fname)
       ]
     ];
     
index 28178ecfad8d9eb59d5276e54334f67b24689367..c9a27fc56ec6cef32031ea883a664300aef03d76 100644 (file)
@@ -1,5 +1,7 @@
 applyTransformation.cmo: applyTransformation.cmi 
 applyTransformation.cmx: applyTransformation.cmi 
+buildTimeConf.cmo: 
+buildTimeConf.cmx: 
 dump_moo.cmo: buildTimeConf.cmo 
 dump_moo.cmx: buildTimeConf.cmx 
 lablGraphviz.cmo: lablGraphviz.cmi 
@@ -20,10 +22,12 @@ matitac.cmx: matitadep.cmx matitaclean.cmx matitacLib.cmx matitaWiki.cmx \
     matitaMisc.cmx matitaInit.cmx 
 matitadep.cmo: matitaMisc.cmi matitaInit.cmi matitadep.cmi 
 matitadep.cmx: matitaMisc.cmx matitaInit.cmx matitadep.cmi 
-matitaEngine.cmo: matitaEngine.cmi 
-matitaEngine.cmx: matitaEngine.cmi 
+matitaEngine.cmo: applyTransformation.cmi matitaEngine.cmi 
+matitaEngine.cmx: applyTransformation.cmx matitaEngine.cmi 
 matitaExcPp.cmo: matitaEngine.cmi matitaExcPp.cmi 
 matitaExcPp.cmx: matitaEngine.cmx matitaExcPp.cmi 
+matitaGeneratedGui.cmo: 
+matitaGeneratedGui.cmx: 
 matitaGtkMisc.cmo: matitaTypes.cmi matitaGeneratedGui.cmo buildTimeConf.cmo \
     matitaGtkMisc.cmi 
 matitaGtkMisc.cmx: matitaTypes.cmx matitaGeneratedGui.cmx buildTimeConf.cmx \
@@ -52,10 +56,10 @@ matita.cmo: predefined_virtuals.cmi matitaTypes.cmi matitaScript.cmi \
 matita.cmx: predefined_virtuals.cmx matitaTypes.cmx matitaScript.cmx \
     matitaMathView.cmx matitaInit.cmx matitaGui.cmx matitaGtkMisc.cmx \
     buildTimeConf.cmx applyTransformation.cmx 
-matitaScript.cmo: virtuals.cmi matitacLib.cmi matitaTypes.cmi matitaMisc.cmi \
+matitaScript.cmo: virtuals.cmi matitacLib.cmi matitaTypes.cmi \
     matitaGtkMisc.cmi matitaEngine.cmi buildTimeConf.cmo \
     applyTransformation.cmi matitaScript.cmi 
-matitaScript.cmx: virtuals.cmx matitacLib.cmx matitaTypes.cmx matitaMisc.cmx \
+matitaScript.cmx: virtuals.cmx matitacLib.cmx matitaTypes.cmx \
     matitaGtkMisc.cmx matitaEngine.cmx buildTimeConf.cmx \
     applyTransformation.cmx matitaScript.cmi 
 matitaTypes.cmo: matitaTypes.cmi 
@@ -68,8 +72,21 @@ predefined_virtuals.cmo: virtuals.cmi predefined_virtuals.cmi
 predefined_virtuals.cmx: virtuals.cmx predefined_virtuals.cmi 
 virtuals.cmo: virtuals.cmi 
 virtuals.cmx: virtuals.cmi 
+applyTransformation.cmi: 
+lablGraphviz.cmi: 
+matitaAutoGui.cmi: 
+matitaclean.cmi: 
+matitacLib.cmi: 
+matitadep.cmi: 
+matitaEngine.cmi: 
+matitaExcPp.cmi: 
 matitaGtkMisc.cmi: matitaGeneratedGui.cmo 
 matitaGui.cmi: matitaGuiTypes.cmi 
 matitaGuiTypes.cmi: matitaTypes.cmi matitaGeneratedGui.cmo 
+matitaInit.cmi: 
 matitaMathView.cmi: matitaTypes.cmi matitaGuiTypes.cmi 
+matitaMisc.cmi: 
 matitaScript.cmi: matitaTypes.cmi 
+matitaTypes.cmi: 
+predefined_virtuals.cmi: 
+virtuals.cmi: 
index d8d81bf3713159caa7007221f6cd0922f7a13d9f..bbe22f7d159f6610d11a485c4a3c50eeeeb01aa5 100644 (file)
@@ -37,9 +37,9 @@ MLI = \
        lablGraphviz.mli        \
        matitaTypes.mli         \
        matitaMisc.mli          \
+       applyTransformation.mli \
        matitaEngine.mli        \
        matitaExcPp.mli         \
-       applyTransformation.mli \
        matitacLib.mli          \
        matitaInit.mli          \
        matitaGtkMisc.mli       \
@@ -53,9 +53,9 @@ MLI = \
 CMLI =                         \
        matitaTypes.mli         \
        matitaMisc.mli          \
+       applyTransformation.mli \
        matitaEngine.mli        \
        matitaExcPp.mli         \
-       applyTransformation.mli \
        matitacLib.mli          \
        matitaInit.mli          \
        matitaWiki.mli          \
index 4e1024d5f33bc8ca41b214123f7c6a2f856ce7c4..0d0703905a376d474736380996fcacbdcb22e4c5 100644 (file)
@@ -5,7 +5,7 @@
 
   <block-comment _name = "Commented Code" style = "Comment">
     <start-regex>\(\*\*[^\)]</start-regex>
-    <end-regex>[^\(]\*\*\)</end-regex>
+    <end-regex>[^\(]\*\)</end-regex>
   </block-comment>
 
   <block-comment _name = "Block Comment" style = "Comment">
index a2effbe039d6656a47b5ad5b06417d0cab15a0be..c13004c24917f51fcbe1609607656636e745ed9d 100644 (file)
@@ -58,6 +58,25 @@ let disambiguate_macro lexicon_status_ref grafite_status macro context =
  in
   GrafiteTypes.set_metasenv metasenv grafite_status,macro
 
+let eval_macro_screenshot (status : GrafiteTypes.status) name =
+  let _,_,metasenv,subst,_ = status#obj in
+  let sequent = List.hd metasenv in
+  let mathml = 
+    ApplyTransformation.nmml_of_cic_sequent 
+      status metasenv subst sequent 
+  in
+  let domImpl = Gdome.domImplementation () in
+  ignore(domImpl#saveDocumentToFile 
+    ~name:(name^".xml") ~doc:mathml ());
+  ignore(Sys.command ("mathmlsvg --verbose=1 --font-size=20 --cut-filename=no " ^ 
+    Filename.quote (name^".xml")));
+  ignore(Sys.command ("convert " ^ 
+    Filename.quote (name^".svg") ^ " " ^ 
+    Filename.quote (name^".png")));
+  HLog.debug ("generated " ^ name ^ ".png");
+  status, `New []
+;;
+
 let eval_ast ?do_heavy_checks status (text,prefix_len,ast) =
  let dump = not (Helm_registry.get_bool "matita.moo") in
  let lexicon_status_ref = ref (status :> LexiconEngine.status) in
index 5f3f413bf99e74cecae6b355dd48dbb4c7a6d89e..492aece49cf3b3a322fdad5065ef7909f45ab615 100644 (file)
@@ -1575,6 +1575,25 @@ let mathViewer () =
       
     method show_uri_list ?(reuse=false) ~entry l =
       (self#get_browser reuse)#load entry
+
+    method screenshot status sequent metasenv subst filename =
+       let mathml = 
+         ApplyTransformation.nmml_of_cic_sequent status metasenv subst sequent
+       in
+       let w = GWindow.window ~title:"screenshot" () in
+       let m = GMathView.math_view 
+          ~font_size:!current_font_size ~width:500 ~height:400 
+          ~packing:w#add
+          ~show:true ()
+       in
+       w#show ();
+       m#load_root ~root:mathml#get_documentElement;
+       let pixmap = m#get_buffer in
+       let pixbuf = GdkPixbuf.create ~width:500 ~height:400 () in
+       GdkPixbuf.get_from_drawable ~dest:pixbuf pixmap;
+       let filename = filename ^ ".png" in
+       GdkPixbuf.save ~filename ~typ:"png" pixbuf;
+       w#destroy ();
   end
 
 let refresh_all_browsers () =
index 9874e71840179f20ebe4dec9020ebe105a718a04..dcddf7b2cc93cad40ef7f9bc63fef764ba2c9aff 100644 (file)
@@ -368,6 +368,12 @@ let cic2grafite context menv t =
 let eval_nmacro include_paths (buffer : GText.buffer) guistuff grafite_status user_goal unparsed_text parsed_text script mac =
   let parsed_text_length = String.length parsed_text in
   match mac with
+  | TA.Screenshot (_,name) -> 
+       let status = script#grafite_status in
+       let _,_,menv,subst,_ = status#obj in
+       let sequent = List.hd menv in
+       guistuff.mathviewer#screenshot status sequent menv subst name;
+       [status, parsed_text], "", parsed_text_length
   | TA.NCheck (_,t) ->
       let status = script#grafite_status in
       let ctx = [] in
@@ -641,6 +647,15 @@ and eval_statement include_paths (buffer : GText.buffer) guistuff
       let parsed_text, _, _, parsed_text_length = text_of_loc loc in
        [grafite_status,parsed_text],"",
         parsed_text_length
+  | GrafiteParser.LSome (GrafiteAst.Executable (loc, ex)) ->
+     let _, nonskipped, skipped, parsed_text_length = text_of_loc loc in
+      eval_executable include_paths buffer guistuff 
+       grafite_status user_goal unparsed_text skipped nonskipped script ex loc
+  | GrafiteParser.LSome (GrafiteAst.Comment (loc, GrafiteAst.Code (_, ex))) 
+    (*when Helm_registry.get_bool "matita.literate" *) ->
+     let _, nonskipped, skipped, parsed_text_length = text_of_loc loc in
+      eval_executable include_paths buffer guistuff 
+       grafite_status user_goal unparsed_text skipped nonskipped script ex loc
   | GrafiteParser.LSome (GrafiteAst.Comment (loc, _)) -> 
       let parsed_text, _, _, parsed_text_length = text_of_loc loc in
       let remain_len = String.length unparsed_text - parsed_text_length in
@@ -663,12 +678,6 @@ and eval_statement include_paths (buffer : GText.buffer) guistuff
       | (statuses,text)::tl ->
          (statuses,parsed_text ^ text)::tl,"",parsed_text_length + len
       | [] -> [], "", 0)
-  | GrafiteParser.LSome (GrafiteAst.Executable (loc, ex)) ->
-     let _, nonskipped, skipped, parsed_text_length = 
-       text_of_loc loc 
-     in
-      eval_executable include_paths buffer guistuff 
-       grafite_status user_goal unparsed_text skipped nonskipped script ex loc
   
 let fresh_script_id =
   let i = ref 0 in
index 4f2d414ee3903dc8718ff876e46870dc753d3bde..61f4bc306407ca6ac6facfefc117128912864da1 100644 (file)
@@ -102,4 +102,7 @@ class type mathViewer =
     method show_entry: ?reuse:bool -> mathViewer_entry -> unit
     method show_uri_list:
       ?reuse:bool -> entry:mathViewer_entry -> UriManager.uri list -> unit
+    method screenshot: 
+      GrafiteTypes.status -> int * NCic.conjecture -> NCic.metasenv ->
+        NCic.substitution -> string -> unit
   end
index ecc78a629085d54df4c3325cb90930d84c37c36c..f220a848a7d0dfbcfbdea9a03f91f16f441e330a 100644 (file)
@@ -50,4 +50,7 @@ class type mathViewer =
     method show_entry : ?reuse:bool -> mathViewer_entry -> unit
     method show_uri_list :
       ?reuse:bool -> entry:mathViewer_entry -> UriManager.uri list -> unit
+    method screenshot: 
+      GrafiteTypes.status -> int * NCic.conjecture -> NCic.metasenv ->
+        NCic.substitution -> string -> unit
   end
diff --git a/helm/software/matita/nlibrary/topology/Makefile b/helm/software/matita/nlibrary/topology/Makefile
new file mode 100644 (file)
index 0000000..74648f7
--- /dev/null
@@ -0,0 +1,12 @@
+
+all:
+       for X in *.ma; do $(MAKE) $$X.html; done
+
+clean:
+       rm *.html *.png
+
+%.ma.html: %.ma convert.awk preamble.xml postamble.xml
+       cat preamble.xml > $@
+       awk -f convert.awk < $< | markdown >> $@
+       cat postamble.xml >> $@
+
diff --git a/helm/software/matita/nlibrary/topology/convert.awk b/helm/software/matita/nlibrary/topology/convert.awk
new file mode 100644 (file)
index 0000000..d9c9b91
--- /dev/null
@@ -0,0 +1,6 @@
+BEGIN { p = 1; indent = ""; } 
+/DOCBEGIN/ { indent = ""; NF = 0; }
+/DOCEND/ { indent = "    "; NF = 0; } 
+/HIDE/ { p = 0; }
+{ if (p == 1) print indent $0; } 
+/UNHIDE/ { p = 1; }
index 7f4f5e3591724cfef8502d4659fbc1e3574a89c9..87aca5dcfacfb0a299c7a9debff86ca36aa18735 100644 (file)
@@ -1,13 +1,56 @@
+(*DOCBEGIN
+
+Matita Tutorial: inductively generated formal topologies
+======================================================== 
+
+Small intro...
+
+Initial setup
+-------------
+
+The library, inclusion of `sets/sets.ma`, notation defined: Ω^A.
+Symbols (see menu: View ▹ TeX/UTF-8 Table):
+
+- `Ω` \Omega 
+- `∀` \Forall
+- `λ` \lambda
+- `≝` \def
+- `→` ->
+
+Virtuals, ALT-L, for example I changes into 𝕀, finally 𝐈.
+
+DOCEND*)
+
 include "sets/sets.ma".
 
+(*DOCBEGIN
+
+Axiom set
+---------
+
+records, ...
+
+DOCEND*)
+
 nrecord Ax : Type[1] ≝ { 
-  S:> setoid; (* Type[0]; *)
+  S:> setoid;
   I: S → Type[0];
   C: ∀a:S. I a → Ω ^ S
 }.
 
+(*HIDE*)
 notation "𝐈  \sub( ❨a❩ )" non associative with precedence 70 for @{ 'I $a }.
 notation "𝐂 \sub ( ❨a,\emsp i❩ )" non associative with precedence 70 for @{ 'C $a $i }.
+(*UNHIDE*)
+
+(*DOCBEGIN
+
+Notation for the axiom set
+--------------------------
+
+bla bla
+
+DOCEND*)
 
 notation > "𝐈 term 90 a" non associative with precedence 70 for @{ 'I $a }.
 notation > "𝐂 term 90 a term 90 i" non associative with precedence 70 for @{ 'C $a $i }.
@@ -15,6 +58,13 @@ notation > "𝐂 term 90 a term 90 i" non associative with precedence 70 for @{
 interpretation "I" 'I a = (I ? a).
 interpretation "C" 'C a i = (C ? a i).
 
+(*DOCBEGIN
+
+The first definition
+--------------------
+
+DOCEND*)
+
 ndefinition cover_set ≝ λc:∀A:Ax.Ω^A → A → CProp[0].λA,C,U.
   ∀y.y ∈ C → c A U y.
 
@@ -55,7 +105,7 @@ nlet corec fish_rec (A:Ax) (U: Ω^A)
  (P: Ω^A) (H1: P ⊆ U)
   (H2: ∀a:A. a ∈ P → ∀j: 𝐈 a. 𝐂 a j ≬ P):
    ∀a:A. ∀p: a ∈ P. a ⋉ U ≝ ?.
-#a; #p; napply cfish;
+#a; #p; napply cfish; (** screenshot "topology/def-fish-rec". *)
 ##[ napply H1; napply p;
 ##| #i; ncases (H2 a p i); #x; *; #xC; #xP; @; ##[napply x]
     @; ##[ napply xC ] napply (fish_rec ? U P); nassumption;
@@ -207,12 +257,25 @@ naxiom AC : ∀A,a,i,U.(∀j:𝐃 a i.∃x:Ord A.𝐝 a i j ∈ U⎽x) → (Σf.
 naxiom setoidification :
   ∀A:nAx.∀a,b:A.∀U.a=b → b ∈ U → a ∈ U.
 
+(*DOCBEGIN
+
+Bla Bla, 
+
+<div id="figure1" class="img" ><img src="figure1.png"/>foo</div>
+
+DOCEND*)
+
+alias symbol "covers" = "new covers".
+alias symbol "covers" = "new covers set".
+alias symbol "covers" = "new covers".
+alias symbol "covers" = "new covers set".
 alias symbol "covers" = "new covers".
 alias symbol "covers" = "new covers set".
 alias symbol "covers" = "new covers".
 ntheorem new_coverage_infinity:
   ∀A:nAx.∀U:Ω^A.∀a:A. (∃i:𝐈 a. 𝐈𝐦[𝐝 a i] ◃ U) → a ◃ U.
-#A; #U; #a; *; #i; #H; nnormalize in H;
+#A; #U; #a;(** screenshot "topology/figure1". *)  
+*; #i; #H; nnormalize in H;
 ncut (∀y:𝐃 a i.∃x:Ord A.𝐝 a i y ∈ U⎽x); ##[
   #y; napply H; @ y; napply #; ##] #H'; 
 ncases (AC … H'); #f; #Hf;
diff --git a/helm/software/matita/nlibrary/topology/postamble.xml b/helm/software/matita/nlibrary/topology/postamble.xml
new file mode 100644 (file)
index 0000000..70723d9
--- /dev/null
@@ -0,0 +1,2 @@
+ </body>
+</html>
diff --git a/helm/software/matita/nlibrary/topology/preamble.xml b/helm/software/matita/nlibrary/topology/preamble.xml
new file mode 100644 (file)
index 0000000..ffb7483
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html>
+ <head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+  <style type="text/css">
+         pre, code { 
+           font-family: Sans; 
+           font-size: 1em; 
+           background-color:#efee79; } 
+         pre { margin-right: 5em;}
+         img { display: block; margin-bottom: 1em; }
+         .img { 
+           margin-left: auto; 
+           margin-right: auto; 
+           display: block;
+           border-style: solid;
+           border-width: 2px;
+           border-color: grey;
+           background: grey;
+           text-align:center;
+           color: white;
+           width: 200px;
+         }
+  </style>
+ </head>
+ <body>