static void linkify_cb (GtkTextBuffer *buf, GRegex *regex) { gchar *text; GtkTextIter start, end; GMatchInfo *match; gtk_text_buffer_get_bounds (buf, &start, &end); text = gtk_text_buffer_get_text (buf, &start, &end, FALSE); gtk_text_buffer_remove_all_tags (buf, &start, &end); if (g_regex_match (regex, text, G_REGEX_MATCH_NOTEMPTY, &match)) { do { gint sp, ep, spos, epos; g_match_info_fetch_pos (match, 0, &sp, &ep); /* positions are in bytes, not character, so here we must normalize it*/ spos = g_utf8_pointer_to_offset (text, text + sp); epos = g_utf8_pointer_to_offset (text, text + ep); gtk_text_buffer_get_iter_at_offset (buf, &start, spos); gtk_text_buffer_get_iter_at_offset (buf, &end, epos); gtk_text_buffer_apply_tag (buf, tag, &start, &end); } while (g_match_info_next (match, NULL)); } g_match_info_free (match); g_free(text); }
// On Windows, when tags are applied, 38% of CPU time is used for // seven oovBuilder source modules open. This is true even though the // applyTags function is not normally running while idle. When only half // the tags for each file is applied, then it drops to 25% usage. bool Highlighter::applyTags(GtkTextBuffer *textBuffer, int topOffset, int botOffset) { DUMP_THREAD("applyTags"); mHighlightTags.initTags(textBuffer); const TokenRange &tokens = mHighlightTokens; if(mTokenState != TS_HighlightRequest) { if(mTokenState == TS_GotTokens) { mTokenState = TS_AppliedTokens; } GtkTextIter start; GtkTextIter end; gtk_text_buffer_get_bounds(textBuffer, &start, &end); gtk_text_buffer_remove_all_tags(textBuffer, &start, &end); for(size_t i=0; i<tokens.size(); i++) { if(isBetween(tokens[i].mStartOffset, topOffset, botOffset) || isBetween(tokens[i].mEndOffset, topOffset, botOffset) || isBetween(topOffset, tokens[i].mStartOffset, tokens[i].mEndOffset)) { gtk_text_buffer_get_iter_at_offset(textBuffer, &start, static_cast<gint>(tokens[i].mStartOffset)); gtk_text_buffer_get_iter_at_offset(textBuffer, &end, static_cast<gint>(tokens[i].mEndOffset)); gtk_text_buffer_apply_tag(textBuffer, mHighlightTags.getTag(tokens[i].mTokenKind), &start, &end); } } } DUMP_THREAD("applyTags-end"); return(mTokenState == TS_AppliedTokens); }
void utl_gui_text_buffer_remove_all_tags (GtkTextBuffer *buffer) { GtkTextIter start, end; gtk_text_buffer_get_bounds (buffer, &start, &end); gtk_text_buffer_remove_all_tags (buffer, &start, &end); }
/** * \fn void lexical_coloration_off(BrailleMusicEditor *editor) * \brief This function removes the lexical highlighting. * \param editor The GUI structure. */ void lexical_coloration_off(BrailleMusicEditor *editor) { GtkTextIter start, end; GtkTextBuffer *buffer; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(editor->textview)); gtk_text_buffer_get_start_iter(buffer, &start); gtk_text_buffer_get_end_iter(buffer, &end); gtk_text_buffer_remove_all_tags(buffer, &start, &end); }
/** * \fn void color(BrailleMusicEditor *editor) * \brief This function color the differents types of braille music notations * in the textview. * \param editor The GUI structure. * * This function will color the diffrents types of braille music notations present in text. */ void color(BrailleMusicEditor *editor) { GtkTextIter start, end; GtkTextIter start_match, end_match, start_match2, start_match3; GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(editor->textview)); gtk_text_buffer_get_start_iter(buffer, &start); gtk_text_buffer_get_end_iter(buffer, &end); gtk_text_buffer_get_start_iter(buffer, &start_match); gtk_text_buffer_get_start_iter(buffer, &end_match); set_tags(buffer); init_braille_table(); do { gtk_text_iter_forward_chars(&end_match, 1); gchar *c = gtk_text_iter_get_slice(&start_match, &end_match); start_match2 = start_match; gtk_text_iter_backward_chars(&start_match2, 1); gchar *c2 = gtk_text_iter_get_slice(&start_match2, &end_match); start_match3 = start_match2; gtk_text_iter_backward_chars(&start_match3, 1); gchar *c3 = gtk_text_iter_get_slice(&start_match3, &end_match); gchar *type; if((type = g_hash_table_lookup(braille_table, c3)) != NULL) { gtk_text_buffer_remove_all_tags(buffer, &start_match3, &end_match); gtk_text_buffer_apply_tag_by_name(buffer, type, &start_match3, &end_match); } else if((type = g_hash_table_lookup(braille_table, c2)) != NULL) { gtk_text_buffer_remove_all_tags(buffer, &start_match2, &end_match); gtk_text_buffer_apply_tag_by_name(buffer, type, &start_match2, &end_match); } else if((type = g_hash_table_lookup(braille_table, c)) != NULL) { gtk_text_buffer_apply_tag_by_name(buffer, type, &start_match, &end_match); } } while(gtk_text_iter_forward_chars(&start_match, 1)); }
/* Remove all of the tags from the selected text. */ static void clear_clicked (GtkButton *button, GtkTextView *textview) { GtkTextIter start, end; GtkTextBuffer *buffer; buffer = gtk_text_view_get_buffer (textview); gtk_text_buffer_get_selection_bounds (buffer, &start, &end); gtk_text_buffer_remove_all_tags (buffer, &start, &end); }
static void cb_changed(GtkTextBuffer *buffer) { GtkTextIter start, end; gtk_text_buffer_get_bounds(buffer, &start, &end); // gtk_text_buffer_remove_tag_by_name(buffer, // "searched", &start, &end); gtk_text_buffer_remove_all_tags(buffer, &start, &end); g_signal_handlers_block_by_func(G_OBJECT(buffer), G_CALLBACK(cb_changed), NULL); searched_flag = FALSE; }
static void css_text_changed (GtkTextBuffer *buffer, GtkCssProvider *provider) { GtkTextIter start, end; char *text; gtk_text_buffer_get_start_iter (buffer, &start); gtk_text_buffer_get_end_iter (buffer, &end); gtk_text_buffer_remove_all_tags (buffer, &start, &end); text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); gtk_css_provider_load_from_data (provider, text, -1); g_free (text); }
/* TODO: Move to ConboyNoteBuffer */ void note_format_title(GtkTextBuffer *buffer) { GtkTextIter start, end; /* Set end iter depending on if we have one or more lines */ if (gtk_text_buffer_get_line_count(buffer) == 1) { gtk_text_buffer_get_end_iter(buffer, &end); } else { gtk_text_buffer_get_iter_at_line(buffer, &end, 1); gtk_text_iter_backward_char(&end); } /* Set start iter, remove all tags and add _title tags */ gtk_text_buffer_get_start_iter(buffer, &start); gtk_text_buffer_remove_all_tags(buffer, &start, &end); gtk_text_buffer_apply_tag_by_name(buffer, "_title", &start, &end); }
static void css_text_changed (GtkTextBuffer *buffer, GtkCssProvider *provider) { GtkTextIter start, end; char *text; gtk_text_buffer_get_start_iter (buffer, &start); gtk_text_buffer_get_end_iter (buffer, &end); gtk_text_buffer_remove_all_tags (buffer, &start, &end); text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); gtk_css_provider_load_from_data (provider, text, -1, NULL); g_free (text); gtk_style_context_reset_widgets (gdk_screen_get_default ()); }
static void gimp_text_style_editor_clear_tags (GtkButton *button, GimpTextStyleEditor *editor) { GtkTextBuffer *buffer = GTK_TEXT_BUFFER (editor->buffer); if (gtk_text_buffer_get_has_selection (buffer)) { GtkTextIter start, end; gtk_text_buffer_get_selection_bounds (buffer, &start, &end); gtk_text_buffer_begin_user_action (buffer); gtk_text_buffer_remove_all_tags (buffer, &start, &end); gtk_text_buffer_end_user_action (buffer); } }
void EditorActionChangeParagraphStyle::set_style (const ustring& style) { // Define the work area. GtkTextIter startiter; gtk_text_buffer_get_start_iter (paragraph->textbuffer, &startiter); GtkTextIter enditer; gtk_text_buffer_get_end_iter (paragraph->textbuffer, &enditer); // Apply the style in such a way that the paragraph style is always applied first, // then after that the character styles. vector <ustring> current_character_styles = get_character_styles_between_iterators (startiter, enditer); gtk_text_buffer_remove_all_tags (paragraph->textbuffer, &startiter, &enditer); gtk_text_buffer_apply_tag_by_name (paragraph->textbuffer, style.c_str(), &startiter, &enditer); for (unsigned int i = 0; i < current_character_styles.size(); i++) { if (!current_character_styles[i].empty()) { gtk_text_buffer_get_iter_at_offset (paragraph->textbuffer, &startiter, i); enditer = startiter; gtk_text_iter_forward_char (&enditer); gtk_text_buffer_apply_tag_by_name (paragraph->textbuffer, current_character_styles[i].c_str(), &startiter, &enditer); } } }
static gboolean hlight_searched_strings(GtkTextBuffer *buffer, gchar *str) { GtkTextIter iter, start, end; gboolean res, retval = FALSE; GtkSourceSearchFlags search_flags = GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_TEXT_ONLY; if (!string_find) return FALSE; if (!match_case) search_flags = search_flags | GTK_SOURCE_SEARCH_CASE_INSENSITIVE; gtk_text_buffer_get_bounds(buffer, &start, &end); /* gtk_text_buffer_remove_tag_by_name(buffer, "searched", &start, &end); gtk_text_buffer_remove_tag_by_name(buffer, "replaced", &start, &end); */ gtk_text_buffer_remove_all_tags(buffer, &start, &end); iter = start; do { res = gtk_source_iter_forward_search( &iter, str, search_flags, &start, &end, NULL); if (res) { retval = TRUE; gtk_text_buffer_apply_tag_by_name(buffer, "searched", &start, &end); // replace_mode ? "replaced" : "searched", &start, &end); iter = end; } } while (res); /* if (replace_mode) replace_mode = FALSE; else */ hlight_toggle_searched(buffer); return retval; }
static void text_deleted_cb (GbColorPickerDocumentMonitor *self, GtkTextIter *begin, GtkTextIter *end, GtkTextBuffer *buffer) { GtkTextIter recolor_begin; GtkTextIter recolor_end; Position spos; Position epos; g_assert (GB_IS_COLOR_PICKER_DOCUMENT_MONITOR (self)); g_assert (GTK_IS_TEXT_BUFFER (buffer)); position_save (&spos, begin); position_save (&epos, end); self->remove_tag_handler_id = g_signal_connect_object (GTK_TEXT_BUFFER (self->buffer), "remove-tag", G_CALLBACK (remove_tag_cb), self, G_CONNECT_SWAPPED | G_CONNECT_AFTER); recolor_begin = *begin; gtk_text_iter_set_line_offset (&recolor_begin, 0); recolor_end = *end; if (!gtk_text_iter_ends_line (&recolor_end)) gtk_text_iter_forward_to_line_end (&recolor_end); /* FIXME: we only need to remove color tag */ gtk_text_buffer_remove_all_tags (buffer, &recolor_begin, &recolor_end); g_signal_handler_disconnect (GTK_TEXT_BUFFER (self->buffer), self->remove_tag_handler_id); position_restore (&spos, buffer, begin); position_restore (&epos, buffer, end); }
static gint document_replace_real(GtkWidget *textview) { GtkTextIter iter, match_start, match_end, rep_start; GtkTextMark *mark_init = NULL; gboolean res; gint num = 0, offset; GtkWidget *q_dialog = NULL; GtkSourceSearchFlags search_flags = GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_TEXT_ONLY; GtkTextBuffer *textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); if (!match_case) search_flags = search_flags | GTK_SOURCE_SEARCH_CASE_INSENSITIVE; if (replace_all) { gtk_text_buffer_get_iter_at_mark(textbuffer, &iter, gtk_text_buffer_get_insert(textbuffer)); mark_init = gtk_text_buffer_create_mark(textbuffer, NULL, &iter, FALSE); gtk_text_buffer_get_start_iter(textbuffer, &iter); gtk_text_buffer_get_end_iter(textbuffer, &match_end); // gtk_text_buffer_remove_tag_by_name(textbuffer, // "replaced", &iter, &match_end); gtk_text_buffer_remove_all_tags(textbuffer, &iter, &match_end); } else { hlight_searched_strings(textbuffer, string_find); hlight_toggle_searched(textbuffer); } do { if (replace_all) { res = gtk_source_iter_forward_search( &iter, string_find, search_flags, &match_start, &match_end, NULL); if (res) { gtk_text_buffer_place_cursor(textbuffer, &match_start); gtk_text_buffer_move_mark_by_name(textbuffer, "insert", &match_end); gtk_text_buffer_get_iter_at_mark( textbuffer, &iter, gtk_text_buffer_get_insert(textbuffer)); } } else // res = document_search_real(textview, 0); res = document_search_real(textview, 2); if (res) { if (!replace_all) { if (num == 0 && q_dialog == NULL) q_dialog = create_dialog_message_question( gtk_widget_get_toplevel(textview), _("Replace?")); #if GTK_CHECK_VERSION(2, 10, 0) GtkTextIter ins,bou; gtk_text_buffer_get_selection_bounds(textbuffer, &ins, &bou); #endif switch (gtk_dialog_run(GTK_DIALOG(q_dialog))) { case GTK_RESPONSE_YES: #if GTK_CHECK_VERSION(2, 10, 0) gtk_text_buffer_select_range(textbuffer, &ins, &bou); #endif break; case GTK_RESPONSE_NO: continue; // case GTK_RESPONSE_CANCEL: default: res = 0; if (num == 0) num = -1; continue; } } gtk_text_buffer_delete_selection(textbuffer, TRUE, TRUE); if (strlen(string_replace)) { gtk_text_buffer_get_iter_at_mark( textbuffer, &rep_start, gtk_text_buffer_get_insert(textbuffer)); offset = gtk_text_iter_get_offset(&rep_start); undo_set_sequency(TRUE); g_signal_emit_by_name(G_OBJECT(textbuffer), "begin-user-action"); gtk_text_buffer_insert_at_cursor(textbuffer, string_replace, strlen(string_replace)); g_signal_emit_by_name(G_OBJECT(textbuffer), "end-user-action"); gtk_text_buffer_get_iter_at_mark( textbuffer, &iter, gtk_text_buffer_get_insert(textbuffer)); gtk_text_buffer_get_iter_at_offset(textbuffer, &rep_start, offset); gtk_text_buffer_apply_tag_by_name(textbuffer, "replaced", &rep_start, &iter); } else gtk_text_buffer_get_iter_at_mark( textbuffer, &iter, gtk_text_buffer_get_insert(textbuffer)); num++; /* if (replace_all) undo_set_sequency(TRUE); else undo_set_sequency(FALSE);*/ undo_set_sequency(replace_all); } } while (res); if (!hlight_check_searched()) hlight_toggle_searched(textbuffer); if (q_dialog) gtk_widget_destroy(q_dialog); /* if (strlen(string_replace)) { replace_mode = TRUE; hlight_searched_strings(textbuffer, string_replace); } */ if (replace_all) { gtk_text_buffer_get_iter_at_mark(textbuffer, &iter, mark_init); gtk_text_buffer_place_cursor(textbuffer, &iter); run_dialog_message(gtk_widget_get_toplevel(textview), GTK_MESSAGE_INFO, _("%d strings replaced"), num); undo_set_sequency(FALSE); } return num; }