Reorganize archiver by introducing non deterministic patches
[texmacs.git] / src / src / Edit / editor.hpp
blob6adb5953c3fd62ee18ece9bfd5f1bddfc2e123a8
2 /******************************************************************************
3 * MODULE : editor.hpp
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 ******************************************************************************/
12 #ifndef EDITOR_H
13 #define EDITOR_H
14 #include "typesetter.hpp"
15 #ifdef AQUATEXMACS
16 #include "Cocoa/aqua_simple_widget.h"
17 #else
18 #ifdef QTTEXMACS
19 #include "Qt/qt_simple_widget.hpp"
20 #else
21 #include "Widkit/simple_wk_widget.hpp"
22 #endif
23 #endif
24 #include "server.hpp"
25 #include "scheme.hpp"
26 #include "drd_info.hpp"
27 #ifdef EXPERIMENTAL
28 #include "../Style/Environment/environment.hpp"
29 #include "../Style/Memorizer/memorizer.hpp"
30 #endif
31 #define TEXMACS_COPYRIGHT (string("(c) 1999-2006 by Joris van der Hoeven"))
33 #define THE_CURSOR 1
34 #define THE_FOCUS 2
35 #define THE_TREE 4
36 #define THE_ENVIRONMENT 8
37 #define THE_SELECTION 16
38 #define THE_DECORATIONS 32
39 #define THE_EXTENTS 64
40 #define THE_LOCUS 128
42 class tm_buffer_rep;
43 typedef tm_buffer_rep* tm_buffer;
44 class server_rep;
45 class modification;
47 class editor_rep: public simple_widget_rep {
48 public:
49 server_rep* sv; // the underlying texmacs server
51 protected:
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
58 #ifdef EXPERIMENTAL
59 environment ste; // environment for style rewriting
60 tree cct; // clean copy of the document tree
61 memorizer mem; // style converted document tree
62 #endif
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;
88 protected:
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;
117 public:
118 editor_rep ();
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;
225 #ifdef EXPERIMENTAL
226 virtual void environment_update () = 0;
227 #endif
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,
312 string w, string h,
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);
502 class editor {
503 EXTEND_NULL(widget,editor);
504 public:
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 (); \
515 sv->cmd; \
516 sv->set_view (temp_vw); \
519 #endif // defined EDITOR_H