Revision: 252 http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=252&view=rev Author: eht16 Date: 2008-10-25 15:33:03 +0000 (Sat, 25 Oct 2008)
Log Message: ----------- When adding words to the dictionary, remove all indicators on these words.
Modified Paths: -------------- trunk/spellcheck/ChangeLog trunk/spellcheck/src/gui.c
Modified: trunk/spellcheck/ChangeLog =================================================================== --- trunk/spellcheck/ChangeLog 2008-10-25 09:30:25 UTC (rev 251) +++ trunk/spellcheck/ChangeLog 2008-10-25 15:33:03 UTC (rev 252) @@ -7,6 +7,8 @@ * src/gui.c: Ignore numbers when updating the editor menu. Rename the editor menu item to 'Spelling Suggestions'. + When adding words to the dictionary, remove all indicators on + these words.
2008-10-17 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/spellcheck/src/gui.c =================================================================== --- trunk/spellcheck/src/gui.c 2008-10-25 09:30:25 UTC (rev 251) +++ trunk/spellcheck/src/gui.c 2008-10-25 15:33:03 UTC (rev 252) @@ -27,6 +27,7 @@ #include "support.h"
#include <ctype.h> +#include <string.h>
#include "plugindata.h"
@@ -111,17 +112,6 @@ }
-static void clear_indicators_on_range(GeanyDocument *doc, gint start, gint len) -{ - g_return_if_fail(doc != NULL); - - if (len > 0) - { - p_sci->indicator_clear(doc->editor->sci, start, start + len); - } -} - - static void clear_indicators_on_line(GeanyDocument *doc, gint line_number) { gint start_pos, length; @@ -131,7 +121,7 @@ start_pos = p_sci->get_position_from_line(doc->editor->sci, line_number); length = p_sci->get_line_length(doc->editor->sci, line_number);
- clear_indicators_on_range(doc, start_pos, length); + p_sci->indicator_clear(doc->editor->sci, start_pos, length); }
@@ -158,29 +148,44 @@ p_sci->set_selection_end(clickinfo.doc->editor->sci, endword); p_sci->replace_sel(clickinfo.doc->editor->sci, sugg);
- clear_indicators_on_range(clickinfo.doc, startword, endword - startword); + p_sci->indicator_clear(clickinfo.doc->editor->sci, startword, endword - startword); } }
static void on_menu_addword_item_activate(GtkMenuItem *menuitem, gpointer gdata) { - gint startword, endword; + gint startword, endword, i, doc_len; + ScintillaObject *sci; + GString *str;
if (clickinfo.doc == NULL || clickinfo.word == NULL || clickinfo.pos == -1) return;
- /** TODO re-check the whole document */ speller_add_word(clickinfo.word);
- startword = p_sci->send_message( - clickinfo.doc->editor->sci, SCI_WORDSTARTPOSITION, clickinfo.pos, 0); - endword = p_sci->send_message( - clickinfo.doc->editor->sci, SCI_WORDENDPOSITION, clickinfo.pos, 0); - if (startword != endword) + /* Remove all indicators on the added word */ + sci = clickinfo.doc->editor->sci; + str = g_string_sized_new(256); + doc_len = p_sci->get_length(sci); + for (i = 0; i < doc_len; i++) { - clear_indicators_on_range(clickinfo.doc, startword, endword - startword); + startword = p_sci->send_message(sci, SCI_INDICATORSTART, 0, i); + if (startword >= 0) + { + endword = p_sci->send_message(sci, SCI_INDICATOREND, 0, startword); + + if (str->len < (guint)(endword - startword + 1)) + str = g_string_set_size(str, endword - startword + 1); + p_sci->get_text_range(sci, startword, endword, str->str); + + if (strncmp(str->str, clickinfo.word, str->len) == 0) + p_sci->indicator_clear(sci, startword, endword - startword); + + i = endword + 1; + } } + g_string_free(str, TRUE); }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.