1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; coding: utf-8 -*- 2 * gtksourcebuffer.h 3 * This file is part of GtkSourceView 4 * 5 * Copyright (C) 1999-2002 - Mikael Hermansson <tyan@linux.se>, 6 * Chris Phelps <chicane@reninet.com> and 7 * Jeroen Zwartepoorte <jeroen@xs4all.nl> 8 * Copyright (C) 2003 - Paolo Maggi, Gustavo Giráldez 9 * Copyright (C) 2014 - Sébastien Wilmet <swilmet@gnome.org> 10 * 11 * GtkSourceView is free software; you can redistribute it and/or 12 * modify it under the terms of the GNU Lesser General Public 13 * License as published by the Free Software Foundation; either 14 * version 2.1 of the License, or (at your option) any later version. 15 * 16 * GtkSourceView is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * Lesser General Public License for more details. 20 * 21 * You should have received a copy of the GNU Lesser General Public 22 * License along with this library; if not, write to the Free Software 23 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 24 */ 25 26 #ifndef GTK_SOURCE_BUFFER_H 27 #define GTK_SOURCE_BUFFER_H 28 29 #if !defined (GTK_SOURCE_H_INSIDE) && !defined (GTK_SOURCE_COMPILATION) 30 # if defined (__GNUC__) 31 # warning "Only <gtksourceview/gtksource.h> can be included directly." 32 # elif defined (G_OS_WIN32) 33 # pragma message("Only <gtksourceview/gtksource.h> can be included directly.") 34 # endif 35 #endif 36 37 #include <gtk/gtk.h> 38 #include <gtksourceview/gtksourcetypes.h> 39 40 G_BEGIN_DECLS 41 42 #define GTK_SOURCE_TYPE_BUFFER (gtk_source_buffer_get_type ()) 43 #define GTK_SOURCE_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_SOURCE_TYPE_BUFFER, GtkSourceBuffer)) 44 #define GTK_SOURCE_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_SOURCE_TYPE_BUFFER, GtkSourceBufferClass)) 45 #define GTK_SOURCE_IS_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_SOURCE_TYPE_BUFFER)) 46 #define GTK_SOURCE_IS_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_SOURCE_TYPE_BUFFER)) 47 #define GTK_SOURCE_BUFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_SOURCE_TYPE_BUFFER, GtkSourceBufferClass)) 48 49 typedef struct _GtkSourceBufferClass GtkSourceBufferClass; 50 typedef struct _GtkSourceBufferPrivate GtkSourceBufferPrivate; 51 52 /** 53 * GtkSourceBracketMatchType: 54 * @GTK_SOURCE_BRACKET_MATCH_NONE: there is no bracket to match. 55 * @GTK_SOURCE_BRACKET_MATCH_OUT_OF_RANGE: matching a bracket 56 * failed because the maximum range was reached. 57 * @GTK_SOURCE_BRACKET_MATCH_NOT_FOUND: a matching bracket was not found. 58 * @GTK_SOURCE_BRACKET_MATCH_FOUND: a matching bracket was found. 59 */ 60 typedef enum _GtkSourceBracketMatchType 61 { 62 GTK_SOURCE_BRACKET_MATCH_NONE, 63 GTK_SOURCE_BRACKET_MATCH_OUT_OF_RANGE, 64 GTK_SOURCE_BRACKET_MATCH_NOT_FOUND, 65 GTK_SOURCE_BRACKET_MATCH_FOUND 66 } GtkSourceBracketMatchType; 67 68 /** 69 * GtkSourceChangeCaseType: 70 * @GTK_SOURCE_CHANGE_CASE_LOWER: change case to lowercase. 71 * @GTK_SOURCE_CHANGE_CASE_UPPER: change case to uppercase. 72 * @GTK_SOURCE_CHANGE_CASE_TOGGLE: toggle case of each character. 73 * @GTK_SOURCE_CHANGE_CASE_TITLE: capitalize each word. 74 * 75 * Since: 3.12 76 */ 77 typedef enum _GtkSourceChangeCaseType 78 { 79 GTK_SOURCE_CHANGE_CASE_LOWER, 80 GTK_SOURCE_CHANGE_CASE_UPPER, 81 GTK_SOURCE_CHANGE_CASE_TOGGLE, 82 GTK_SOURCE_CHANGE_CASE_TITLE 83 } GtkSourceChangeCaseType; 84 85 /** 86 * GtkSourceSortFlags: 87 * @GTK_SOURCE_SORT_FLAGS_NONE: no flags specified 88 * @GTK_SOURCE_SORT_FLAGS_CASE_SENSITIVE: case sensitive sort 89 * @GTK_SOURCE_SORT_FLAGS_REVERSE_ORDER: sort in reverse order 90 * @GTK_SOURCE_SORT_FLAGS_REMOVE_DUPLICATES: remove duplicates 91 * 92 * Since: 3.18 93 */ 94 typedef enum _GtkSourceSortFlags 95 { 96 GTK_SOURCE_SORT_FLAGS_NONE = 0, 97 GTK_SOURCE_SORT_FLAGS_CASE_SENSITIVE = 1 << 0, 98 GTK_SOURCE_SORT_FLAGS_REVERSE_ORDER = 1 << 1, 99 GTK_SOURCE_SORT_FLAGS_REMOVE_DUPLICATES = 1 << 2, 100 } GtkSourceSortFlags; 101 102 struct _GtkSourceBuffer 103 { 104 GtkTextBuffer parent_instance; 105 106 GtkSourceBufferPrivate *priv; 107 }; 108 109 struct _GtkSourceBufferClass 110 { 111 GtkTextBufferClass parent_class; 112 113 /* Signals */ 114 void (*undo) (GtkSourceBuffer *buffer); 115 void (*redo) (GtkSourceBuffer *buffer); 116 117 void (*bracket_matched) (GtkSourceBuffer *buffer, 118 GtkTextIter *iter, 119 GtkSourceBracketMatchType state); 120 121 /* Padding for future expansion */ 122 void (*_gtk_source_reserved1) (void); 123 void (*_gtk_source_reserved2) (void); 124 void (*_gtk_source_reserved3) (void); 125 }; 126 127 GTK_SOURCE_AVAILABLE_IN_ALL 128 GType gtk_source_buffer_get_type (void) G_GNUC_CONST; 129 130 GTK_SOURCE_AVAILABLE_IN_ALL 131 GtkSourceBuffer *gtk_source_buffer_new (GtkTextTagTable *table); 132 133 GTK_SOURCE_AVAILABLE_IN_ALL 134 GtkSourceBuffer *gtk_source_buffer_new_with_language (GtkSourceLanguage *language); 135 136 GTK_SOURCE_AVAILABLE_IN_ALL 137 gboolean gtk_source_buffer_get_highlight_syntax (GtkSourceBuffer *buffer); 138 139 GTK_SOURCE_AVAILABLE_IN_ALL 140 void gtk_source_buffer_set_highlight_syntax (GtkSourceBuffer *buffer, 141 gboolean highlight); 142 143 GTK_SOURCE_AVAILABLE_IN_ALL 144 gboolean gtk_source_buffer_get_highlight_matching_brackets (GtkSourceBuffer *buffer); 145 146 GTK_SOURCE_AVAILABLE_IN_ALL 147 void gtk_source_buffer_set_highlight_matching_brackets (GtkSourceBuffer *buffer, 148 gboolean highlight); 149 150 GTK_SOURCE_AVAILABLE_IN_ALL 151 gint gtk_source_buffer_get_max_undo_levels (GtkSourceBuffer *buffer); 152 153 GTK_SOURCE_AVAILABLE_IN_ALL 154 void gtk_source_buffer_set_max_undo_levels (GtkSourceBuffer *buffer, 155 gint max_undo_levels); 156 157 GTK_SOURCE_AVAILABLE_IN_ALL 158 GtkSourceLanguage *gtk_source_buffer_get_language (GtkSourceBuffer *buffer); 159 160 GTK_SOURCE_AVAILABLE_IN_ALL 161 void gtk_source_buffer_set_language (GtkSourceBuffer *buffer, 162 GtkSourceLanguage *language); 163 164 GTK_SOURCE_AVAILABLE_IN_ALL 165 gboolean gtk_source_buffer_can_undo (GtkSourceBuffer *buffer); 166 167 GTK_SOURCE_AVAILABLE_IN_ALL 168 gboolean gtk_source_buffer_can_redo (GtkSourceBuffer *buffer); 169 170 GTK_SOURCE_AVAILABLE_IN_ALL 171 GtkSourceStyleScheme *gtk_source_buffer_get_style_scheme (GtkSourceBuffer *buffer); 172 173 GTK_SOURCE_AVAILABLE_IN_ALL 174 void gtk_source_buffer_set_style_scheme (GtkSourceBuffer *buffer, 175 GtkSourceStyleScheme *scheme); 176 177 GTK_SOURCE_AVAILABLE_IN_ALL 178 void gtk_source_buffer_ensure_highlight (GtkSourceBuffer *buffer, 179 const GtkTextIter *start, 180 const GtkTextIter *end); 181 182 GTK_SOURCE_AVAILABLE_IN_ALL 183 void gtk_source_buffer_undo (GtkSourceBuffer *buffer); 184 185 GTK_SOURCE_AVAILABLE_IN_ALL 186 void gtk_source_buffer_redo (GtkSourceBuffer *buffer); 187 188 GTK_SOURCE_AVAILABLE_IN_ALL 189 void gtk_source_buffer_begin_not_undoable_action (GtkSourceBuffer *buffer); 190 191 GTK_SOURCE_AVAILABLE_IN_ALL 192 void gtk_source_buffer_end_not_undoable_action (GtkSourceBuffer *buffer); 193 194 GTK_SOURCE_AVAILABLE_IN_ALL 195 GtkSourceMark *gtk_source_buffer_create_source_mark (GtkSourceBuffer *buffer, 196 const gchar *name, 197 const gchar *category, 198 const GtkTextIter *where); 199 200 GTK_SOURCE_AVAILABLE_IN_ALL 201 gboolean gtk_source_buffer_forward_iter_to_source_mark (GtkSourceBuffer *buffer, 202 GtkTextIter *iter, 203 const gchar *category); 204 205 GTK_SOURCE_AVAILABLE_IN_ALL 206 gboolean gtk_source_buffer_backward_iter_to_source_mark (GtkSourceBuffer *buffer, 207 GtkTextIter *iter, 208 const gchar *category); 209 210 GTK_SOURCE_AVAILABLE_IN_ALL 211 GSList *gtk_source_buffer_get_source_marks_at_iter (GtkSourceBuffer *buffer, 212 GtkTextIter *iter, 213 const gchar *category); 214 215 GTK_SOURCE_AVAILABLE_IN_ALL 216 GSList *gtk_source_buffer_get_source_marks_at_line (GtkSourceBuffer *buffer, 217 gint line, 218 const gchar *category); 219 220 GTK_SOURCE_AVAILABLE_IN_ALL 221 void gtk_source_buffer_remove_source_marks (GtkSourceBuffer *buffer, 222 const GtkTextIter *start, 223 const GtkTextIter *end, 224 const gchar *category); 225 226 GTK_SOURCE_AVAILABLE_IN_ALL 227 gboolean gtk_source_buffer_iter_has_context_class (GtkSourceBuffer *buffer, 228 const GtkTextIter *iter, 229 const gchar *context_class); 230 231 GTK_SOURCE_AVAILABLE_IN_ALL 232 gchar **gtk_source_buffer_get_context_classes_at_iter (GtkSourceBuffer *buffer, 233 const GtkTextIter *iter); 234 235 GTK_SOURCE_AVAILABLE_IN_ALL 236 gboolean gtk_source_buffer_iter_forward_to_context_class_toggle (GtkSourceBuffer *buffer, 237 GtkTextIter *iter, 238 const gchar *context_class); 239 240 GTK_SOURCE_AVAILABLE_IN_ALL 241 gboolean gtk_source_buffer_iter_backward_to_context_class_toggle 242 (GtkSourceBuffer *buffer, 243 GtkTextIter *iter, 244 const gchar *context_class); 245 246 GTK_SOURCE_AVAILABLE_IN_3_12 247 void gtk_source_buffer_change_case (GtkSourceBuffer *buffer, 248 GtkSourceChangeCaseType case_type, 249 GtkTextIter *start, 250 GtkTextIter *end); 251 252 GTK_SOURCE_AVAILABLE_IN_3_16 253 void gtk_source_buffer_join_lines (GtkSourceBuffer *buffer, 254 GtkTextIter *start, 255 GtkTextIter *end); 256 257 GTK_SOURCE_AVAILABLE_IN_3_18 258 void gtk_source_buffer_sort_lines (GtkSourceBuffer *buffer, 259 GtkTextIter *start, 260 GtkTextIter *end, 261 GtkSourceSortFlags flags, 262 gint column); 263 264 GTK_SOURCE_AVAILABLE_IN_ALL 265 GtkSourceUndoManager *gtk_source_buffer_get_undo_manager (GtkSourceBuffer *buffer); 266 267 GTK_SOURCE_AVAILABLE_IN_ALL 268 void gtk_source_buffer_set_undo_manager (GtkSourceBuffer *buffer, 269 GtkSourceUndoManager *manager); 270 271 GTK_SOURCE_AVAILABLE_IN_3_14 272 void gtk_source_buffer_set_implicit_trailing_newline (GtkSourceBuffer *buffer, 273 gboolean implicit_trailing_newline); 274 275 GTK_SOURCE_AVAILABLE_IN_3_14 276 gboolean gtk_source_buffer_get_implicit_trailing_newline (GtkSourceBuffer *buffer); 277 278 GTK_SOURCE_AVAILABLE_IN_ALL 279 GtkTextTag *gtk_source_buffer_create_source_tag (GtkSourceBuffer *buffer, 280 const gchar *tag_name, 281 const gchar *first_property_name, 282 ...); 283 284 G_END_DECLS 285 286 #endif /* GTK_SOURCE_BUFFER_H */ 287