From 90d28e9ae07786d090485ecf199bfb18772652df Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 3 Sep 2015 10:38:28 +0200 Subject: [PATCH] Fixed spellchecking abit. --- src/source.cc | 40 +++++++++++++++++++++------------------- src/source.h | 1 + 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/source.cc b/src/source.cc index f2d422d..48fde53 100644 --- a/src/source.cc +++ b/src/source.cc @@ -186,26 +186,24 @@ Source::View::View(const boost::filesystem::path &file_path): file_path(file_pat delayed_spellcheck_suggestions_connection.disconnect(); auto iter=get_buffer()->get_insert()->get_iter(); - if(last_keyval_is_backspace || iter.backward_char()) { - auto context_iter=iter; - if(context_iter.backward_char()) { - if((spellcheck_all && !get_source_buffer()->iter_has_context_class(context_iter, "no-spell-check")) || get_source_buffer()->iter_has_context_class(context_iter, "comment") || get_source_buffer()->iter_has_context_class(context_iter, "string")) { - if(*iter==32 || *iter==45) { //Might have used space or - to split two words - auto first=iter; - auto second=iter; - if(first.backward_char() && second.forward_char()) { - get_buffer()->remove_tag_by_name("spellcheck_error", first, second); - auto word=spellcheck_get_word(first); - spellcheck_word(word.first, word.second); - word=spellcheck_get_word(second); - spellcheck_word(word.first, word.second); - } - } - else { - auto word=spellcheck_get_word(iter); + auto context_iter=iter; + if(((last_keyval_is_backspace && !iter.ends_line()) || iter.backward_char()) && context_iter.backward_char() && context_iter.backward_char()) { + if((spellcheck_all && !get_source_buffer()->iter_has_context_class(context_iter, "no-spell-check")) || get_source_buffer()->iter_has_context_class(context_iter, "comment") || get_source_buffer()->iter_has_context_class(context_iter, "string")) { + if(*iter==32 || *iter==45) { //Might have used space or - to split two words + auto first=iter; + auto second=iter; + if(first.backward_char() && second.forward_char()) { + get_buffer()->remove_tag_by_name("spellcheck_error", first, second); + auto word=spellcheck_get_word(first); + spellcheck_word(word.first, word.second); + word=spellcheck_get_word(second); spellcheck_word(word.first, word.second); } } + else { + auto word=spellcheck_get_word(iter); + spellcheck_word(word.first, word.second); + } } } }); @@ -701,16 +699,20 @@ std::pair Source::View::find_tab_char_and_size() { return {found_tab_char, found_tab_size}; } +bool Source::View::is_word_iter(const Gtk::TextIter& iter) { + return ((*iter>=48 && *iter<=57) || (*iter>=65 && *iter<=90) || (*iter>=97 && *iter<=122) || *iter==39 || *iter>=128); +} + std::pair Source::View::spellcheck_get_word(Gtk::TextIter iter) { auto start=iter; auto end=iter; - while((*iter>=48 && *iter<=57) || (*iter>=65 && *iter<=90) || (*iter>=97 && *iter<=122) || *iter==39 || *iter>=128) { + while(is_word_iter(iter)) { start=iter; if(!iter.backward_char()) break; } - while((*end>=48 && *end<=57) || (*end>=65 && *end<=90) || (*end>=97 && *end<=122) || *iter==39 || *end>=128) { + while(is_word_iter(end)) { if(!end.forward_char()) break; } diff --git a/src/source.h b/src/source.h index 6480d6b..29a7cd3 100644 --- a/src/source.h +++ b/src/source.h @@ -108,6 +108,7 @@ namespace Source { static AspellConfig* spellcheck_config; AspellCanHaveError *spellcheck_possible_err; AspellSpeller *spellcheck_checker; + bool is_word_iter(const Gtk::TextIter& iter); std::pair spellcheck_get_word(Gtk::TextIter iter); void spellcheck_word(const Gtk::TextIter& start, const Gtk::TextIter& end); std::vector spellcheck_get_suggestions(const Gtk::TextIter& start, const Gtk::TextIter& end);