Browse Source

Fixed spellchecking abit.

merge-requests/365/head
eidheim 10 years ago
parent
commit
90d28e9ae0
  1. 40
      src/source.cc
  2. 1
      src/source.h

40
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(); 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;
} }

1
src/source.h

@ -108,6 +108,7 @@ namespace Source {
static AspellConfig* spellcheck_config; static AspellConfig* spellcheck_config;
AspellCanHaveError *spellcheck_possible_err; AspellCanHaveError *spellcheck_possible_err;
AspellSpeller *spellcheck_checker; AspellSpeller *spellcheck_checker;
bool is_word_iter(const Gtk::TextIter& iter);
std::pair<Gtk::TextIter, Gtk::TextIter> spellcheck_get_word(Gtk::TextIter iter); std::pair<Gtk::TextIter, Gtk::TextIter> spellcheck_get_word(Gtk::TextIter iter);
void spellcheck_word(const Gtk::TextIter& start, const Gtk::TextIter& end); void spellcheck_word(const Gtk::TextIter& start, const Gtk::TextIter& end);
std::vector<std::string> spellcheck_get_suggestions(const Gtk::TextIter& start, const Gtk::TextIter& end); std::vector<std::string> spellcheck_get_suggestions(const Gtk::TextIter& start, const Gtk::TextIter& end);

Loading…
Cancel
Save