Browse Source

Simplified and improved Source::SpellCheckView::is_code_iter

merge-requests/365/head
eidheim 9 years ago
parent
commit
bb0f873d01
  1. 42
      src/source_spellcheck.cc
  2. 3
      src/source_spellcheck.h

42
src/source_spellcheck.cc

@ -185,6 +185,13 @@ Source::SpellCheckView::SpellCheckView() : Gsv::View() {
delayed_spellcheck_suggestions_connection.disconnect();
return false;
});
get_buffer()->get_tag_table()->signal_tag_added().connect([this](const Glib::RefPtr<Gtk::TextTag> &tag) {
if(tag->property_name()=="gtksourceview:context-classes:comment")
comment_tag=tag;
else if(tag->property_name()=="gtksourceview:context-classes:string")
string_tag=tag;
});
}
Source::SpellCheckView::~SpellCheckView() {
@ -301,46 +308,15 @@ void Source::SpellCheckView::goto_next_spellcheck_error() {
}
bool Source::SpellCheckView::is_code_iter(const Gtk::TextIter &iter) {
auto is_comment=[this](const Gtk::TextIter &iter) {
return get_source_buffer()->iter_has_context_class(iter, "comment");
};
auto is_string=[this](const Gtk::TextIter &iter) {
return get_source_buffer()->iter_has_context_class(iter, "string");
};
if(*iter=='\'') {
auto previous_iter=iter;
if(!iter.starts_line() && previous_iter.backward_char() && *previous_iter=='\'')
return false;
}
if(is_comment(iter))
if(comment_tag && ((iter.has_tag(comment_tag) && !iter.begins_tag(comment_tag)) || iter.ends_tag(comment_tag)))
return false;
if(is_string(iter)) {
//Add exception for in front of " and '
if(*iter=='\'' || *iter=='"') {
auto previous_iter=iter;
if(previous_iter.backward_char()) {
if(!is_string(previous_iter))
return true;
}
else
return true;
}
if(string_tag && iter.has_tag(string_tag) && !iter.begins_tag(string_tag))
return false;
}
//Iters after '...' and "..." should be code iters at the end of line
if(iter.ends_line() && !iter.starts_line()) {
auto previous_iter=iter;
if(previous_iter.backward_char()) {
if(is_comment(previous_iter))
return false;
if(is_string(previous_iter) && *previous_iter!='\'' && *previous_iter!='"') {
auto next_iter=iter;
if(next_iter.forward_char() && !is_string(next_iter))
return false;
}
}
}
return true;
}

3
src/source_spellcheck.h

@ -26,6 +26,9 @@ namespace Source {
private:
std::unique_ptr<SelectionDialog> spellcheck_suggestions_dialog;
Glib::RefPtr<Gtk::TextTag> comment_tag;
Glib::RefPtr<Gtk::TextTag> string_tag;
static AspellConfig* spellcheck_config;
AspellCanHaveError *spellcheck_possible_err;
AspellSpeller *spellcheck_checker;

Loading…
Cancel
Save