2 * \brief Header: text keep buffer for WEdit
5 #ifndef MC__EDIT_BUFFER_H
6 #define MC__EDIT_BUFFER_H
8 /*** typedefs(not structures) and defined constants **********************************************/
10 /*** enums ***************************************************************************************/
12 /*** structures declarations (and typedefs of structures)*****************************************/
14 typedef struct edit_buffer_struct
16 off_t curs1
; /* position of the cursor from the beginning of the file. */
17 off_t curs2
; /* position from the end of the file */
18 GPtrArray
*b1
; /* all data up to curs1 */
19 GPtrArray
*b2
; /* all data from end of file down to curs2 */
20 off_t size
; /* file size */
21 long lines
; /* total lines in the file */
22 long curs_line
; /* line number of the cursor. */
25 typedef struct edit_buffer_read_file_status_msg_struct
27 simple_status_msg_t status_msg
; /* base class */
32 } edit_buffer_read_file_status_msg_t
;
34 /*** global variables defined in .c file *********************************************************/
36 /*** declarations of public functions ************************************************************/
38 void edit_buffer_init (edit_buffer_t
* buf
, off_t size
);
39 void edit_buffer_clean (edit_buffer_t
* buf
);
41 int edit_buffer_get_byte (const edit_buffer_t
* buf
, off_t byte_index
);
43 int edit_buffer_get_utf (const edit_buffer_t
* buf
, off_t byte_index
, int *char_length
);
44 int edit_buffer_get_prev_utf (const edit_buffer_t
* buf
, off_t byte_index
, int *char_length
);
46 long edit_buffer_count_lines (const edit_buffer_t
* buf
, off_t first
, off_t last
);
47 off_t
edit_buffer_get_bol (const edit_buffer_t
* buf
, off_t current
);
48 off_t
edit_buffer_get_eol (const edit_buffer_t
* buf
, off_t current
);
49 GString
*edit_buffer_get_word_from_pos (const edit_buffer_t
* buf
, off_t start_pos
, off_t
* start
,
52 void edit_buffer_insert (edit_buffer_t
* buf
, int c
);
53 void edit_buffer_insert_ahead (edit_buffer_t
* buf
, int c
);
54 int edit_buffer_delete (edit_buffer_t
* buf
);
55 int edit_buffer_backspace (edit_buffer_t
* buf
);
57 off_t
edit_buffer_get_forward_offset (const edit_buffer_t
* buf
, off_t current
, long lines
,
59 off_t
edit_buffer_get_backward_offset (const edit_buffer_t
* buf
, off_t current
, long lines
);
61 off_t
edit_buffer_read_file (edit_buffer_t
* buf
, int fd
, off_t size
,
62 edit_buffer_read_file_status_msg_t
* sm
, gboolean
* aborted
);
63 off_t
edit_buffer_write_file (edit_buffer_t
* buf
, int fd
);
65 int edit_buffer_calc_percent (const edit_buffer_t
* buf
, off_t offset
);
67 /*** inline functions ****************************************************************************/
70 edit_buffer_get_current_byte (const edit_buffer_t
* buf
)
72 return edit_buffer_get_byte (buf
, buf
->curs1
);
75 /* --------------------------------------------------------------------------------------------- */
78 edit_buffer_get_previous_byte (const edit_buffer_t
* buf
)
80 return edit_buffer_get_byte (buf
, buf
->curs1
- 1);
83 /* --------------------------------------------------------------------------------------------- */
85 * Get "begin-of-line" offset of current line
87 * @param buf editor buffer
89 * @return index of first char of current line
93 edit_buffer_get_current_bol (const edit_buffer_t
* buf
)
95 return edit_buffer_get_bol (buf
, buf
->curs1
);
98 /* --------------------------------------------------------------------------------------------- */
100 * Get "end-of-line" offset of current line
102 * @param buf editor buffer
104 * @return index of first char of current line + 1
108 edit_buffer_get_current_eol (const edit_buffer_t
* buf
)
110 return edit_buffer_get_eol (buf
, buf
->curs1
);
113 /* --------------------------------------------------------------------------------------------- */
115 #endif /* MC__EDIT_BUFFER_H */