Browse Source

Minor improvement to extend selection for non-bracket languages

merge-requests/404/merge
eidheim 5 years ago
parent
commit
34eadaa2e4
  1. 44
      src/source.cpp

44
src/source.cpp

@ -1624,6 +1624,50 @@ void Source::View::extend_selection() {
end.forward_char();
if(start != start_stored || end != end_stored) {
// Forward to closing symbol if open symbol is found between start and end
auto iter = start;
para_count = 0;
square_count = 0;
curly_count = 0;
do {
if(*iter == '(' && is_code_iter(iter))
para_count++;
else if(*iter == ')' && is_code_iter(iter))
para_count--;
else if(*iter == '[' && is_code_iter(iter))
square_count++;
else if(*iter == ']' && is_code_iter(iter))
square_count--;
else if(*iter == '{' && is_code_iter(iter))
curly_count++;
else if(*iter == '}' && is_code_iter(iter))
curly_count--;
if(para_count < 0 || square_count < 0 || curly_count < 0)
break;
} while(iter.forward_char() && iter < end);
if(iter == end && (para_count > 0 || square_count > 0 || curly_count > 0)) {
do {
if(*iter == '(' && is_code_iter(iter))
para_count++;
else if(*iter == ')' && is_code_iter(iter))
para_count--;
else if(*iter == '[' && is_code_iter(iter))
square_count++;
else if(*iter == ']' && is_code_iter(iter))
square_count--;
else if(*iter == '{' && is_code_iter(iter))
curly_count++;
else if(*iter == '}' && is_code_iter(iter))
curly_count--;
if(para_count == 0 && square_count == 0 && curly_count == 0)
break;
} while(iter.forward_char());
if(iter) {
end = iter;
end.forward_char();
}
}
get_buffer()->select_range(start, end);
return;
}

Loading…
Cancel
Save