Revert to master - those changes are globally valid, but remain incomplete,
[blender.git] / source / blender / blenkernel / BKE_text.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27 #ifndef __BKE_TEXT_H__
28 #define __BKE_TEXT_H__
29
30 /** \file BKE_text.h
31  *  \ingroup bke
32  *  \since March 2001
33  *  \author nzc
34  */
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 struct Main;
41 struct Text;
42 struct TextLine;
43
44 void                    BKE_text_free           (struct Text *text);
45 void                    txt_set_undostate       (int u);
46 int                     txt_get_undostate       (void);
47 struct Text    *BKE_text_add    (struct Main *bmain, const char *name);
48 int                             txt_extended_ascii_as_utf8(char **str);
49 bool            BKE_text_reload(struct Text *text);
50 struct Text    *BKE_text_load_ex(struct Main *bmain, const char *file, const char *relpath,
51                                  const bool is_internal);
52 struct Text    *BKE_text_load   (struct Main *bmain, const char *file, const char *relpath);
53 struct Text    *BKE_text_copy           (struct Main *bmain, struct Text *ta);
54 void                    BKE_text_unlink         (struct Main *bmain, struct Text *text);
55 void                    BKE_text_clear      (struct Text *text);
56 void                    BKE_text_write      (struct Text *text, const char *str);
57 int             BKE_text_file_modified_check(struct Text *text);
58 void            BKE_text_file_modified_ignore(struct Text *text);
59
60 char   *txt_to_buf                      (struct Text *text);
61 void    txt_clean_text          (struct Text *text);
62 void    txt_order_cursors       (struct Text *text, const bool reverse);
63 int             txt_find_string         (struct Text *text, const char *findstr, int wrap, int match_case);
64 bool    txt_has_sel                     (struct Text *text);
65 int             txt_get_span            (struct TextLine *from, struct TextLine *to);
66 int             txt_utf8_offset_to_index(const char *str, int offset);
67 int             txt_utf8_index_to_offset(const char *str, int index);
68 int             txt_utf8_offset_to_column(const char *str, int offset);
69 int             txt_utf8_column_to_offset(const char *str, int column);
70 void    txt_move_up                     (struct Text *text, const bool sel);
71 void    txt_move_down           (struct Text *text, const bool sel);
72 void    txt_move_left           (struct Text *text, const bool sel);
73 void    txt_move_right          (struct Text *text, const bool sel);
74 void    txt_jump_left           (struct Text *text, const bool sel, const bool use_init_step);
75 void    txt_jump_right          (struct Text *text, const bool sel, const bool use_init_step);
76 void    txt_move_bof            (struct Text *text, const bool sel);
77 void    txt_move_eof            (struct Text *text, const bool sel);
78 void    txt_move_bol            (struct Text *text, const bool sel);
79 void    txt_move_eol            (struct Text *text, const bool sel);
80 void    txt_move_toline         (struct Text *text, unsigned int line, const bool sel);
81 void    txt_move_to                     (struct Text *text, unsigned int line, unsigned int ch, const bool sel);
82 void    txt_pop_sel                     (struct Text *text);
83 void    txt_delete_char         (struct Text *text);
84 void    txt_delete_word         (struct Text *text);
85 void    txt_delete_selected     (struct Text *text);
86 void    txt_sel_all                     (struct Text *text);
87 void    txt_sel_clear           (struct Text *text);
88 void    txt_sel_line            (struct Text *text);
89 char   *txt_sel_to_buf          (struct Text *text);
90 void    txt_insert_buf          (struct Text *text, const char *in_buffer);
91 void    txt_undo_add_op         (struct Text *text, int op);
92 void    txt_do_undo                     (struct Text *text);
93 void    txt_do_redo                     (struct Text *text);
94 void    txt_split_curline       (struct Text *text);
95 void    txt_backspace_char      (struct Text *text);
96 void    txt_backspace_word      (struct Text *text);
97 bool    txt_add_char            (struct Text *text, unsigned int add);
98 bool    txt_add_raw_char        (struct Text *text, unsigned int add);
99 bool    txt_replace_char        (struct Text *text, unsigned int add);
100 void    txt_unindent            (struct Text *text);
101 void    txt_comment                     (struct Text *text);
102 void    txt_indent                      (struct Text *text);
103 void    txt_uncomment           (struct Text *text);
104 void    txt_move_lines          (struct Text *text, const int direction);
105 void    txt_duplicate_line      (struct Text *text);
106 int             txt_setcurr_tab_spaces(struct Text *text, int space);
107 bool    txt_cursor_is_line_start(struct Text *text);
108 bool    txt_cursor_is_line_end(struct Text *text);
109
110 #if 0
111 void    txt_print_undo          (struct Text *text);
112 #endif
113
114 /* utility functions, could be moved somewhere more generic but are python/text related  */
115 int  text_check_bracket(const char ch);
116 bool text_check_delim(const char ch);
117 bool text_check_digit(const char ch);
118 bool text_check_identifier(const char ch);
119 bool text_check_identifier_nodigit(const char ch);
120 bool text_check_whitespace(const char ch);
121 int  text_find_identifier_start(const char *str, int i);
122
123 /* defined in bpy_interface.c */
124 extern int text_check_identifier_unicode(const unsigned int ch);
125 extern int text_check_identifier_nodigit_unicode(const unsigned int ch);
126
127 enum {
128         TXT_MOVE_LINE_UP   = -1,
129         TXT_MOVE_LINE_DOWN =  1
130 };
131
132
133 /* Undo opcodes */
134
135 /* Complex editing */
136 /* 1 - opcode is followed by 1 byte for ascii character and opcode (repeat)) */
137 /* 2 - opcode is followed by 2 bytes for utf-8 character and opcode (repeat)) */
138 /* 3 - opcode is followed by 3 bytes for utf-8 character and opcode (repeat)) */
139 /* 4 - opcode is followed by 4 bytes for unicode character and opcode (repeat)) */
140 #define UNDO_INSERT_1   013
141 #define UNDO_INSERT_2   014
142 #define UNDO_INSERT_3   015
143 #define UNDO_INSERT_4   016
144
145 #define UNDO_BS_1       017
146 #define UNDO_BS_2       020
147 #define UNDO_BS_3       021
148 #define UNDO_BS_4       022
149
150 #define UNDO_DEL_1      023
151 #define UNDO_DEL_2      024
152 #define UNDO_DEL_3      025
153 #define UNDO_DEL_4      026
154
155 /* Text block (opcode is followed
156  * by 4 character length ID + the text
157  * block itself + the 4 character length
158  * ID (repeat) and opcode (repeat)) */
159 #define UNDO_DBLOCK     027 /* Delete block */
160 #define UNDO_IBLOCK     030 /* Insert block */
161
162 /* Misc */
163 #define UNDO_INDENT     032
164 #define UNDO_UNINDENT   033
165 #define UNDO_COMMENT    034
166 #define UNDO_UNCOMMENT  035
167
168 #define UNDO_MOVE_LINES_UP      036
169 #define UNDO_MOVE_LINES_DOWN    037
170
171 #define UNDO_DUPLICATE  040
172
173 #ifdef __cplusplus
174 }
175 #endif
176
177 #endif