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