]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/gTopLevel/texTermEditor.ml
Interface change: the get_as_string and set_term methods of the term-editors
[helm.git] / helm / gTopLevel / texTermEditor.ml
index b8375b3eab0a9a861d8841c35a8cef17f4c714ed..18c2215b5f1be654f7ddf0cc36b734be2a3375ac 100644 (file)
 class type term_editor =
  object
    method coerce : GObj.widget
+   (* get_as_string returns the unquoted string *)
    method get_as_string : string
    method get_metasenv_and_term :
      context:Cic.context ->
      metasenv:Cic.metasenv -> Cic.metasenv * Cic.term
    method reset : unit
+   (* The input of set_term is unquoted *)
    method set_term : string -> unit
    method id_to_uris : Disambiguate.domain_and_interpretation ref
  end
@@ -165,18 +167,22 @@ module Make(C:Disambiguate.Callbacks) =
        ignore (Mathml_editor.thaw tex_editor) ;
        mmlwidget#thaw
 
+      (* The input of set_term is unquoted *)
       method set_term txt =
        mmlwidget#freeze ;
        ignore (Mathml_editor.freeze tex_editor) ;
        self#reset ;
-       (* we need to remove the initial and final '$' *)
-       let txt' = String.sub txt 1 (String.length txt - 2) in
+       let txt' = Str.global_replace (Str.regexp "_") "\\_" txt in
         String.iter (fun ch -> Mathml_editor.push tex_editor ch) txt' ;
         ignore (Mathml_editor.thaw tex_editor) ;
         mmlwidget#thaw
 
+      (* get_as_string returns the unquoted string *)
       method get_as_string =
-       Mathml_editor.get_tex tex_editor
+       let term = Mathml_editor.get_tex tex_editor in
+        Str.global_replace (Str.regexp "^\\$\\$?") ""
+         (Str.global_replace (Str.regexp "\\$\\$?$") ""
+           (Str.global_replace (Str.regexp "\\\\_") "_" term))
 
       method get_metasenv_and_term ~context ~metasenv =
        let name_context =
@@ -186,7 +192,7 @@ module Make(C:Disambiguate.Callbacks) =
            | None -> None
          ) context
        in
-        let lexbuf = Lexing.from_string self#get_as_string in
+        let lexbuf = Lexing.from_string (Mathml_editor.get_tex tex_editor) in
          let dom,mk_metasenv_and_expr =
           TexCicTextualParserContext.main
            ~context:name_context ~metasenv TexCicTextualLexer.token lexbuf