2 /******************************************************************************
4 * DESCRIPTION: abstract TeXmacs editors
5 * COPYRIGHT : (C) 1999 Joris van der Hoeven
6 *******************************************************************************
7 * This software falls under the GNU general public license version 3 or later.
8 * It comes WITHOUT ANY WARRANTY WHATSOEVER. For details, see the file LICENSE
9 * in the root directory or <http://www.gnu.org/licenses/gpl-3.0.html>.
10 ******************************************************************************/
14 #include "typesetter.hpp"
16 #include "Cocoa/aqua_simple_widget.h"
19 #include "Qt/qt_simple_widget.hpp"
21 #include "Widkit/simple_wk_widget.hpp"
26 #include "drd_info.hpp"
28 #include "../Style/Environment/environment.hpp"
29 #include "../Style/Memorizer/memorizer.hpp"
31 #define TEXMACS_COPYRIGHT (string("(c) 1999-2006 by Joris van der Hoeven"))
36 #define THE_ENVIRONMENT 8
37 #define THE_SELECTION 16
38 #define THE_DECORATIONS 32
39 #define THE_EXTENTS 64
43 typedef tm_buffer_rep
* tm_buffer
;
47 class editor_rep
: public simple_widget_rep
{
49 server_rep
* sv
; // the underlying texmacs server
52 tm_buffer buf
; // the underlying buffer
53 drd_info drd
; // the drd for the buffer
54 tree
& et
; // all TeXmacs trees
55 box eb
; // box translation of tree
56 path rp
; // path to the root of the document in et
57 path tp
; // path of cursor in tree
59 environment ste
; // environment for style rewriting
60 tree cct
; // clean copy of the document tree
61 memorizer mem
; // style converted document tree
64 /* exchanging information with the interface */
65 virtual SI
get_window_height () = 0;
66 virtual void get_selection (path
& start
, path
& end
) = 0;
67 virtual void set_selection (path start
, path end
) = 0;
68 virtual cursor
& the_cursor () = 0;
69 virtual cursor
& the_ghost_cursor () = 0;
71 /* exchanging information with the typesetter */
72 virtual typesetter
get_typesetter () = 0;
73 virtual hashmap
<string
,tree
> get_init () = 0;
74 virtual hashmap
<string
,tree
> get_fin () = 0;
75 virtual void set_init (hashmap
<string
,tree
> H
= tree ("?"))=0;
76 virtual void add_init (hashmap
<string
,tree
> H
) = 0;
77 virtual void set_fin (hashmap
<string
,tree
> H
) = 0;
78 virtual void set_base_name (url name
) = 0;
80 /* exchanging property information */
81 virtual void set_bool_property (string what
, bool val
) = 0;
82 virtual void set_int_property (string what
, int val
) = 0;
83 virtual void set_string_property (string what
, string val
) = 0;
84 virtual bool get_bool_property (string what
) = 0;
85 virtual int get_int_property (string what
) = 0;
86 virtual string
get_string_property (string what
) = 0;
89 /* protected routines from edit_typeset */
90 virtual void typeset_preamble () = 0;
91 virtual void typeset_invalidate_env () = 0;
92 virtual void typeset (SI
& x1
, SI
& y1
, SI
& x2
, SI
& y2
) = 0;
94 /* protected subroutines for deletion of content */
95 virtual void back_prime (tree t
, path p
, bool forward
) = 0;
96 virtual void back_in_wide (tree t
, path p
, bool forward
) = 0;
97 virtual void back_in_tree (tree t
, path p
, bool forward
) = 0;
98 virtual void back_table (path p
, bool forward
) = 0;
99 virtual void back_in_table (tree t
, path p
, bool forward
) = 0;
100 virtual void back_monolithic (path p
) = 0;
101 virtual void back_general (path p
, bool forward
) = 0;
102 virtual void back_in_with (tree t
, path p
, bool forward
) = 0;
103 virtual void back_in_general (tree t
, path p
, bool forward
) = 0;
105 /* other protected subroutines */
106 virtual path
tree_path (path sp
, SI x
, SI y
, SI delta
) = 0;
107 virtual void apply_changes () = 0;
108 virtual void animate () = 0;
109 virtual void correct_concat (path p
, int done
=0) = 0;
110 virtual path
search_format (int& row
, int& col
) = 0;
111 virtual void table_bound (path fp
, int& i1
, int& j1
, int& i2
, int& j2
) = 0;
112 virtual tree
table_get_subtable (path p
, int i1
, int j1
, int i2
, int j2
) = 0;
113 virtual void table_write_subtable (path fp
, int row
, int col
, tree subt
) = 0;
114 virtual void table_del_format (path fp
, int I1
, int J1
,
115 int I2
, int J2
, string var
) = 0;
119 editor_rep (server_rep
* sv
, tm_buffer buf
);
120 inline virtual ~editor_rep () {}
122 /* public routines from edit_interface */
123 virtual void suspend () = 0;
124 virtual void resume () = 0;
125 virtual int get_pixel_size () = 0;
126 virtual void invalidate (SI x1
, SI y1
, SI x2
, SI y2
) = 0;
127 virtual void invalidate (rectangles rs
) = 0;
128 virtual void notify_change (int changed
) = 0;
129 virtual bool has_changed (int question
) = 0;
130 virtual int idle_time (int event_type
= ANY_EVENT
) = 0;
131 virtual int change_time () = 0;
132 virtual void full_screen_mode (bool flag
) = 0;
133 virtual void before_menu_action () = 0;
134 virtual void after_menu_action () = 0;
135 virtual int get_input_mode () = 0;
136 virtual void set_input_mode (int mode
) = 0;
137 virtual void set_input_normal () = 0;
138 virtual bool in_normal_mode () = 0;
139 virtual bool in_search_mode () = 0;
140 virtual bool in_replace_mode () = 0;
141 virtual bool in_spell_mode () = 0;
142 virtual bool shortcut_active () = 0;
143 virtual bool kbd_get_command (string cmd_s
, string
& help
, command
& cmd
) = 0;
144 virtual void key_press (string key
) = 0;
145 virtual void emulate_keyboard (string keys
, string action
= "") = 0;
146 virtual bool complete_try () = 0;
147 virtual void complete_start (string prefix
, array
<string
> compls
) = 0;
148 virtual bool complete_keypress (string key
) = 0;
149 virtual bool session_complete_try (tree t
) = 0;
150 virtual void mouse_any (string s
, SI x
, SI y
, int mods
, time_t t
) = 0;
151 virtual void mouse_click (SI x
, SI y
) = 0;
152 virtual bool mouse_extra_click (SI x
, SI y
) = 0;
153 virtual void mouse_drag (SI x
, SI y
) = 0;
154 virtual void mouse_select (SI x
, SI y
, int mods
) = 0;
155 virtual void mouse_paste (SI x
, SI y
) = 0;
156 virtual void mouse_adjust (SI x
, SI y
) = 0;
157 virtual void mouse_scroll (SI x
, SI y
, bool up
) = 0;
158 virtual cursor
get_cursor () = 0;
159 virtual void set_pointer (string name
) = 0;
160 virtual void set_pointer (string curs_name
, string mask_name
) = 0;
161 virtual void set_message (string l
, string r
= "", bool temp
= false) = 0;
162 virtual void recall_message () = 0;
164 /* public routines from edit_cursor */
165 virtual path
make_cursor_accessible (path p
, bool forwards
) = 0;
166 virtual void show_cursor_if_hidden () = 0;
167 virtual void go_to (SI x
, SI y
, bool absolute
= true) = 0;
168 virtual void go_left_physical () = 0;
169 virtual void go_right_physical () = 0;
170 virtual void go_left () = 0;
171 virtual void go_right () = 0;
172 virtual void go_up () = 0;
173 virtual void go_down () = 0;
174 virtual void go_start_line () = 0;
175 virtual void go_end_line () = 0;
176 virtual void go_page_up () = 0;
177 virtual void go_page_down () = 0;
178 virtual void go_to (path p
) = 0;
179 virtual void go_to_correct (path p
) = 0;
180 virtual void go_to_start (path p
) = 0;
181 virtual void go_to_end (path p
) = 0;
182 virtual void go_to_border (path p
, bool at_start
) = 0;
183 virtual void go_to_here () = 0;
184 virtual void go_start () = 0;
185 virtual void go_end () = 0;
186 virtual void go_start_of (tree_label what
) = 0;
187 virtual void go_end_of (tree_label what
) = 0;
188 virtual void go_start_with (string var
, string val
) = 0;
189 virtual void go_end_with (string var
, string val
) = 0;
190 virtual void go_start_paragraph () = 0;
191 virtual void go_end_paragraph () = 0;
192 virtual void go_to_label (string s
) = 0;
193 virtual tree
get_labels () = 0;
195 /* public routines from edit_graphics */
196 virtual bool inside_graphics (bool b
=true) = 0;
197 virtual bool inside_active_graphics (bool b
=true) = 0;
198 virtual bool over_graphics (SI x
, SI y
) = 0;
199 virtual tree
get_graphics () = 0;
200 virtual double get_x () = 0;
201 virtual double get_y () = 0;
202 virtual frame
find_frame (bool last
= false) = 0;
203 virtual grid
find_grid () = 0;
204 virtual void find_limits (point
& lim1
, point
& lim2
) = 0;
205 virtual bool find_graphical_region (SI
& x1
, SI
& y1
, SI
& x2
, SI
& y2
) = 0;
206 virtual point
adjust (point p
) = 0;
207 virtual tree
find_point (point p
) = 0;
208 virtual tree
graphical_select (double x
, double y
) = 0;
209 virtual tree
graphical_select (double x1
, double y1
,
210 double x2
, double y2
) = 0;
211 virtual tree
get_graphical_object () = 0;
212 virtual void set_graphical_object (tree t
) = 0;
213 virtual void invalidate_graphical_object () = 0;
214 virtual void draw_graphical_object (renderer ren
) = 0;
215 virtual bool mouse_graphics (string s
, SI x
, SI y
, int mods
, time_t t
) = 0;
217 /* public routines from edit_typeset */
218 virtual void clear_local_info () = 0;
219 virtual SI
as_length (string l
) = 0;
220 virtual string
add_lengths (string l1
, string l2
) = 0;
221 virtual string
multiply_length (double x
, string l
) = 0;
222 virtual bool is_length (string s
) = 0;
223 virtual double divide_lengths (string l1
, string l2
) = 0;
224 virtual void drd_update () = 0;
226 virtual void environment_update () = 0;
228 virtual bool defined_at_cursor (string var_name
) = 0;
229 virtual bool defined_at_init (string var_name
) = 0;
230 virtual bool defined_in_init (string var_name
) = 0;
231 virtual tree
get_env_value (string var_name
, path p
) = 0;
232 virtual tree
get_env_value (string var_name
) = 0;
233 virtual tree
get_init_value (string var_name
) = 0;
234 virtual string
get_env_string (string var_name
) = 0;
235 virtual string
get_init_string (string var_name
) = 0;
236 virtual int get_env_int (string var_name
) = 0;
237 virtual int get_init_int (string var_name
) = 0;
238 virtual double get_env_double (string var_name
) = 0;
239 virtual double get_init_double (string var_name
) = 0;
240 virtual language
get_env_language () = 0;
241 virtual tree
exec_texmacs (tree t
, path p
) = 0;
242 virtual tree
exec_texmacs (tree t
) = 0;
243 virtual tree
exec_html (tree t
, path p
) = 0;
244 virtual tree
exec_html (tree t
) = 0;
245 virtual tree
exec_latex (tree t
, path p
) = 0;
246 virtual tree
exec_latex (tree t
) = 0;
247 virtual tree
texmacs_exec (tree t
) = 0;
248 virtual tree
get_style () = 0;
249 virtual void set_style (tree t
) = 0;
250 virtual void init_style () = 0;
251 virtual void init_style (string style
) = 0;
252 virtual void init_add_package (string package
) = 0;
253 virtual void init_remove_package (string package
) = 0;
254 virtual void init_env (string var
, tree by
) = 0;
255 virtual void init_default (string var
) = 0;
256 virtual void typeset_invalidate (path p
) = 0;
257 virtual void typeset_invalidate_all () = 0;
259 /* public routines from edit_modify */
260 virtual void notify_assign (path p
, tree u
) = 0;
261 virtual void notify_insert (path p
, tree u
) = 0;
262 virtual void notify_remove (path p
, int nr
) = 0;
263 virtual void notify_split (path p
) = 0;
264 virtual void notify_join (path p
) = 0;
265 virtual void notify_assign_node (path p
, tree_label op
) = 0;
266 virtual void notify_insert_node (path p
, tree t
) = 0;
267 virtual void notify_remove_node (path p
) = 0;
268 virtual void post_notify (path p
) = 0;
269 virtual void clear_undo_history () = 0;
270 virtual double this_author () = 0;
271 virtual void start_editing () = 0;
272 virtual void end_editing () = 0;
273 virtual void start_slave (double a
) = 0;
274 virtual void add_undo_mark () = 0;
275 virtual void remove_undo_mark () = 0;
276 virtual void unredoable_undo () = 0;
277 virtual int undo_possibilities () = 0;
278 virtual void undo (int i
=0) = 0;
279 virtual int redo_possibilities () = 0;
280 virtual void redo (int i
=0) = 0;
281 virtual bool modifying () = 0;
282 virtual bool forget () = 0;
283 virtual observer
position_new (path p
) = 0;
284 virtual void position_delete (observer o
) = 0;
285 virtual void position_set (observer o
, path p
) = 0;
286 virtual path
position_get (observer o
) = 0;
288 /* public routines from edit_text */
289 virtual void correct (path p
) = 0;
290 virtual bool insert_return () = 0;
291 virtual void remove_return (path p
) = 0;
292 virtual void insert_tree (tree t
, path p_in_t
) = 0;
293 virtual void var_insert_tree (tree t
, path p_in_t
) = 0;
294 virtual void insert_tree (tree t
) = 0;
295 virtual void remove_text (bool forward
) = 0;
296 virtual void remove_structure (bool forward
) = 0;
297 virtual void remove_structure_upwards () = 0;
299 virtual void make_space (tree t
) = 0;
300 virtual void make_space (string w
) = 0;
301 virtual void make_space (string w
, string y1
, string y2
) = 0;
302 virtual void make_hspace (string s
) = 0;
303 virtual void make_hspace (string smin
, string sdef
, string smax
) = 0;
304 virtual void make_vspace_before (string s
) = 0;
305 virtual void make_vspace_before (string smin
, string sdef
, string smax
) = 0;
306 virtual void make_vspace_after (string s
) = 0;
307 virtual void make_vspace_after (string smin
, string sdef
, string smax
) = 0;
308 virtual void make_htab (string spc
) = 0;
309 virtual void make_move (string x
, string y
) = 0;
310 virtual void make_resize (string x1
, string y1
, string x2
, string y2
) = 0;
311 virtual void make_postscript (string file_name
, bool link
,
313 string x1
, string y1
,
314 string x2
, string y2
) = 0;
316 /* public routines from edit_math */
317 virtual void make_group () = 0;
318 virtual void make_lprime (string s
) = 0;
319 virtual void make_rprime (string s
) = 0;
320 virtual void make_below () = 0;
321 virtual void make_above () = 0;
322 virtual void make_script (bool sup
, bool right
) = 0;
323 virtual void make_fraction () = 0;
324 virtual void make_sqrt () = 0;
325 virtual void make_var_sqrt () = 0;
326 virtual void make_wide (string wide
) = 0;
327 virtual void make_wide_under (string wide
) = 0;
328 virtual void make_neg () = 0;
329 virtual void make_tree () = 0;
331 /* public routines from edit_table */
332 virtual void make_table (int nr_rows
=1, int nr_cols
=1) = 0;
333 virtual void make_subtable (int nr_rows
=1, int nr_cols
=1) = 0;
334 virtual void table_disactivate () = 0;
335 virtual void table_extract_format () = 0;
336 virtual void table_insert_row (bool forward
) = 0;
337 virtual void table_insert_column (bool forward
) = 0;
338 virtual void table_remove_row (bool forward
, bool flag
= false) = 0;
339 virtual void table_remove_column (bool forward
, bool flag
= false) = 0;
340 virtual int table_nr_rows () = 0;
341 virtual int table_nr_columns () = 0;
342 virtual int table_which_row () = 0;
343 virtual int table_which_column () = 0;
344 virtual path
table_search_cell (int row
, int col
) = 0;
345 virtual void table_go_to (int row
, int col
) = 0;
346 virtual void table_set_format (string var
, string val
) = 0;
347 virtual string
table_get_format (string var
) = 0;
348 virtual void table_del_format (string var
= "") = 0;
349 virtual void table_format_center () = 0;
350 virtual void table_row_decoration (bool forward
) = 0;
351 virtual void table_column_decoration (bool forward
) = 0;
352 virtual void table_correct_block_content () = 0;
353 virtual void set_cell_mode (string mode
) = 0;
354 virtual string
get_cell_mode () = 0;
355 virtual void cell_set_format (string var
, string val
) = 0;
356 virtual string
cell_get_format (string var
) = 0;
357 virtual void cell_del_format (string var
= "") = 0;
358 virtual void table_test () = 0;
360 /* public routines from edit_dynamic */
361 virtual bool in_source () = 0;
362 virtual path
find_dynamic (path p
) = 0;
363 virtual void make_compound (tree_label l
, int n
=-1) = 0;
364 virtual void activate () = 0;
365 virtual void go_to_argument (path p
, bool start_flag
) = 0;
366 virtual void insert_argument (path p
, bool forward
) = 0;
367 virtual void insert_argument (bool forward
) = 0;
368 virtual void remove_argument (path p
, bool forward
) = 0;
369 virtual void remove_argument (bool forward
) = 0;
370 virtual void make_with (string var
, string val
) = 0;
371 virtual void insert_with (path p
, string var
, tree val
) = 0;
372 virtual void remove_with (path p
, string var
) = 0;
373 virtual void make_mod_active (tree_label l
) = 0;
374 virtual void make_style_with (string var
, string val
) = 0;
375 virtual void make_hybrid () = 0;
376 virtual bool activate_latex () = 0;
377 virtual void activate_hybrid (bool with_args_hint
) = 0;
378 virtual void activate_symbol () = 0;
379 virtual void activate_compound () = 0;
380 virtual bool make_return_before () = 0;
381 virtual bool make_return_after () = 0;
382 virtual void temp_proof_fix () = 0;
384 /* public routines from edit_process */
385 virtual void generate_bibliography (string bib
, string sty
, string fname
)= 0;
386 virtual void generate_table_of_contents (string toc
) = 0;
387 virtual void generate_index (string idx
) = 0;
388 virtual void generate_glossary (string glo
) = 0;
389 virtual void generate_aux (string which
= "") = 0;
390 virtual bool get_save_aux () = 0;
392 /* public routines from edit_select */
393 virtual void select (path p
) = 0;
394 virtual void select (path start
, path end
) = 0;
395 virtual void select_all () = 0;
396 virtual void select_line () = 0;
397 virtual void select_from_cursor () = 0;
398 virtual void select_from_cursor_if_active () = 0;
399 virtual void select_from_keyboard (bool flag
) = 0;
400 virtual void select_from_shift_keyboard () = 0;
401 virtual void select_enlarge_text () = 0;
402 virtual void select_enlarge () = 0;
403 virtual void select_enlarge_environmental () = 0;
405 virtual bool selection_active_any () = 0;
406 virtual bool selection_active_normal () = 0;
407 virtual bool selection_active_table () = 0;
408 virtual bool selection_active_small () = 0;
409 virtual bool selection_active_enlarging () = 0;
411 virtual void selection_raw_set (string key
, tree t
) = 0;
412 virtual tree
selection_raw_get (string key
) = 0;
413 virtual path
selection_get_subtable (int& i1
, int& j1
, int& i2
, int& j2
) = 0;
414 virtual void selection_get (selection
& sel
) = 0;
415 virtual void selection_get (path
& start
, path
& end
) = 0;
416 virtual path
selection_get_start () = 0;
417 virtual path
selection_get_end () = 0;
418 virtual path
selection_get_path () = 0;
419 virtual void selection_set (string key
, tree t
, bool persistant
= false) = 0;
420 virtual void selection_set (tree t
) = 0;
421 virtual void selection_set_start (path p
= path()) = 0;
422 virtual void selection_set_end (path p
= path()) = 0;
423 virtual void selection_copy (string key
= "primary") = 0;
424 virtual void selection_paste (string key
= "primary") = 0;
425 virtual void selection_clear (string key
= "primary") = 0;
426 virtual void selection_cancel () = 0;
427 virtual void selection_set_import (string fm
) = 0;
428 virtual void selection_set_export (string fm
) = 0;
429 virtual string
selection_get_import () = 0;
430 virtual string
selection_get_export () = 0;
432 virtual tree
selection_get () = 0;
433 virtual void selection_cut (string key
= "primary") = 0;
434 virtual tree
selection_get_cut () = 0;
435 virtual void selection_move () = 0;
436 virtual void cut (path p
) = 0;
437 virtual void cut (path start
, path end
) = 0;
439 /* public routines from edit_replace */
440 virtual bool inside (string what
) = 0;
441 virtual bool inside (tree_label l
) = 0;
442 virtual bool inside_with (string var
, string val
) = 0;
443 virtual string
inside_which (tree t
) = 0;
444 virtual path
search_upwards (string what
) = 0;
445 virtual path
search_upwards (tree_label l
) = 0;
446 virtual path
search_parent_upwards (tree_label l
) = 0;
447 virtual path
search_parent_upwards (tree_label l
, int& last
) = 0;
448 virtual path
search_upwards_with (string var
, string val
) = 0;
449 virtual path
search_upwards_in_set (tree t
) = 0;
450 virtual path
search_previous_compound (path init
, string which
) = 0;
451 virtual path
search_next_compound (path init
, string which
) = 0;
452 virtual void search_start (bool forward
= true) = 0;
453 virtual void search_button_next () = 0;
454 virtual bool search_keypress (string s
) = 0;
455 virtual void replace_start (tree what
, tree by
, bool forward
= true) = 0;
456 virtual bool replace_keypress (string s
) = 0;
457 virtual void spell_start () = 0;
458 virtual void spell_replace (string by
) = 0;
459 virtual bool spell_keypress (string s
) = 0;
461 /* public routines from edit_main */
462 virtual void set_property (scheme_tree what
, scheme_tree val
) = 0;
463 virtual scheme_tree
get_property (scheme_tree what
) = 0;
464 virtual void clear_buffer () = 0;
465 virtual void new_window () = 0;
466 virtual void clone_window () = 0;
467 virtual void tex_buffer () = 0;
468 virtual url
get_name () = 0;
469 virtual void focus_on_this_editor () = 0;
470 virtual void notify_page_change () = 0;
471 virtual void print (url ps_name
, bool to_file
, int first
, int last
) = 0;
472 virtual void print_to_file (url ps_name
,
473 string first
="1", string last
="1000000") = 0;
474 virtual void print_buffer (string first
="1", string last
="1000000") = 0;
475 virtual void export_ps (url ps_name
,
476 string first
="1", string last
="1000000") = 0;
477 virtual array
<int> print_snippet (url u
, tree t
) = 0;
478 virtual void footer_eval (string s
) = 0;
479 virtual tree
the_line () = 0;
480 virtual tree
the_root () = 0;
481 virtual tree
the_buffer () = 0;
482 virtual tree
the_subtree (path p
) = 0;
483 virtual path
the_path () = 0;
484 virtual path
the_buffer_path () = 0;
485 virtual void show_tree () = 0;
486 virtual void show_env () = 0;
487 virtual void show_path () = 0;
488 virtual void show_cursor () = 0;
489 virtual void show_selection () = 0;
490 virtual void show_meminfo () = 0;
491 virtual void edit_special () = 0;
492 virtual void edit_test () = 0;
494 friend class tm_window_rep
;
495 friend class tm_data_rep
;
496 friend class tm_server_rep
;
497 friend class server_command_rep
;
498 friend void edit_announce (editor_rep
* ed
, modification mod
);
499 friend void edit_done (editor_rep
* ed
, modification mod
);
503 EXTEND_NULL(widget
,editor
);
505 inline bool operator == (editor w
) { return rep
== w
.rep
; }
506 inline bool operator != (editor w
) { return rep
!= w
.rep
; }
508 EXTEND_NULL_CODE(widget
,editor
);
510 editor
new_editor (server_rep
* sv
, tm_buffer buf
);
512 #define SERVER(cmd) { \
513 tm_view temp_vw= sv->get_view (false); \
514 focus_on_this_editor (); \
516 sv->set_view (temp_vw); \
519 #endif // defined EDITOR_H