b53af3cec53af5f5be97fa0906bc25fd1e0e7b71
[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 TextUndoBuf;
44
45 void                    BKE_text_free_lines     (struct Text *text);
46 void                    BKE_text_free           (struct Text *text);
47 void            BKE_text_init(struct Text *ta);
48 struct Text    *BKE_text_add    (struct Main *bmain, const char *name);
49 int                             txt_extended_ascii_as_utf8(char **str);
50 bool            BKE_text_reload(struct Text *text);
51 struct Text    *BKE_text_load_ex(struct Main *bmain, const char *file, const char *relpath,
52                                  const bool is_internal);
53 struct Text    *BKE_text_load   (struct Main *bmain, const char *file, const char *relpath);
54 void            BKE_text_copy_data(struct Main *bmain, struct Text *ta_dst, const struct Text *ta_src, const int flag);
55 struct Text    *BKE_text_copy           (struct Main *bmain, const struct Text *ta);
56 void            BKE_text_make_local (struct Main *bmain, struct Text *text, const bool lib_local);
57 void                    BKE_text_clear      (struct Text *text, struct TextUndoBuf *utxt);
58 void                    BKE_text_write      (struct Text *text, struct TextUndoBuf *utxt, const char *str);
59 int             BKE_text_file_modified_check(struct Text *text);
60 void            BKE_text_file_modified_ignore(struct Text *text);
61
62 char   *txt_to_buf                      (struct Text *text);
63 void    txt_clean_text          (struct Text *text);
64 void    txt_order_cursors       (struct Text *text, const bool reverse);
65 int             txt_find_string         (struct Text *text, const char *findstr, int wrap, int match_case);
66 bool    txt_has_sel                     (struct Text *text);
67 int             txt_get_span            (struct TextLine *from, struct TextLine *to);
68 int             txt_utf8_offset_to_index(const char *str, int offset);
69 int             txt_utf8_index_to_offset(const char *str, int index);
70 int             txt_utf8_offset_to_column(const char *str, int offset);
71 int             txt_utf8_column_to_offset(const char *str, int column);
72 void    txt_move_up                     (struct Text *text, const bool sel);
73 void    txt_move_down           (struct Text *text, const bool sel);
74 void    txt_move_left           (struct Text *text, const bool sel);
75 void    txt_move_right          (struct Text *text, const bool sel);
76 void    txt_jump_left           (struct Text *text, const bool sel, const bool use_init_step);
77 void    txt_jump_right          (struct Text *text, const bool sel, const bool use_init_step);
78 void    txt_move_bof            (struct Text *text, const bool sel);
79 void    txt_move_eof            (struct Text *text, const bool sel);
80 void    txt_move_bol            (struct Text *text, const bool sel);
81 void    txt_move_eol            (struct Text *text, const bool sel);
82 void    txt_move_toline         (struct Text *text, unsigned int line, const bool sel);
83 void    txt_move_to                     (struct Text *text, unsigned int line, unsigned int ch, const bool sel);
84 void    txt_pop_sel                     (struct Text *text);
85 void    txt_delete_char         (struct Text *text, struct TextUndoBuf *utxt);
86 void    txt_delete_word         (struct Text *text, struct TextUndoBuf *utxt);
87 void    txt_delete_selected     (struct Text *text, struct TextUndoBuf *utxt);
88 void    txt_sel_all                     (struct Text *text);
89 void    txt_sel_clear           (struct Text *text);
90 void    txt_sel_line            (struct Text *text);
91 char   *txt_sel_to_buf          (struct Text *text);
92 void    txt_insert_buf          (struct Text *text, struct TextUndoBuf *utxt, const char *in_buffer);
93 void    txt_undo_add_op         (struct Text *text, struct TextUndoBuf *utxt, int op);
94 void    txt_do_undo                     (struct Text *text, struct TextUndoBuf *utxt);
95 void    txt_do_redo                     (struct Text *text, struct TextUndoBuf *utxt);
96 void    txt_split_curline       (struct Text *text, struct TextUndoBuf *utxt);
97 void    txt_backspace_char      (struct Text *text, struct TextUndoBuf *utxt);
98 void    txt_backspace_word      (struct Text *text, struct TextUndoBuf *utxt);
99 bool    txt_add_char            (struct Text *text, struct TextUndoBuf *utxt, unsigned int add);
100 bool    txt_add_raw_char        (struct Text *text, struct TextUndoBuf *utxt, unsigned int add);
101 bool    txt_replace_char        (struct Text *text, struct TextUndoBuf *utxt, unsigned int add);
102 void    txt_unindent            (struct Text *text, struct TextUndoBuf *utxt);
103 void    txt_comment             (struct Text *text, struct TextUndoBuf *utxt);
104 void    txt_indent                      (struct Text *text, struct TextUndoBuf *utxt);
105 void    txt_uncomment           (struct Text *text, struct TextUndoBuf *utxt);
106 void    txt_move_lines          (struct Text *text, struct TextUndoBuf *utxt, const int direction);
107 void    txt_duplicate_line      (struct Text *text, struct TextUndoBuf *utxt);
108 int             txt_setcurr_tab_spaces(struct Text *text, int space);
109 bool    txt_cursor_is_line_start(struct Text *text);
110 bool    txt_cursor_is_line_end(struct Text *text);
111
112 int txt_calc_tab_left(struct TextLine *line, int ch);
113 int txt_calc_tab_right(struct TextLine *line, int ch);
114
115 #if 0
116 void    txt_print_undo          (struct Text *text);
117 #endif
118
119 /* utility functions, could be moved somewhere more generic but are python/text related  */
120 int  text_check_bracket(const char ch);
121 bool text_check_delim(const char ch);
122 bool text_check_digit(const char ch);
123 bool text_check_identifier(const char ch);
124 bool text_check_identifier_nodigit(const char ch);
125 bool text_check_whitespace(const char ch);
126 int  text_find_identifier_start(const char *str, int i);
127
128 /* defined in bpy_interface.c */
129 extern int text_check_identifier_unicode(const unsigned int ch);
130 extern int text_check_identifier_nodigit_unicode(const unsigned int ch);
131
132 enum {
133         TXT_MOVE_LINE_UP   = -1,
134         TXT_MOVE_LINE_DOWN =  1
135 };
136
137 typedef struct TextUndoBuf {
138         char *buf;
139         int pos, len;
140 } TextUndoBuf;
141
142 #ifdef __cplusplus
143 }
144 #endif
145
146 #endif