|
|
|
@ -65,7 +65,7 @@ Source::SpellCheckView::SpellCheckView() : Gsv::View() { |
|
|
|
else { |
|
|
|
else { |
|
|
|
auto previous_iter=iter; |
|
|
|
auto previous_iter=iter; |
|
|
|
//When for instance using space to split two words
|
|
|
|
//When for instance using space to split two words
|
|
|
|
if(previous_iter.backward_char() && !is_word_iter(previous_iter)) { |
|
|
|
if(previous_iter.backward_char() && (*previous_iter==' ' || *previous_iter=='-')) { |
|
|
|
auto first=previous_iter; |
|
|
|
auto first=previous_iter; |
|
|
|
auto second=iter; |
|
|
|
auto second=iter; |
|
|
|
if(first.backward_char()) { |
|
|
|
if(first.backward_char()) { |
|
|
|
@ -129,21 +129,20 @@ Source::SpellCheckView::SpellCheckView() : Gsv::View() { |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// In case of for instance text paste or undo/redo
|
|
|
|
// In case of for instance text paste or undo/redo
|
|
|
|
get_buffer()->signal_insert().connect([this](const Gtk::TextIter &end_iter, const Glib::ustring &inserted_string, int) { |
|
|
|
get_buffer()->signal_insert().connect([this](const Gtk::TextIter &start_iter, const Glib::ustring &inserted_string, int) { |
|
|
|
if(spellcheck_checker==nullptr) |
|
|
|
if(spellcheck_checker==nullptr) |
|
|
|
return; |
|
|
|
return; |
|
|
|
if(inserted_string.size()<=1) |
|
|
|
if(inserted_string.size()<=1) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
auto start_iter=end_iter; |
|
|
|
auto iter=start_iter; |
|
|
|
start_iter.backward_chars(inserted_string.size()); |
|
|
|
if(!is_word_iter(iter) && !iter.starts_line()) |
|
|
|
if(!is_word_iter(start_iter) && !start_iter.starts_line()) |
|
|
|
iter.backward_char(); |
|
|
|
start_iter.backward_char(); |
|
|
|
if(is_word_iter(iter)) { |
|
|
|
auto word=get_word(start_iter); |
|
|
|
auto word=get_word(iter); |
|
|
|
start_iter=word.first; |
|
|
|
get_buffer()->remove_tag(spellcheck_error_tag, word.first, word.second); |
|
|
|
word=get_word(end_iter); |
|
|
|
} |
|
|
|
get_buffer()->remove_tag(spellcheck_error_tag, start_iter, word.second); |
|
|
|
}, false); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
get_buffer()->signal_mark_set().connect([this](const Gtk::TextBuffer::iterator& iter, const Glib::RefPtr<Gtk::TextBuffer::Mark>& mark) { |
|
|
|
get_buffer()->signal_mark_set().connect([this](const Gtk::TextBuffer::iterator& iter, const Glib::RefPtr<Gtk::TextBuffer::Mark>& mark) { |
|
|
|
if(spellcheck_checker==nullptr) |
|
|
|
if(spellcheck_checker==nullptr) |
|
|
|
|