From a22f5e32e698c3874ded926bd7dabc19719098f3 Mon Sep 17 00:00:00 2001 From: Andrea Asperti Date: Fri, 1 Oct 2010 11:41:37 +0000 Subject: [PATCH] MathML widget no longer used. Requesciat in pacem --- matita/configure.ac | 2 - matita/matita/applyTransformation.ml | 66 ++++++++++-- matita/matita/applyTransformation.mli | 35 +++++++ matita/matita/matitaGui.ml | 1 - matita/matita/matitaGuiTypes.mli | 9 +- matita/matita/matitaMathView.ml | 143 ++++++++++++++++++-------- matita/matita/matitaMathView.mli | 36 +++++-- 7 files changed, 226 insertions(+), 66 deletions(-) diff --git a/matita/configure.ac b/matita/configure.ac index ee8cf52a4..bc655aae3 100644 --- a/matita/configure.ac +++ b/matita/configure.ac @@ -63,7 +63,6 @@ gdome2 \ http \ lablgtk2 \ lablgtksourceview2.gtksourceview2 \ -lablgtkmathview \ mysql \ netstring \ ulex08 \ @@ -95,7 +94,6 @@ $FINDLIB_COMREQUIRES \ FINDLIB_REQUIRES="\ $FINDLIB_CREQUIRES \ lablgtk2.glade \ -lablgtkmathview \ lablgtksourceview2.gtksourceview2 \ helm-xmldiff \ " diff --git a/matita/matita/applyTransformation.ml b/matita/matita/applyTransformation.ml index bdc3b9268..700c2e1be 100644 --- a/matita/matita/applyTransformation.ml +++ b/matita/matita/applyTransformation.ml @@ -74,6 +74,15 @@ let nmml_of_cic_sequent status metasenv subst sequent = let xmlpres = mpres_document pres_sequent in Xml2Gdome.document_of_xml DomMisc.domImpl xmlpres +let ntxt_of_cic_sequent ~map_unicode_to_tex size status metasenv subst sequent = + let content_sequent,ids_to_refs = + NTermCicContent.nmap_sequent status ~metasenv ~subst sequent in + let pres_sequent = + Sequent2pres.nsequent2pres ids_to_refs subst content_sequent in + let pres_sequent = CicNotationPres.mpres_of_box pres_sequent in + BoxPp.render_to_string ~map_unicode_to_tex + (function x::_ -> x | _ -> assert false) size pres_sequent + let mml_of_cic_object obj = let (annobj, ids_to_terms, ids_to_father_ids, ids_to_inner_sorts, ids_to_inner_types, ids_to_conjectures, ids_to_hypotheses) @@ -97,7 +106,15 @@ let nmml_of_cic_object status obj = Xml2Gdome.document_of_xml DomMisc.domImpl xmlpres ;; -let txt_of_cic_sequent ~map_unicode_to_tex size metasenv sequent = +let ntxt_of_cic_object ~map_unicode_to_tex size status obj = + let cobj,ids_to_nrefs = NTermCicContent.nmap_obj status obj in + let pres_sequent = Content2pres.ncontent2pres ~ids_to_nrefs cobj in + let pres_sequent = CicNotationPres.mpres_of_box pres_sequent in + BoxPp.render_to_string ~map_unicode_to_tex + (function x::_ -> x | _ -> assert false) size pres_sequent +;; + +let txt_of_cic_sequent_all ~map_unicode_to_tex size metasenv sequent = let unsh_sequent,(asequent,ids_to_terms, ids_to_father_ids,ids_to_inner_sorts,ids_to_hypotheses) = @@ -106,10 +123,20 @@ let txt_of_cic_sequent ~map_unicode_to_tex size metasenv sequent = let content_sequent = Acic2content.map_sequent asequent in let pres_sequent = CicNotationPres.mpres_of_box - (Sequent2pres.sequent2pres ~ids_to_inner_sorts content_sequent) - in + (Sequent2pres.sequent2pres ~ids_to_inner_sorts content_sequent) in + let txt = BoxPp.render_to_string ~map_unicode_to_tex (function x::_ -> x | _ -> assert false) size pres_sequent + in + (txt, + unsh_sequent, + (asequent, + (ids_to_terms,ids_to_father_ids,ids_to_hypotheses,ids_to_inner_sorts))) + +let txt_of_cic_sequent ~map_unicode_to_tex size metasenv sequent = + let txt,_,_ = txt_of_cic_sequent_all ~map_unicode_to_tex size metasenv sequent + in txt +;; let txt_of_cic_sequent_conclusion ~map_unicode_to_tex ~output_type size metasenv sequent = @@ -196,15 +223,17 @@ let enable_notations = function | false -> CicNotation.set_active_notations [] -let txt_of_cic_object +let txt_of_cic_object_all ~map_unicode_to_tex ?skip_thm_and_qed ?skip_initial_lambdas n params obj = let get_aobj obj = try - let aobj,_,_,ids_to_inner_sorts,ids_to_inner_types,_,_ = + let + aobj,ids_to_terms,ids_to_father_ids,ids_to_inner_sorts,ids_to_inner_types,ids_to_conjectures,ids_to_hypotheses = Cic2acic.acic_object_of_cic_object obj in - aobj, ids_to_inner_sorts, ids_to_inner_types + aobj, ids_to_terms, ids_to_father_ids, ids_to_inner_sorts, + ids_to_inner_types,ids_to_conjectures,ids_to_hypotheses with | E.Object_not_found uri -> let msg = "txt_of_cic_object: object not found: " ^ UM.string_of_uri uri in @@ -213,6 +242,7 @@ let txt_of_cic_object let msg = "txt_of_cic_object: " ^ Printexc.to_string e in failwith msg in + (*MATITA1.0 if List.mem G.IPProcedural params then begin Procedural2.debug := A2P.is_debug 1 params; @@ -226,7 +256,8 @@ let txt_of_cic_object (* let _ = ProceduralTeX.tex_of_obj Format.std_formatter obj in *) - let aobj, ids_to_inner_sorts, ids_to_inner_types = get_aobj obj in + let aobj, ids_to_terms, ids_to_father_ids, ids_to_inner_sorts, + ids_to_inner_types,ids_to_conjectures,ids_to_hypothesis = get_aobj obj in let term_pp = term2pres ~map_unicode_to_tex (n - 8) ids_to_inner_sorts in let lazy_term_pp = term_pp in let obj_pp = CicNotationPp.pp_obj term_pp in @@ -267,8 +298,9 @@ let txt_of_cic_object ~ids_to_inner_sorts ~ids_to_inner_types ~info params aobj in String.concat "" (List.map aux script) ^ "\n\n" - end else - let aobj, ids_to_inner_sorts, ids_to_inner_types = get_aobj obj in + end else *) + let aobj, ids_to_terms, ids_to_father_ids, ids_to_inner_sorts, + ids_to_inner_types,ids_to_conjectures,ids_to_hypotheses = get_aobj obj in let cobj = Acic2content.annobj2content ids_to_inner_sorts ids_to_inner_types aobj in @@ -276,12 +308,24 @@ let txt_of_cic_object Content2pres.content2pres ?skip_initial_lambdas ?skip_thm_and_qed ~ids_to_inner_sorts cobj in - remove_closed_substs ( + let txt = + remove_closed_substs ( BoxPp.render_to_string ~map_unicode_to_tex (function _::x::_ -> x | _ -> assert false) n (CicNotationPres.mpres_of_box bobj) ^ "\n\n" - ) + ) + in + (txt,(aobj, + (ids_to_terms, ids_to_father_ids, ids_to_conjectures, ids_to_hypotheses, + ids_to_inner_sorts,ids_to_inner_types))) + +let txt_of_cic_object + ~map_unicode_to_tex ?skip_thm_and_qed ?skip_initial_lambdas n params obj += + let txt,_ = txt_of_cic_object_all + ~map_unicode_to_tex ?skip_thm_and_qed ?skip_initial_lambdas n params obj + in txt let cic_prefix = Str.regexp_string "cic:/" let matita_prefix = Str.regexp_string "cic:/matita/" diff --git a/matita/matita/applyTransformation.mli b/matita/matita/applyTransformation.mli index dbd0343ff..7e1cfb6fb 100644 --- a/matita/matita/applyTransformation.mli +++ b/matita/matita/applyTransformation.mli @@ -50,6 +50,13 @@ val nmml_of_cic_sequent: int * NCic.conjecture -> (* sequent *) Gdome.document (* Math ML *) +val ntxt_of_cic_sequent: + map_unicode_to_tex:bool -> int -> + #NCicCoercion.status -> + NCic.metasenv -> NCic.substitution -> (* metasenv, substitution *) + int * NCic.conjecture -> (* sequent *) + string (* text *) + val mml_of_cic_object: Cic.obj -> (* object *) Gdome.document * (* Math ML *) @@ -63,6 +70,21 @@ val mml_of_cic_object: val nmml_of_cic_object: #NCicCoercion.status -> NCic.obj -> Gdome.document +val ntxt_of_cic_object: + map_unicode_to_tex:bool -> int -> #NCicCoercion.status -> NCic.obj -> string + +val txt_of_cic_sequent_all: + map_unicode_to_tex:bool -> int -> + Cic.metasenv -> (* metasenv *) + Cic.conjecture -> (* sequent *) + string * (* text *) + Cic.conjecture * (* unshared sequent *) + (Cic.annconjecture * (* annsequent *) + ((Cic.id, Cic.term) Hashtbl.t * (* id -> term *) + (Cic.id, Cic.id option) Hashtbl.t * (* id -> father id *) + (Cic.id, Cic.hypothesis) Hashtbl.t * (* id -> hypothesis *) + (Cic.id, Cic2acic.sort_kind) Hashtbl.t)) (* ids_to_inner_sorts *) + val txt_of_cic_term: map_unicode_to_tex:bool -> int -> Cic.metasenv -> Cic.context -> Cic.term -> string @@ -79,6 +101,19 @@ val txt_of_cic_object: int -> GrafiteAst.inline_param list -> Cic.obj -> string +val txt_of_cic_object_all: + map_unicode_to_tex:bool -> + ?skip_thm_and_qed:bool -> ?skip_initial_lambdas:int -> + int -> GrafiteAst.inline_param list -> Cic.obj -> + string * (* text *) + (Cic.annobj * (* annobj *) + ((Cic.id, Cic.term) Hashtbl.t * (* id -> term *) + (Cic.id, Cic.id option) Hashtbl.t * (* id -> father id *) + (Cic.id, Cic.conjecture) Hashtbl.t * (* id -> conjecture *) + (Cic.id, Cic.hypothesis) Hashtbl.t * (* id -> hypothesis *) + (Cic.id, Cic2acic.sort_kind) Hashtbl.t * (* ids_to_inner_sorts *) + (Cic.id, Cic2acic.anntypes) Hashtbl.t)) (* ids_to_inner_types *) + (* params, uri or baseuri *) val txt_of_inline_macro: map_unicode_to_tex:bool -> GrafiteAst.inline_param list -> string -> diff --git a/matita/matita/matitaGui.ml b/matita/matita/matitaGui.ml index d04fbcada..9271384c1 100644 --- a/matita/matita/matitaGui.ml +++ b/matita/matita/matitaGui.ml @@ -1659,6 +1659,5 @@ let _ = Disambiguate.set_choose_interp_callback (interactive_interp_choice ()); (* gtk initialization *) GtkMain.Rc.add_default_file BuildTimeConf.gtkrc_file; (* loads gtk rc *) - GMathView.add_configuration_path BuildTimeConf.gtkmathview_conf; ignore (GMain.Main.init ()) diff --git a/matita/matita/matitaGuiTypes.mli b/matita/matita/matitaGuiTypes.mli index d25735d4a..ae0bab1c2 100644 --- a/matita/matita/matitaGuiTypes.mli +++ b/matita/matita/matitaGuiTypes.mli @@ -105,7 +105,14 @@ type paste_kind = [ `Term | `Pattern ] * callback *) class type clickableMathView = object - inherit GMathViewAux.multi_selection_math_view + inherit GSourceView2.source_view + + method load_root : root:string -> unit + method remove_selections: unit + method set_selection: Gdome.element option -> unit + method get_selections: Gdome.element list + method set_font_size: int -> unit + (** set hyperlink callback. None disable hyperlink handling *) method set_href_callback: (string -> unit) option -> unit diff --git a/matita/matita/matitaMathView.ml b/matita/matita/matitaMathView.ml index 71e7cb553..3364b55f3 100644 --- a/matita/matita/matitaMathView.ml +++ b/matita/matita/matitaMathView.ml @@ -85,8 +85,7 @@ let empty_boxml = lazy ( ~qualifiedName:(Gdome.domString "box") ~doctype:None) (** shown for goals closed by side effects *) -let closed_goal_mathml = lazy ( - domImpl#createDocumentFromURI ~uri:BuildTimeConf.closed_xml ()) +let closed_goal_mathml = lazy "chiuso per side effect..." (* ids_to_terms should not be passed here, is just for debugging *) let find_root_id annobj id ids_to_father_ids ids_to_terms ids_to_inner_types = @@ -180,6 +179,28 @@ let rec has_maction (elt :Gdome.element) = class clickableMathView obj = let text_width = 80 in object (self) + inherit GSourceView2.source_view obj + + method has_selection = (assert false : bool) + method strings_of_selection = (assert false : (paste_kind * string) list) + method update_font_size = (assert false : unit) + method set_href_callback = (function _ -> () : (string -> unit) option -> unit) + method private set_cic_info = (function _ -> () : (Cic.conjecture option * (Cic.id, Cic.term) Hashtbl.t * + (Cic.id, Cic.hypothesis) Hashtbl.t * + (Cic.id, Cic.id option) Hashtbl.t * ('a, 'b) Hashtbl.t * 'c option) option -> unit) + (* dal widget di Luca *) + method load_root ~root = + self#buffer#delete ~start:(self#buffer#get_iter `START) + ~stop:(self#buffer#get_iter `END); + self#buffer#insert root + method remove_selections = (() : unit) + method set_selection = (fun _ -> () : Gdome.element option -> unit) + method get_selections = (assert false : Gdome.element list) + method set_font_size font_size = + self#misc#modify_font_by_name + (sprintf "%s %d" BuildTimeConf.script_font font_size) + +(* MATITA1.0 inherit GMathViewAux.multi_selection_math_view obj val mutable href_callback: (string -> unit) option = None @@ -557,16 +578,26 @@ IDIOTA: PRIMA SI FA LA LOCATE, POI LA PATTERN_OF. MEGLIO UN'UNICA pattern_of CHE paste_kind, HExtlib.unopt (self#string_of_selection ~paste_kind)) [ `Term; `Pattern ] with Failure _ -> failwith "no selection" - +*) end +open GtkSourceView2 + let clickableMathView ?hadjustment ?vadjustment ?font_size ?log_verbosity = + SourceView.make_params [] ~cont:( + GtkText.View.make_params ~cont:( + GContainer.pack_container ~create:(fun pl -> + let obj = SourceView.new_ () in + Gobject.set_params (Gobject.try_cast obj "GtkSourceView") pl; + new clickableMathView obj))) + (* MATITA1.0 GtkBase.Widget.size_params - ~cont:(OgtkMathViewProps.pack_return (fun p -> - OgtkMathViewProps.set_params - (new clickableMathView (GtkMathViewProps.MathView_GMetaDOM.create p)) + ~cont:(OgtkSourceView2Props.pack_return (fun p -> + OgtkSourceView2Props.set_params + (new clickableMathView (GtkSourceView2Props.MathView_GMetaDOM.create p)) ~font_size:None ~log_verbosity:None)) [] + *) class cicMathView obj = object (self) @@ -576,68 +607,73 @@ object (self) method load_sequent metasenv metano = let sequent = CicUtil.lookup_meta metano metasenv in - let (mathml, unsh_sequent, + let (txt, unsh_sequent, (_, (ids_to_terms, ids_to_father_ids, ids_to_hypotheses,_ ))) = - ApplyTransformation.mml_of_cic_sequent metasenv sequent + ApplyTransformation.txt_of_cic_sequent_all + ~map_unicode_to_tex:false 80 (*MATITA 1.0??*) metasenv sequent in self#set_cic_info (Some (Some unsh_sequent, ids_to_terms, ids_to_hypotheses, ids_to_father_ids, Hashtbl.create 1, None)); + (*MATITA 1.0 if BuildTimeConf.debug then begin let name = "/tmp/sequent_viewer_" ^ string_of_int (Unix.getuid ()) ^ ".xml" in HLog.debug ("load_sequent: dumping MathML to ./" ^ name); - ignore (domImpl#saveDocumentToFile ~name ~doc:mathml ()) - end; - self#load_root ~root:mathml#get_documentElement + ignore (domImpl#saveDocumentToFile ~name ~doc:txt ()) + end; *) + self#load_root ~root:txt 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 = - ApplyTransformation.nmml_of_cic_sequent status metasenv subst - (metano,sequent) + let txt = + ApplyTransformation.ntxt_of_cic_sequent + ~map_unicode_to_tex:false 80 status metasenv subst (metano,sequent) in - if BuildTimeConf.debug then begin + (* MATITA 1.0 if BuildTimeConf.debug then begin let name = "/tmp/sequent_viewer_" ^ string_of_int (Unix.getuid ()) ^ ".xml" in HLog.debug ("load_sequent: dumping MathML to ./" ^ name); ignore (domImpl#saveDocumentToFile ~name ~doc:mathml ()) - end; - self#load_root ~root:mathml#get_documentElement + end;*) + self#load_root ~root:txt method load_object obj = let use_diff = false in (* ZACK TODO use XmlDiff when re-rendering? *) - let (mathml, + let (txt, (annobj, (ids_to_terms, ids_to_father_ids, _, ids_to_hypotheses, _, ids_to_inner_types))) = - ApplyTransformation.mml_of_cic_object obj + ApplyTransformation.txt_of_cic_object_all ~map_unicode_to_tex:false + 80 [] 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 -> +assert false (*MATITA1.0 self#freeze; XmlDiff.update_dom ~from:current_mathml mathml; - self#thaw + self#thaw*) | _ -> - if BuildTimeConf.debug then begin + (* MATITA1.0 if BuildTimeConf.debug then begin let name = "/tmp/cic_browser_" ^ string_of_int (Unix.getuid ()) ^ ".xml" in HLog.debug ("cic_browser: dumping MathML to ./" ^ name); ignore (domImpl#saveDocumentToFile ~name ~doc:mathml ()) - end; - self#load_root ~root:mathml#get_documentElement; - current_mathml <- Some mathml); + end;*) + self#load_root ~root:txt; + current_mathml <- Some txt); method load_nobject : 'status. #NCicCoercion.status as 'status -> NCic.obj -> unit = fun status obj -> - let mathml = ApplyTransformation.nmml_of_cic_object status obj in + let txt = ApplyTransformation.ntxt_of_cic_object ~map_unicode_to_tex:false + 80 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)); @@ -648,13 +684,13 @@ object (self) self#thaw | _ -> *) - if BuildTimeConf.debug then begin + (* MATITA1.0 if BuildTimeConf.debug then begin let name = "/tmp/cic_browser_" ^ string_of_int (Unix.getuid ()) ^ ".xml" in HLog.debug ("cic_browser: dumping MathML to ./" ^ name); ignore (domImpl#saveDocumentToFile ~name ~doc:mathml ()) - end; - self#load_root ~root:mathml#get_documentElement; + end;*) + self#load_root ~root:txt; (*current_mathml <- Some mathml*)(*)*); end @@ -896,7 +932,7 @@ class sequentsViewer ~(notebook:GPack.notebook) ~(cicMathView:cicMathView) () = 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); + cicMathView#load_root ~root:doc); (try cicMathView#set_selection None; List.assoc goal_switch goal2win () @@ -917,26 +953,49 @@ class sequentsViewer ~(notebook:GPack.notebook) ~(cicMathView:cicMathView) () = end (** constructors *) - type 'widget constructor = - ?hadjustment:GData.adjustment -> - ?vadjustment:GData.adjustment -> - ?font_size:int -> - ?log_verbosity:int -> - ?width:int -> - ?height:int -> - ?packing:(GObj.widget -> unit) -> - ?show:bool -> - unit -> - 'widget + ?hadjustment:GData.adjustment -> + ?vadjustment:GData.adjustment -> + ?font_size:int -> + ?log_verbosity:int -> + ?auto_indent:bool -> + ?highlight_current_line:bool -> + ?indent_on_tab:bool -> + ?indent_width:int -> + ?insert_spaces_instead_of_tabs:bool -> + ?right_margin_position:int -> + ?show_line_marks:bool -> + ?show_line_numbers:bool -> + ?show_right_margin:bool -> + ?smart_home_end:SourceView2Enums.source_smart_home_end_type -> + ?tab_width:int -> + ?editable:bool -> + ?cursor_visible:bool -> + ?justification:GtkEnums.justification -> + ?wrap_mode:GtkEnums.wrap_mode -> + ?accepts_tab:bool -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(GObj.widget -> unit) -> + ?show:bool -> unit -> + 'widget let cicMathView ?hadjustment ?vadjustment ?font_size ?log_verbosity = + SourceView.make_params [] ~cont:( + GtkText.View.make_params ~cont:( + GContainer.pack_container ~create:(fun pl -> + let obj = SourceView.new_ () in + Gobject.set_params (Gobject.try_cast obj "GtkSourceView") pl; + new cicMathView obj))) +(* MATITA 1.0 GtkBase.Widget.size_params ~cont:(OgtkMathViewProps.pack_return (fun p -> OgtkMathViewProps.set_params (new cicMathView (GtkMathViewProps.MathView_GMetaDOM.create p)) ~font_size ~log_verbosity)) [] +*) let blank_uri = BuildTimeConf.blank_uri let current_proof_uri = BuildTimeConf.current_proof_uri @@ -1303,7 +1362,7 @@ class cicBrowser_impl ~(history:MatitaTypes.mathViewer_entry MatitaMisc.history) method private blank () = self#_showMath; - mathView#load_root (Lazy.force empty_mathml)#get_documentElement + mathView#load_root "" method private _loadCheck term = failwith "not implemented _loadCheck"; @@ -1601,6 +1660,7 @@ let mathViewer () = (self#get_browser reuse)#load entry method screenshot status sequents metasenv subst (filename as ofn) = + () (*MATITA 1.0 let w = GWindow.window ~title:"screenshot" () in let width = 500 in let height = 2000 in @@ -1659,6 +1719,7 @@ let mathViewer () = List.iter (fun x,_ -> Sys.remove x) filenames; List.iter Sys.remove (List.flatten items); w#destroy (); + *) end let refresh_all_browsers () = diff --git a/matita/matita/matitaMathView.mli b/matita/matita/matitaMathView.mli index ea0c077d8..b1064ba77 100644 --- a/matita/matita/matitaMathView.mli +++ b/matita/matita/matitaMathView.mli @@ -27,16 +27,32 @@ (** meta constructor *) type 'widget constructor = - ?hadjustment:GData.adjustment -> - ?vadjustment:GData.adjustment -> - ?font_size:int -> - ?log_verbosity:int -> - ?width:int -> - ?height:int -> - ?packing:(GObj.widget -> unit) -> - ?show:bool -> - unit -> - 'widget + ?hadjustment:GData.adjustment -> + ?vadjustment:GData.adjustment -> + ?font_size:int -> + ?log_verbosity:int -> + ?auto_indent:bool -> + ?highlight_current_line:bool -> + ?indent_on_tab:bool -> + ?indent_width:int -> + ?insert_spaces_instead_of_tabs:bool -> + ?right_margin_position:int -> + ?show_line_marks:bool -> + ?show_line_numbers:bool -> + ?show_right_margin:bool -> + ?smart_home_end:SourceView2Enums.source_smart_home_end_type -> + ?tab_width:int -> + ?editable:bool -> + ?cursor_visible:bool -> + ?justification:GtkEnums.justification -> + ?wrap_mode:GtkEnums.wrap_mode -> + ?accepts_tab:bool -> + ?border_width:int -> + ?width:int -> + ?height:int -> + ?packing:(GObj.widget -> unit) -> + ?show:bool -> unit -> + 'widget val clickableMathView: MatitaGuiTypes.clickableMathView constructor -- 2.39.2