GNU Octave  4.0.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
cmd-edit.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2015 John W. Eaton
4 
5 This file is part of Octave.
6 
7 Octave is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if !defined (octave_cmd_edit_h)
24 #define octave_cmd_edit_h 1
25 
26 #include <cstdio>
27 
28 #include <set>
29 #include <string>
30 
31 #include "str-vec.h"
32 
33 class
34 OCTAVE_API
36 {
37 protected:
38 
40  : command_number (0), interrupted (false), initial_input () { }
41 
42 public:
43 
44  typedef int (*startup_hook_fcn) (void);
45 
46  typedef int (*pre_input_hook_fcn) (void);
47 
48  typedef int (*event_hook_fcn) (void);
49 
50  typedef std::string (*completion_fcn) (const std::string&, int);
51 
52  typedef std::string (*quoting_fcn) (const std::string&, int, char);
53 
54  typedef std::string (*dequoting_fcn) (const std::string&, int);
55 
56  typedef int (*char_is_quoted_fcn) (const std::string&, int);
57 
58  typedef void (*user_accept_line_fcn) (const std::string&);
59 
60  virtual ~command_editor (void) { }
61 
62  static void set_name (const std::string& n);
63 
64  static std::string readline (const std::string& prompt);
65 
66  static std::string readline (const std::string& prompt, bool& eof);
67 
68  static void set_input_stream (FILE *f);
69 
70  static FILE *get_input_stream (void);
71 
72  static void set_output_stream (FILE *f);
73 
74  static FILE *get_output_stream (void);
75 
76  static void redisplay (void);
77 
78  static int terminal_rows (void);
79 
80  static int terminal_cols (void);
81 
82  static void clear_screen (bool skip_redisplay = false);
83 
84  static void resize_terminal (void);
85 
86  static void set_screen_size (int ht, int wd);
87 
88  static std::string decode_prompt_string (const std::string& s);
89 
90  static void restore_terminal_state (void);
91 
92  static void blink_matching_paren (bool flag);
93 
94  static bool erase_empty_line (bool flag);
95 
96  static void set_basic_word_break_characters (const std::string& s);
97 
98  static void set_completer_word_break_characters (const std::string& s);
99 
100  static void set_basic_quote_characters (const std::string& s);
101 
102  static void set_filename_quote_characters (const std::string& s);
103 
104  static void set_completer_quote_characters (const std::string& s);
105 
106  static void set_completion_append_character (char c);
107 
108  static void set_completion_function (completion_fcn f);
109 
110  static void set_quoting_function (quoting_fcn f);
111 
112  static void set_dequoting_function (dequoting_fcn f);
113 
114  static void set_char_is_quoted_function (char_is_quoted_fcn f);
115 
116  static void set_user_accept_line_function (user_accept_line_fcn f);
117 
118  static completion_fcn get_completion_function (void);
119 
120  static quoting_fcn get_quoting_function (void);
121 
122  static dequoting_fcn get_dequoting_function (void);
123 
124  static char_is_quoted_fcn get_char_is_quoted_function (void);
125 
126  static user_accept_line_fcn get_user_accept_line_function (void);
127 
128  static string_vector generate_filename_completions (const std::string& text);
129 
130  static std::string get_line_buffer (void);
131 
132  static std::string get_current_line (void);
133 
134  static void replace_line (const std::string& text, bool clear_undo = true);
135 
136  static void kill_full_line (void);
137 
138  static void insert_text (const std::string& text);
139 
140  static void newline (void);
141 
142  static void accept_line (void);
143 
144  static bool undo (void);
145 
146  static void clear_undo_list (void);
147 
148  static void add_startup_hook (startup_hook_fcn f);
149 
150  static void remove_startup_hook (startup_hook_fcn f);
151 
152  static void add_pre_input_hook (pre_input_hook_fcn f);
153 
154  static void remove_pre_input_hook (pre_input_hook_fcn f);
155 
156  static void add_event_hook (event_hook_fcn f);
157 
158  static void remove_event_hook (event_hook_fcn f);
159 
160  static void run_event_hooks (void);
161 
162  static void read_init_file (const std::string& file = std::string ());
163 
164  static void re_read_init_file (void);
165 
166  static bool filename_completion_desired (bool);
167 
168  static bool filename_quoting_desired (bool);
169 
170  static bool prefer_env_winsize (bool);
171 
172  static bool interrupt (bool = true);
173 
174  static int current_command_number (void);
175 
176  static void reset_current_command_number (int n);
177 
178  static void increment_current_command_number (void);
179 
180  static void force_default_editor (void);
181 
182  static void set_initial_input (const std::string& text);
183 
184  static int insert_initial_input (void);
185 
186 private:
187 
188  // No copying!
189 
191 
192  command_editor& operator = (const command_editor&);
193 
194  static bool instance_ok (void);
195 
196  static void make_command_editor (void);
197 
198  static int startup_handler (void);
199 
200  static int pre_input_handler (void);
201 
202  static int event_handler (void);
203 
204  static std::set<startup_hook_fcn> startup_hook_set;
205 
206  static std::set<pre_input_hook_fcn> pre_input_hook_set;
207 
208  static std::set<event_hook_fcn> event_hook_set;
209 
210  typedef std::set<startup_hook_fcn>::iterator startup_hook_set_iterator;
211  typedef std::set<startup_hook_fcn>::const_iterator startup_hook_set_const_iterator;
212 
213  typedef std::set<pre_input_hook_fcn>::iterator pre_input_hook_set_iterator;
214  typedef std::set<pre_input_hook_fcn>::const_iterator pre_input_hook_set_const_iterator;
215 
216  typedef std::set<event_hook_fcn>::iterator event_hook_set_iterator;
217  typedef std::set<event_hook_fcn>::const_iterator event_hook_set_const_iterator;
218 
219  // The real thing.
221 
222  static void cleanup_instance (void) { delete instance; instance = 0; }
223 
224 protected:
225 
226  // To use something other than the GNU readline library, derive a new
227  // class from command_editor, overload these functions as
228  // necessary, and make instance point to the new class.
229 
230  virtual void do_set_name (const std::string&) { }
231 
232  std::string do_readline (const std::string& prompt)
233  {
234  bool eof;
235 
236  return do_readline (prompt, eof);
237  }
238 
239  virtual std::string do_readline (const std::string&, bool&) = 0;
240 
241  virtual void do_set_input_stream (FILE *) = 0;
242 
243  virtual FILE *do_get_input_stream (void) = 0;
244 
245  virtual void do_set_output_stream (FILE *) = 0;
246 
247  virtual FILE *do_get_output_stream (void) = 0;
248 
249  virtual void do_redisplay (void) { }
250 
251  virtual int do_terminal_rows (void) { return 24; }
252 
253  virtual int do_terminal_cols (void) { return 80; }
254 
255  virtual void do_clear_screen (bool) { }
256 
257  virtual void do_resize_terminal (void) { }
258 
259  virtual void do_set_screen_size (int, int) { }
260 
261  virtual std::string do_decode_prompt_string (const std::string&);
262 
263  virtual std::string newline_chars (void) { return "\n"; }
264 
265  virtual void do_restore_terminal_state (void) { }
266 
267  virtual void do_blink_matching_paren (bool) { }
268 
269  virtual bool do_erase_empty_line (bool) { return false; }
270 
271  virtual void do_set_basic_word_break_characters (const std::string&) { }
272 
273  virtual void do_set_completer_word_break_characters (const std::string&) { }
274 
275  virtual void do_set_basic_quote_characters (const std::string&) { }
276 
277  virtual void do_set_filename_quote_characters (const std::string&) { }
278 
279  virtual void do_set_completer_quote_characters (const std::string&) { }
280 
281  virtual void do_set_completion_append_character (char) { }
282 
283  virtual void do_set_completion_function (completion_fcn) { }
284 
285  virtual void do_set_quoting_function (quoting_fcn) { }
286 
287  virtual void do_set_dequoting_function (dequoting_fcn) { }
288 
289  virtual void do_set_char_is_quoted_function (char_is_quoted_fcn) { }
290 
291  virtual void do_set_user_accept_line_function (user_accept_line_fcn) { }
292 
293  virtual completion_fcn do_get_completion_function (void) const { return 0; }
294 
295  virtual quoting_fcn do_get_quoting_function (void) const { return 0; }
296 
297  virtual dequoting_fcn do_get_dequoting_function (void) const { return 0; }
298 
299  virtual char_is_quoted_fcn do_get_char_is_quoted_function (void) const
300  { return 0; }
301 
302  virtual user_accept_line_fcn do_get_user_accept_line_function (void) const
303  { return 0; }
304 
305  virtual string_vector
306  do_generate_filename_completions (const std::string& text) = 0;
307 
308  virtual std::string do_get_line_buffer (void) const = 0;
309 
310  virtual std::string do_get_current_line (void) const = 0;
311 
312  virtual void do_replace_line (const std::string& text, bool clear_undo) = 0;
313 
314  virtual void do_kill_full_line (void) = 0;
315 
316  virtual void do_insert_text (const std::string& text) = 0;
317 
318  virtual void do_newline (void) = 0;
319 
320  virtual void do_accept_line (void) = 0;
321 
322  virtual bool do_undo (void) { return false; }
323 
324  virtual void do_clear_undo_list (void) { }
325 
326  virtual void set_startup_hook (startup_hook_fcn) { }
327 
328  virtual void restore_startup_hook (void) { }
329 
330  virtual void set_pre_input_hook (pre_input_hook_fcn) { }
331 
332  virtual void restore_pre_input_hook (void) { }
333 
334  virtual void set_event_hook (event_hook_fcn) { }
335 
336  virtual void restore_event_hook (void) { }
337 
338  virtual void do_read_init_file (const std::string&) { }
339 
340  virtual void do_re_read_init_file (void) { }
341 
342  virtual bool do_filename_completion_desired (bool) { return false; }
343 
344  virtual bool do_filename_quoting_desired (bool) { return false; }
345 
346  virtual bool do_prefer_env_winsize (bool) { return false; }
347 
348  virtual void do_interrupt (bool) { }
349 
350  int do_insert_initial_input (void);
351 
352  int read_octal (const std::string& s);
353 
354  void error (int);
355 
356  void error (const std::string&);
357 
358  // The current command number.
360 
362 
363  std::string initial_input;
364 };
365 
366 #endif
virtual bool do_undo(void)
Definition: cmd-edit.h:322
virtual quoting_fcn do_get_quoting_function(void) const
Definition: cmd-edit.h:295
virtual void do_set_filename_quote_characters(const std::string &)
Definition: cmd-edit.h:277
virtual int do_terminal_cols(void)
Definition: cmd-edit.h:253
virtual void restore_event_hook(void)
Definition: cmd-edit.h:336
virtual void do_set_completion_function(completion_fcn)
Definition: cmd-edit.h:283
virtual void do_set_quoting_function(quoting_fcn)
Definition: cmd-edit.h:285
virtual void do_set_basic_quote_characters(const std::string &)
Definition: cmd-edit.h:275
virtual void do_set_user_accept_line_function(user_accept_line_fcn)
Definition: cmd-edit.h:291
static std::set< pre_input_hook_fcn > pre_input_hook_set
Definition: cmd-edit.h:206
virtual dequoting_fcn do_get_dequoting_function(void) const
Definition: cmd-edit.h:297
virtual ~command_editor(void)
Definition: cmd-edit.h:60
virtual void set_pre_input_hook(pre_input_hook_fcn)
Definition: cmd-edit.h:330
virtual void set_event_hook(event_hook_fcn)
Definition: cmd-edit.h:334
std::set< startup_hook_fcn >::iterator startup_hook_set_iterator
Definition: cmd-edit.h:210
int command_number
Definition: cmd-edit.h:359
void error(const char *fmt,...)
Definition: error.cc:476
virtual void restore_pre_input_hook(void)
Definition: cmd-edit.h:332
virtual void do_set_completer_word_break_characters(const std::string &)
Definition: cmd-edit.h:273
virtual void do_restore_terminal_state(void)
Definition: cmd-edit.h:265
virtual void do_set_basic_word_break_characters(const std::string &)
Definition: cmd-edit.h:271
virtual bool do_prefer_env_winsize(bool)
Definition: cmd-edit.h:346
virtual void do_read_init_file(const std::string &)
Definition: cmd-edit.h:338
virtual void restore_startup_hook(void)
Definition: cmd-edit.h:328
virtual void do_set_screen_size(int, int)
Definition: cmd-edit.h:259
virtual void do_set_name(const std::string &)
Definition: cmd-edit.h:230
static command_editor * instance
Definition: cmd-edit.h:220
std::string do_readline(const std::string &prompt)
Definition: cmd-edit.h:232
F77_RET_T const double const double * f
command_editor(void)
Definition: cmd-edit.h:39
std::set< pre_input_hook_fcn >::const_iterator pre_input_hook_set_const_iterator
Definition: cmd-edit.h:214
virtual std::string newline_chars(void)
Definition: cmd-edit.h:263
virtual void do_redisplay(void)
Definition: cmd-edit.h:249
std::set< pre_input_hook_fcn >::iterator pre_input_hook_set_iterator
Definition: cmd-edit.h:213
bool interrupted
Definition: cmd-edit.h:361
virtual void do_clear_screen(bool)
Definition: cmd-edit.h:255
virtual int do_terminal_rows(void)
Definition: cmd-edit.h:251
virtual void do_set_dequoting_function(dequoting_fcn)
Definition: cmd-edit.h:287
std::string initial_input
Definition: cmd-edit.h:363
std::set< event_hook_fcn >::iterator event_hook_set_iterator
Definition: cmd-edit.h:216
static std::set< event_hook_fcn > event_hook_set
Definition: cmd-edit.h:208
static void cleanup_instance(void)
Definition: cmd-edit.h:222
virtual void do_re_read_init_file(void)
Definition: cmd-edit.h:340
virtual void set_startup_hook(startup_hook_fcn)
Definition: cmd-edit.h:326
std::set< startup_hook_fcn >::const_iterator startup_hook_set_const_iterator
Definition: cmd-edit.h:211
virtual void do_set_completion_append_character(char)
Definition: cmd-edit.h:281
virtual void do_interrupt(bool)
Definition: cmd-edit.h:348
virtual void do_resize_terminal(void)
Definition: cmd-edit.h:257
virtual void do_blink_matching_paren(bool)
Definition: cmd-edit.h:267
virtual bool do_filename_quoting_desired(bool)
Definition: cmd-edit.h:344
std::set< event_hook_fcn >::const_iterator event_hook_set_const_iterator
Definition: cmd-edit.h:217
virtual user_accept_line_fcn do_get_user_accept_line_function(void) const
Definition: cmd-edit.h:302
virtual completion_fcn do_get_completion_function(void) const
Definition: cmd-edit.h:293
static std::set< startup_hook_fcn > startup_hook_set
Definition: cmd-edit.h:204
virtual void do_clear_undo_list(void)
Definition: cmd-edit.h:324
virtual bool do_erase_empty_line(bool)
Definition: cmd-edit.h:269
virtual bool do_filename_completion_desired(bool)
Definition: cmd-edit.h:342
virtual void do_set_char_is_quoted_function(char_is_quoted_fcn)
Definition: cmd-edit.h:289
virtual void do_set_completer_quote_characters(const std::string &)
Definition: cmd-edit.h:279
virtual char_is_quoted_fcn do_get_char_is_quoted_function(void) const
Definition: cmd-edit.h:299