|
|
|
@ -186,26 +186,24 @@ Source::View::View(const boost::filesystem::path &file_path): file_path(file_pat |
|
|
|
delayed_spellcheck_suggestions_connection.disconnect(); |
|
|
|
delayed_spellcheck_suggestions_connection.disconnect(); |
|
|
|
|
|
|
|
|
|
|
|
auto iter=get_buffer()->get_insert()->get_iter(); |
|
|
|
auto iter=get_buffer()->get_insert()->get_iter(); |
|
|
|
if(last_keyval_is_backspace || iter.backward_char()) { |
|
|
|
auto context_iter=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(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((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
|
|
|
|
if(*iter==32 || *iter==45) { //Might have used space or - to split two words
|
|
|
|
auto first=iter; |
|
|
|
auto first=iter; |
|
|
|
auto second=iter; |
|
|
|
auto second=iter; |
|
|
|
if(first.backward_char() && second.forward_char()) { |
|
|
|
if(first.backward_char() && second.forward_char()) { |
|
|
|
get_buffer()->remove_tag_by_name("spellcheck_error", first, second); |
|
|
|
get_buffer()->remove_tag_by_name("spellcheck_error", first, second); |
|
|
|
auto word=spellcheck_get_word(first); |
|
|
|
auto word=spellcheck_get_word(first); |
|
|
|
spellcheck_word(word.first, word.second); |
|
|
|
spellcheck_word(word.first, word.second); |
|
|
|
word=spellcheck_get_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); |
|
|
|
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<char, unsigned> Source::View::find_tab_char_and_size() { |
|
|
|
return {found_tab_char, found_tab_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<Gtk::TextIter, Gtk::TextIter> Source::View::spellcheck_get_word(Gtk::TextIter iter) { |
|
|
|
std::pair<Gtk::TextIter, Gtk::TextIter> Source::View::spellcheck_get_word(Gtk::TextIter iter) { |
|
|
|
auto start=iter; |
|
|
|
auto start=iter; |
|
|
|
auto end=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; |
|
|
|
start=iter; |
|
|
|
if(!iter.backward_char()) |
|
|
|
if(!iter.backward_char()) |
|
|
|
break; |
|
|
|
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()) |
|
|
|
if(!end.forward_char()) |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|