1 /* 2 * pluma-document.h 3 * This file is part of pluma 4 * 5 * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence 6 * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi 7 * Copyright (C) 2002-2005 Paolo Maggi 8 * Copyright (C) 2012-2021 MATE Developers 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin St, Fifth Floor, 23 * Boston, MA 02110-1301, USA. 24 */ 25 26 /* 27 * Modified by the pluma Team, 1998-2005. See the AUTHORS file for a 28 * list of people on the pluma Team. 29 * See the ChangeLog files for a list of changes. 30 * 31 * $Id$ 32 */ 33 34 #ifndef __PLUMA_DOCUMENT_H__ 35 #define __PLUMA_DOCUMENT_H__ 36 37 #include <gio/gio.h> 38 #include <gtk/gtk.h> 39 #include <gtksourceview/gtksource.h> 40 41 #include <pluma/pluma-encodings.h> 42 43 G_BEGIN_DECLS 44 45 /* 46 * Type checking and casting macros 47 */ 48 #define PLUMA_TYPE_DOCUMENT (pluma_document_get_type()) 49 #define PLUMA_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PLUMA_TYPE_DOCUMENT, PlumaDocument)) 50 #define PLUMA_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PLUMA_TYPE_DOCUMENT, PlumaDocumentClass)) 51 #define PLUMA_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PLUMA_TYPE_DOCUMENT)) 52 #define PLUMA_IS_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PLUMA_TYPE_DOCUMENT)) 53 #define PLUMA_DOCUMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PLUMA_TYPE_DOCUMENT, PlumaDocumentClass)) 54 55 #define PLUMA_METADATA_ATTRIBUTE_POSITION "metadata::pluma-position" 56 #define PLUMA_METADATA_ATTRIBUTE_ENCODING "metadata::pluma-encoding" 57 #define PLUMA_METADATA_ATTRIBUTE_LANGUAGE "metadata::pluma-language" 58 59 typedef enum 60 { 61 PLUMA_DOCUMENT_NEWLINE_TYPE_LF, 62 PLUMA_DOCUMENT_NEWLINE_TYPE_CR, 63 PLUMA_DOCUMENT_NEWLINE_TYPE_CR_LF 64 } PlumaDocumentNewlineType; 65 66 #define PLUMA_DOCUMENT_NEWLINE_TYPE_DEFAULT PLUMA_DOCUMENT_NEWLINE_TYPE_LF 67 68 typedef enum 69 { 70 PLUMA_SEARCH_DONT_SET_FLAGS = 1 << 0, 71 PLUMA_SEARCH_ENTIRE_WORD = 1 << 1, 72 PLUMA_SEARCH_CASE_SENSITIVE = 1 << 2, 73 PLUMA_SEARCH_PARSE_ESCAPES = 1 << 3, 74 PLUMA_SEARCH_MATCH_REGEX = 1 << 4, 75 76 } PlumaSearchFlags; 77 78 /** 79 * PlumaDocumentSaveFlags: 80 * @PLUMA_DOCUMENT_SAVE_IGNORE_MTIME: save file despite external modifications. 81 * @PLUMA_DOCUMENT_SAVE_IGNORE_BACKUP: write the file directly without attempting to backup. 82 * @PLUMA_DOCUMENT_SAVE_PRESERVE_BACKUP: preserve previous backup file, needed to support autosaving. 83 */ 84 typedef enum 85 { 86 PLUMA_DOCUMENT_SAVE_IGNORE_MTIME = 1 << 0, 87 PLUMA_DOCUMENT_SAVE_IGNORE_BACKUP = 1 << 1, 88 PLUMA_DOCUMENT_SAVE_PRESERVE_BACKUP = 1 << 2 89 } PlumaDocumentSaveFlags; 90 91 /* Private structure type */ 92 typedef struct _PlumaDocumentPrivate PlumaDocumentPrivate; 93 94 /* 95 * Main object structure 96 */ 97 typedef struct _PlumaDocument PlumaDocument; 98 99 struct _PlumaDocument 100 { 101 GtkSourceBuffer buffer; 102 103 /*< private > */ 104 PlumaDocumentPrivate *priv; 105 }; 106 107 /* 108 * Class definition 109 */ 110 typedef struct _PlumaDocumentClass PlumaDocumentClass; 111 112 struct _PlumaDocumentClass 113 { 114 GtkSourceBufferClass parent_class; 115 116 /* Signals */ // CHECK: ancora da rivedere 117 118 void (* cursor_moved) (PlumaDocument *document); 119 120 /* Document load */ 121 void (* load) (PlumaDocument *document, 122 const gchar *uri, 123 const PlumaEncoding *encoding, 124 gint line_pos, 125 gboolean create); 126 127 void (* loading) (PlumaDocument *document, 128 goffset size, 129 goffset total_size); 130 131 void (* loaded) (PlumaDocument *document, 132 const GError *error); 133 134 /* Document save */ 135 void (* save) (PlumaDocument *document, 136 const gchar *uri, 137 const PlumaEncoding *encoding, 138 PlumaDocumentSaveFlags flags); 139 140 void (* saving) (PlumaDocument *document, 141 goffset size, 142 goffset total_size); 143 144 void (* saved) (PlumaDocument *document, 145 const GError *error); 146 147 void (* search_highlight_updated) 148 (PlumaDocument *document, 149 GtkTextIter *start, 150 GtkTextIter *end); 151 }; 152 153 154 #define PLUMA_DOCUMENT_ERROR pluma_document_error_quark () 155 156 enum 157 { 158 PLUMA_DOCUMENT_ERROR_EXTERNALLY_MODIFIED, 159 PLUMA_DOCUMENT_ERROR_CANT_CREATE_BACKUP, 160 PLUMA_DOCUMENT_ERROR_TOO_BIG, 161 PLUMA_DOCUMENT_ERROR_ENCODING_AUTO_DETECTION_FAILED, 162 PLUMA_DOCUMENT_ERROR_CONVERSION_FALLBACK, 163 PLUMA_DOCUMENT_NUM_ERRORS 164 }; 165 166 GQuark pluma_document_error_quark (void); 167 168 GType pluma_document_get_type (void) G_GNUC_CONST; 169 170 PlumaDocument *pluma_document_new (void); 171 172 GFile *pluma_document_get_location (PlumaDocument *doc); 173 174 gchar *pluma_document_get_uri (PlumaDocument *doc); 175 void pluma_document_set_uri (PlumaDocument *doc, 176 const gchar *uri); 177 178 gchar *pluma_document_get_uri_for_display 179 (PlumaDocument *doc); 180 gchar *pluma_document_get_short_name_for_display 181 (PlumaDocument *doc); 182 183 void pluma_document_set_short_name_for_display 184 (PlumaDocument *doc, 185 const gchar *name); 186 187 gchar *pluma_document_get_content_type 188 (PlumaDocument *doc); 189 190 void pluma_document_set_content_type 191 (PlumaDocument *doc, 192 const gchar *content_type); 193 194 gchar *pluma_document_get_mime_type (PlumaDocument *doc); 195 196 gboolean pluma_document_get_readonly (PlumaDocument *doc); 197 198 void pluma_document_load (PlumaDocument *doc, 199 const gchar *uri, 200 const PlumaEncoding *encoding, 201 gint line_pos, 202 gboolean create); 203 204 gboolean pluma_document_insert_file (PlumaDocument *doc, 205 GtkTextIter *iter, 206 const gchar *uri, 207 const PlumaEncoding *encoding); 208 209 gboolean pluma_document_load_cancel (PlumaDocument *doc); 210 211 void pluma_document_save (PlumaDocument *doc, 212 PlumaDocumentSaveFlags flags); 213 214 void pluma_document_save_as (PlumaDocument *doc, 215 const gchar *uri, 216 const PlumaEncoding *encoding, 217 PlumaDocumentSaveFlags flags); 218 219 gboolean pluma_document_is_untouched (PlumaDocument *doc); 220 gboolean pluma_document_is_untitled (PlumaDocument *doc); 221 222 gboolean pluma_document_is_local (PlumaDocument *doc); 223 224 gboolean pluma_document_get_deleted (PlumaDocument *doc); 225 226 gboolean pluma_document_goto_line (PlumaDocument *doc, 227 gint line); 228 229 gboolean pluma_document_goto_line_offset(PlumaDocument *doc, 230 gint line, 231 gint line_offset); 232 233 void pluma_document_set_search_text (PlumaDocument *doc, 234 const gchar *text, 235 guint flags); 236 237 gchar *pluma_document_get_search_text (PlumaDocument *doc, 238 guint *flags); 239 240 gchar *pluma_document_get_last_replace_text 241 (PlumaDocument *doc); 242 243 void pluma_document_set_last_replace_text 244 (PlumaDocument *doc, 245 const gchar *text); 246 247 gboolean pluma_document_get_can_search_again 248 (PlumaDocument *doc); 249 250 gboolean pluma_document_search_forward (PlumaDocument *doc, 251 const GtkTextIter *start, 252 const GtkTextIter *end, 253 GtkTextIter *match_start, 254 GtkTextIter *match_end); 255 256 gboolean pluma_document_search_backward (PlumaDocument *doc, 257 const GtkTextIter *start, 258 const GtkTextIter *end, 259 GtkTextIter *match_start, 260 GtkTextIter *match_end); 261 262 gint pluma_document_replace_all (PlumaDocument *doc, 263 const gchar *find, 264 const gchar *replace, 265 guint flags); 266 267 void pluma_document_set_language (PlumaDocument *doc, 268 GtkSourceLanguage *lang); 269 GtkSourceLanguage 270 *pluma_document_get_language (PlumaDocument *doc); 271 272 const PlumaEncoding 273 *pluma_document_get_encoding (PlumaDocument *doc); 274 275 void pluma_document_set_enable_search_highlighting 276 (PlumaDocument *doc, 277 gboolean enable); 278 279 gboolean pluma_document_get_enable_search_highlighting 280 (PlumaDocument *doc); 281 282 void pluma_document_set_newline_type (PlumaDocument *doc, 283 PlumaDocumentNewlineType newline_type); 284 285 PlumaDocumentNewlineType 286 pluma_document_get_newline_type (PlumaDocument *doc); 287 288 gchar *pluma_document_get_metadata (PlumaDocument *doc, 289 const gchar *key); 290 291 void pluma_document_set_metadata (PlumaDocument *doc, 292 const gchar *first_key, 293 ...); 294 295 /* 296 * Non exported functions 297 */ 298 void _pluma_document_set_readonly (PlumaDocument *doc, 299 gboolean readonly); 300 301 glong _pluma_document_get_seconds_since_last_save_or_load 302 (PlumaDocument *doc); 303 304 /* Note: this is a sync stat: use only on local files */ 305 gboolean _pluma_document_check_externally_modified 306 (PlumaDocument *doc); 307 308 void _pluma_document_search_region (PlumaDocument *doc, 309 const GtkTextIter *start, 310 const GtkTextIter *end); 311 312 /* Search macros */ 313 #define PLUMA_SEARCH_IS_DONT_SET_FLAGS(sflags) ((sflags & PLUMA_SEARCH_DONT_SET_FLAGS) != 0) 314 #define PLUMA_SEARCH_SET_DONT_SET_FLAGS(sflags,state) ((state == TRUE) ? \ 315 (sflags |= PLUMA_SEARCH_DONT_SET_FLAGS) : (sflags &= ~PLUMA_SEARCH_DONT_SET_FLAGS)) 316 317 #define PLUMA_SEARCH_IS_ENTIRE_WORD(sflags) ((sflags & PLUMA_SEARCH_ENTIRE_WORD) != 0) 318 #define PLUMA_SEARCH_SET_ENTIRE_WORD(sflags,state) ((state == TRUE) ? \ 319 (sflags |= PLUMA_SEARCH_ENTIRE_WORD) : (sflags &= ~PLUMA_SEARCH_ENTIRE_WORD)) 320 321 #define PLUMA_SEARCH_IS_CASE_SENSITIVE(sflags) ((sflags & PLUMA_SEARCH_CASE_SENSITIVE) != 0) 322 #define PLUMA_SEARCH_SET_CASE_SENSITIVE(sflags,state) ((state == TRUE) ? \ 323 (sflags |= PLUMA_SEARCH_CASE_SENSITIVE) : (sflags &= ~PLUMA_SEARCH_CASE_SENSITIVE)) 324 325 #define PLUMA_SEARCH_IS_PARSE_ESCAPES(sflags) ((sflags & PLUMA_SEARCH_PARSE_ESCAPES) != 0) 326 #define PLUMA_SEARCH_SET_PARSE_ESCAPES(sflags,state) ((state == TRUE) ? \ 327 (sflags |= PLUMA_SEARCH_PARSE_ESCAPES) : (sflags &= ~PLUMA_SEARCH_PARSE_ESCAPES)) 328 329 #define PLUMA_SEARCH_IS_MATCH_REGEX(sflags) ((sflags & PLUMA_SEARCH_MATCH_REGEX) != 0) 330 #define PLUMA_SEARCH_SET_MATCH_REGEX(sflags,state) ((state == TRUE) ? \ 331 (sflags |= PLUMA_SEARCH_MATCH_REGEX) : (sflags &= ~PLUMA_SEARCH_MATCH_REGEX)) 332 333 334 typedef GMountOperation *(*PlumaMountOperationFactory)(PlumaDocument *doc, 335 gpointer userdata); 336 337 void _pluma_document_set_mount_operation_factory 338 (PlumaDocument *doc, 339 PlumaMountOperationFactory callback, 340 gpointer userdata); 341 GMountOperation 342 *_pluma_document_create_mount_operation 343 (PlumaDocument *doc); 344 345 G_END_DECLS 346 347 #endif /* __PLUMA_DOCUMENT_H__ */ 348