1 /** \file 2 * \brief Header: editor widget WEdit 3 */ 4 5 #ifndef MC__EDIT_WIDGET_H 6 #define MC__EDIT_WIDGET_H 7 8 #include "lib/search.h" /* mc_search_t */ 9 #include "lib/widget.h" /* Widget */ 10 11 #include "edit-impl.h" 12 #include "editbuffer.h" 13 14 /*** typedefs(not structures) and defined constants **********************************************/ 15 16 #define N_LINE_CACHES 32 17 18 /*** enums ***************************************************************************************/ 19 20 /** 21 enum for store the search conditions check results. 22 (if search condition have BOL(^) or EOL ($) regexp checial characters). 23 */ 24 typedef enum 25 { 26 AT_START_LINE = (1 << 0), 27 AT_END_LINE = (1 << 1) 28 } edit_search_line_t; 29 30 /*** structures declarations (and typedefs of structures)*****************************************/ 31 32 typedef struct edit_book_mark_t edit_book_mark_t; 33 struct edit_book_mark_t 34 { 35 long line; /* line number */ 36 int c; /* color */ 37 edit_book_mark_t *next; 38 edit_book_mark_t *prev; 39 }; 40 41 typedef struct edit_syntax_rule_t edit_syntax_rule_t; 42 struct edit_syntax_rule_t 43 { 44 unsigned short keyword; 45 off_t end; 46 unsigned char context; 47 unsigned char _context; 48 unsigned char border; 49 }; 50 51 /* 52 * State of WEdit window 53 * MCEDIT_DRAG_NONE - window is in normal mode 54 * MCEDIT_DRAG_MOVE - window is being moved 55 * MCEDIT_DRAG_RESIZE - window is being resized 56 */ 57 typedef enum 58 { 59 MCEDIT_DRAG_NONE = 0, 60 MCEDIT_DRAG_MOVE, 61 MCEDIT_DRAG_RESIZE 62 } mcedit_drag_state_t; 63 64 struct WEdit 65 { 66 Widget widget; 67 mcedit_drag_state_t drag_state; 68 int drag_state_start; /* save cursor position before window moving */ 69 70 /* save location before move/resize or toggle to fullscreen */ 71 WRect loc_prev; 72 73 vfs_path_t *filename_vpath; /* Name of the file */ 74 vfs_path_t *dir_vpath; /* NULL if filename is absolute */ 75 76 /* dynamic buffers and cursor position for editor: */ 77 edit_buffer_t buffer; 78 79 #ifdef HAVE_CHARSET 80 /* multibyte support */ 81 gboolean utf8; /* It's multibyte file codeset */ 82 GIConv converter; 83 char charbuf[4 + 1]; 84 int charpoint; 85 #endif 86 87 /* search handler */ 88 mc_search_t *search; 89 int replace_mode; 90 /* is search conditions should be started from BOL(^) or ended with EOL($) */ 91 edit_search_line_t search_line_type; 92 93 char *last_search_string; /* String that have been searched */ 94 off_t search_start; /* First character to start searching from */ 95 unsigned long found_len; /* Length of found string or 0 if none was found */ 96 off_t found_start; /* the found word from a search - start position */ 97 98 /* display information */ 99 long start_display; /* First char displayed */ 100 long start_col; /* First displayed column, negative */ 101 long max_column; /* The maximum cursor position ever reached used to calc hori scroll bar */ 102 long curs_row; /* row position of cursor on the screen */ 103 long curs_col; /* column position on screen */ 104 long over_col; /* pos after '\n' */ 105 int force; /* how much of the screen do we redraw? */ 106 unsigned int overwrite:1; /* Overwrite on type mode (as opposed to insert) */ 107 unsigned int modified:1; /* File has been modified and needs saving */ 108 unsigned int loading_done:1; /* File has been loaded into the editor */ 109 unsigned int locked:1; /* We hold lock on current file */ 110 unsigned int delete_file:1; /* New file, needs to be deleted unless modified */ 111 unsigned int highlight:1; /* There is a selected block */ 112 unsigned int column_highlight:1; 113 unsigned int fullscreen:1; /* Is window fullscreen or not */ 114 long prev_col; /* recent column position of the cursor - used when moving 115 up or down past lines that are shorter than the current line */ 116 long start_line; /* line number of the top of the page */ 117 118 /* file info */ 119 off_t mark1; /* position of highlight start */ 120 off_t mark2; /* position of highlight end */ 121 off_t end_mark_curs; /* position of cursor after end of highlighting */ 122 long column1; /* position of column highlight start */ 123 long column2; /* position of column highlight end */ 124 off_t bracket; /* position of a matching bracket */ 125 off_t last_bracket; /* previous position of a matching bracket */ 126 127 /* cache speedup for line lookups */ 128 gboolean caches_valid; 129 long line_numbers[N_LINE_CACHES]; 130 off_t line_offsets[N_LINE_CACHES]; 131 132 edit_book_mark_t *book_mark; 133 GArray *serialized_bookmarks; 134 135 /* undo stack and pointers */ 136 unsigned long undo_stack_pointer; 137 long *undo_stack; 138 unsigned long undo_stack_size; 139 unsigned long undo_stack_size_mask; 140 unsigned long undo_stack_bottom; 141 unsigned int undo_stack_disable:1; /* If not 0, don't save events in the undo stack */ 142 143 unsigned long redo_stack_pointer; 144 long *redo_stack; 145 unsigned long redo_stack_size; 146 unsigned long redo_stack_size_mask; 147 unsigned long redo_stack_bottom; 148 unsigned int redo_stack_reset:1; /* If 1, need clear redo stack */ 149 150 struct stat stat1; /* Result of mc_fstat() on the file */ 151 unsigned int skip_detach_prompt:1; /* Do not prompt whether to detach a file anymore */ 152 153 /* syntax higlighting */ 154 GSList *syntax_marker; 155 GPtrArray *rules; 156 off_t last_get_rule; 157 edit_syntax_rule_t rule; 158 char *syntax_type; /* description of syntax highlighting type being used */ 159 GTree *defines; /* List of defines */ 160 gboolean is_case_insensitive; /* selects language case sensitivity */ 161 162 /* line break */ 163 LineBreaks lb; 164 }; 165 166 /*** global variables defined in .c file *********************************************************/ 167 168 /*** declarations of public functions ************************************************************/ 169 170 /*** inline functions ****************************************************************************/ 171 #endif /* MC__EDIT_WIDGET_H */ 172