void sc_speller_check_document(GeanyDocument *doc) { gint i; gint first_line, last_line; gchar *dict_string = NULL; gint suggestions_found = 0; g_return_if_fail(sc_speller_dict != NULL); g_return_if_fail(doc != NULL); ui_progress_bar_start(_("Checking")); enchant_dict_describe(sc_speller_dict, dict_describe, &dict_string); if (sci_has_selection(doc->editor->sci)) { first_line = sci_get_line_from_position( doc->editor->sci, sci_get_selection_start(doc->editor->sci)); last_line = sci_get_line_from_position( doc->editor->sci, sci_get_selection_end(doc->editor->sci)); if (sc_info->use_msgwin) msgwin_msg_add(COLOR_BLUE, -1, NULL, _("Checking file \"%s\" (lines %d to %d using %s):"), DOC_FILENAME(doc), first_line + 1, last_line + 1, dict_string); g_message("Checking file \"%s\" (lines %d to %d using %s):", DOC_FILENAME(doc), first_line + 1, last_line + 1, dict_string); } else { first_line = 0; last_line = sci_get_line_count(doc->editor->sci); if (sc_info->use_msgwin) msgwin_msg_add(COLOR_BLUE, -1, NULL, _("Checking file \"%s\" (using %s):"), DOC_FILENAME(doc), dict_string); g_message("Checking file \"%s\" (using %s):", DOC_FILENAME(doc), dict_string); } g_free(dict_string); if (first_line == last_line) { suggestions_found += sc_speller_process_line(doc, first_line); } else { for (i = first_line; i < last_line; i++) { suggestions_found += sc_speller_process_line(doc, i); /* process other GTK events to keep the GUI being responsive */ while (g_main_context_iteration(NULL, FALSE)); } } if (suggestions_found == 0 && sc_info->use_msgwin) msgwin_msg_add(COLOR_BLUE, -1, NULL, _("The checked text is spelled correctly.")); ui_progress_bar_stop(); }
static void insert_numbers(gboolean *cancel) { /* editor */ ScintillaObject *sci = document_get_current()->editor->sci; gint xinsert = sci_point_x_from_position(sci, start_pos); gint xend = sci_point_x_from_position(sci, end_pos); gint *line_pos = g_new(gint, end_line - start_line + 1); gint line, i; /* generator */ gint64 start = start_value; gint64 value; unsigned count = 0; size_t prefix_len = 0; int plus = 0, minus; size_t length, lend; char pad, aax; gchar *buffer; if (xend < xinsert) xinsert = xend; ui_progress_bar_start(_("Counting...")); /* lines shorter than the current selection are skipped */ for (line = start_line, i = 0; line <= end_line; line++, i++) { if (sci_point_x_from_position(sci, scintilla_send_message(sci, SCI_GETLINEENDPOSITION, line, 0)) >= xinsert) { line_pos[i] = sci_get_pos_at_line_sel_start(sci, line) - sci_get_position_from_line(sci, line); count++; } else line_pos[i] = -1; if (cancel && i % 2500 == 0) { update_display(); if (*cancel) { ui_progress_bar_stop(); g_free(line_pos); return; } } } switch (base_value * base_prefix) { case 8 : prefix_len = 1; break; case 16 : prefix_len = 2; break; case 10 : plus++; } value = start + (count - 1) * step_value; minus = start < 0 || value < 0; lend = plus || (pad_zeros ? minus : value < 0); while (value /= base_value) lend++; value = start; length = plus || (pad_zeros ? minus : value < 0); while (value /= base_value) length++; length = prefix_len + (length > lend ? length : lend) + 1; buffer = g_new(gchar, length + 1); buffer[length] = '\0'; pad = pad_zeros ? '0' : ' '; aax = (lower_case ? 'a' : 'A') - 10; gtk_progress_bar_set_text(GTK_PROGRESS_BAR(geany->main_widgets->progressbar), _("Preparing...")); update_display(); sci_start_undo_action(sci); sci_replace_sel(sci, ""); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(geany->main_widgets->progressbar), _("Inserting...")); for (line = start_line, i = 0; line <= end_line; line++, i++) { gchar *beg, *end; gint insert_pos; if (line_pos[i] < 0) continue; beg = buffer; end = buffer + length; value = ABS(start); do { unsigned digit = value % base_value; *--end = digit + (digit < 10 ? '0' : aax); } while (value /= base_value); if (pad_zeros) { if (start < 0) *beg++ = '-'; else if (plus) *beg++ = '+'; else if (minus) *beg++ = ' '; memcpy(beg, "0x", prefix_len); beg += prefix_len; } else { if (start < 0) *--end = '-'; else if (plus) *--end = '+'; end -= prefix_len; memcpy(end, "0x", prefix_len); } memset(beg, pad, end - beg); insert_pos = sci_get_position_from_line(sci, line) + line_pos[i]; sci_insert_text(sci, insert_pos, buffer); start += step_value; if (cancel && i % 1000 == 0) { update_display(); if (*cancel) { scintilla_send_message(sci, SCI_GOTOPOS, insert_pos + length, 0); break; } } } sci_end_undo_action(sci); g_free(buffer); g_free(line_pos); ui_progress_bar_stop(); }