be30eba0559273f85d566238758c96e80f8a8120
[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 struct SpaceText;
44
45 void                    BKE_text_free           (struct Text *text);
46 void                    txt_set_undostate       (int u);
47 int                     txt_get_undostate       (void);
48 struct Text*    BKE_text_add    (const char *name);
49 int                             txt_extended_ascii_as_utf8(char **str);
50 int                             BKE_text_reload         (struct Text *text);
51 struct Text*    BKE_text_load           (const char *file, const char *relpath);
52 struct Text*    BKE_text_copy           (struct Text *ta);
53 void                    BKE_text_unlink         (struct Main *bmain, struct Text *text);
54 void                    BKE_text_clear      (struct Text *text);
55 void                    BKE_text_write      (struct Text *text, const char *str);
56
57 char*   txt_to_buf                      (struct Text *text);
58 void    txt_clean_text          (struct Text *text);
59 void    txt_order_cursors       (struct Text *text);
60 int             txt_find_string         (struct Text *text, const char *findstr, int wrap, int match_case);
61 int             txt_has_sel                     (struct Text *text);
62 int             txt_get_span            (struct TextLine *from, struct TextLine *to);
63 int             txt_utf8_offset_to_index(const char *str, int offset);
64 int             txt_utf8_index_to_offset(const char *str, int index);
65 void    txt_move_up                     (struct Text *text, short sel);
66 void    txt_move_down           (struct Text *text, short sel);
67 void    txt_move_left           (struct Text *text, short sel);
68 void    txt_move_right          (struct Text *text, short sel);
69 void    txt_jump_left           (struct Text *text, short sel);
70 void    txt_jump_right          (struct Text *text, short sel);
71 void    txt_move_bof            (struct Text *text, short sel);
72 void    txt_move_eof            (struct Text *text, short sel);
73 void    txt_move_bol            (struct Text *text, short sel);
74 void    txt_move_eol            (struct Text *text, short sel);
75 void    txt_move_toline         (struct Text *text, unsigned int line, short sel);
76 void    txt_move_to                     (struct Text *text, unsigned int line, unsigned int ch, short sel);
77 void    txt_pop_sel                     (struct Text *text);
78 void    txt_delete_char         (struct Text *text);
79 void    txt_delete_word         (struct Text *text);
80 void    txt_delete_selected     (struct Text *text);
81 void    txt_sel_all                     (struct Text *text);
82 void    txt_sel_line            (struct Text *text);
83 char*   txt_sel_to_buf          (struct Text *text);
84 void    txt_insert_buf          (struct Text *text, const char *in_buffer);
85 void    txt_print_undo          (struct Text *text);
86 void    txt_undo_add_op         (struct Text *text, int op);
87 void    txt_do_undo                     (struct Text *text);
88 void    txt_do_redo                     (struct Text *text);
89 void    txt_split_curline       (struct Text *text);
90 void    txt_backspace_char      (struct Text *text);
91 void    txt_backspace_word      (struct Text *text);
92 int             txt_add_char            (struct Text *text, unsigned int add);
93 int             txt_add_raw_char        (struct Text *text, unsigned int add);
94 int             txt_replace_char        (struct Text *text, unsigned int add);
95 void    txt_unindent            (struct Text *text);
96 void    txt_comment                     (struct Text *text);
97 void    txt_indent                      (struct Text *text);
98 void    txt_uncomment           (struct Text *text);
99 void    txt_move_lines          (struct Text *text, const int direction);
100 void    txt_duplicate_line      (struct Text *text);
101 int     setcurr_tab_spaces      (struct Text *text, int space);
102
103 /* utility functions, could be moved somewhere more generic but are python/text related  */
104 int text_check_bracket(const char ch);
105 int text_check_delim(const char ch);
106 int text_check_digit(const char ch);
107 int text_check_identifier(const char ch);
108 int text_check_identifier_nodigit(const char ch);
109 int text_check_whitespace(const char ch);
110 int text_find_identifier_start(const char *str, int i);
111
112 enum {
113         TXT_MOVE_LINE_UP   = -1,
114         TXT_MOVE_LINE_DOWN =  1
115 };
116
117
118 /* Undo opcodes */
119
120 /* Complex editing */
121 /* 1 - opcode is followed by 1 byte for ascii character and opcode (repeat)) */
122 /* 2 - opcode is followed by 2 bytes for utf-8 character and opcode (repeat)) */
123 /* 3 - opcode is followed by 3 bytes for utf-8 character and opcode (repeat)) */
124 /* 4 - opcode is followed by 4 bytes for unicode character and opcode (repeat)) */
125 #define UNDO_INSERT_1   013
126 #define UNDO_INSERT_2   014
127 #define UNDO_INSERT_3   015
128 #define UNDO_INSERT_4   016
129
130 #define UNDO_BS_1       017
131 #define UNDO_BS_2       020
132 #define UNDO_BS_3       021
133 #define UNDO_BS_4       022
134
135 #define UNDO_DEL_1      023
136 #define UNDO_DEL_2      024
137 #define UNDO_DEL_3      025
138 #define UNDO_DEL_4      026
139
140 /* Text block (opcode is followed
141  * by 4 character length ID + the text
142  * block itself + the 4 character length
143  * ID (repeat) and opcode (repeat)) */
144 #define UNDO_DBLOCK     027 /* Delete block */
145 #define UNDO_IBLOCK     030 /* Insert block */
146
147 /* Misc */
148 #define UNDO_INDENT     032
149 #define UNDO_UNINDENT   033
150 #define UNDO_COMMENT    034
151 #define UNDO_UNCOMMENT  035
152
153 #define UNDO_MOVE_LINES_UP      036
154 #define UNDO_MOVE_LINES_DOWN    037
155
156 #define UNDO_DUPLICATE  040
157
158 #ifdef __cplusplus
159 }
160 #endif
161
162 #endif