1 /* Copyright (C) 2002-2003, Luca Padovani <luca.padovani@cs.unibo.it>,
2 * 2003, Paolo Marinelli <pmarinel@cs.unibo.it>.
4 * This file is part of EdiTeX, an editor of mathematical
5 * expressions based on TeX syntax
7 * EdiTeX is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * EdiTeX is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with EdiTeX; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 * For details, see the EdiTeX World-Wide-Web page,
22 * http://helm.cs.unibo.it/editex, or send a mail to
23 * <luca.padovani@cs.unibo.it>
28 #include <caml/memory.h>
29 #include <caml/custom.h>
30 #include <caml/callback.h>
32 #include "mlgdomevalue.h"
34 #include "c_mathml_editor.h"
45 ml_Editor* editor = *((ml_Editor**) Data_custom_val(v));
46 assert(editor != NULL);
51 ml_mathml_editor_finalize(value v)
53 ml_Editor* editor = Editor_val(v);
56 remove_global_root(&editor->callback);
57 c_mathml_editor_destroy(editor->c_editor);
62 ml_mathml_editor_log_callback(int level, const char* msg, void* user_data)
64 ml_Editor* ml_editor = (ml_Editor*) user_data;
66 callback2(ml_editor->callback, Val_int(level), copy_string(msg));
70 ml_mathml_editor_new(value dictionary,
75 static struct custom_operations ops =
78 ml_mathml_editor_finalize,
79 custom_compare_default,
81 custom_serialize_default,
82 custom_deserialize_default
85 value v = alloc_custom(&ops, sizeof(ml_Editor*), 0, 1);
86 ml_Editor** ml_editor_ref = (ml_Editor**) Data_custom_val(v);
87 ml_Editor* ml_editor = *ml_editor_ref = malloc(sizeof(ml_Editor));
88 ml_editor->c_editor = c_mathml_editor_new(Document_val(dictionary),
89 Document_val(tml_mml),
90 Document_val(tml_tex),
91 ml_mathml_editor_log_callback,
93 ml_editor->callback = log_message_cb;
94 register_global_root(&ml_editor->callback);
100 ml_mathml_editor_freeze(value v)
103 ml_Editor* editor = Editor_val(v);
104 CAMLreturn(Val_bool(c_mathml_editor_freeze(editor->c_editor)));
108 ml_mathml_editor_thaw(value v)
111 ml_Editor* editor = Editor_val(v);
112 CAMLreturn(Val_bool(c_mathml_editor_thaw(editor->c_editor)));
116 ml_mathml_editor_push(value v, value ch)
119 ml_Editor* editor = Editor_val(v);
120 c_mathml_editor_push(editor->c_editor, Int_val(ch));
121 CAMLreturn(Val_unit);
125 ml_mathml_editor_drop(value v, value alt)
128 ml_Editor* editor = Editor_val(v);
129 c_mathml_editor_drop(editor->c_editor, Bool_val(alt));
130 CAMLreturn(Val_unit);
134 ml_mathml_editor_cursor_hide(value v)
137 ml_Editor* editor = Editor_val(v);
138 CAMLreturn(Val_bool(c_mathml_editor_cursor_hide(editor->c_editor)));
142 ml_mathml_editor_cursor_show(value v)
145 ml_Editor* editor = Editor_val(v);
146 CAMLreturn(Val_bool(c_mathml_editor_cursor_show(editor->c_editor)));
150 ml_mathml_editor_get_tex(value v)
153 ml_Editor* editor = Editor_val(v);
154 char* res = c_mathml_editor_get_tex(editor->c_editor);
156 ml_res = copy_string(res);
162 ml_mathml_editor_reset(value v, value s)
165 ml_Editor* editor = Editor_val(v);
166 c_mathml_editor_reset(editor->c_editor);
167 CAMLreturn(Val_unit);
171 ml_mathml_editor_get_tml(value v)
174 ml_Editor* editor = Editor_val(v);
175 GdomeDocument* doc = c_mathml_editor_get_tml(editor->c_editor);
176 CAMLreturn(Val_Document(doc));
180 ml_mathml_editor_get_mml(value v)
183 ml_Editor* editor = Editor_val(v);
184 GdomeDocument* doc = c_mathml_editor_get_mml(editor->c_editor);
185 CAMLreturn(Val_Document(doc));