From 5420343e8d20256ae6b6b1751a7c8cbfd6d7540b Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 3 Sep 2015 11:44:43 +0200 Subject: [PATCH] Hopefully the last spellcheck fix. --- src/source.cc | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/source.cc b/src/source.cc index 48fde53..0f979af 100644 --- a/src/source.cc +++ b/src/source.cc @@ -186,24 +186,31 @@ 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(); - 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); + bool ends_line=iter.ends_line(); + if(iter.backward_char()) { + auto context_iter=iter; + bool backward_success=true; + if(ends_line || *iter=='/' || *iter=='*') //iter_has_context_class is sadly bugged + backward_success=context_iter.backward_char(); + if(backward_success) { + 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(last_keyval_is_backspace && !is_word_iter(iter) && iter.forward_char()) {} //backspace fix + 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); } } - else { - auto word=spellcheck_get_word(iter); - spellcheck_word(word.first, word.second); - } } } });