Browse Source

Improved indentation of multiline expressions

merge-requests/389/head
eidheim 8 years ago
parent
commit
2b4f2d3cde
  1. 13
      src/source.cc

13
src/source.cc

@ -1276,12 +1276,12 @@ Gtk::TextIter Source::View::get_start_of_expression(Gtk::TextIter iter) {
if(iter.starts_line())
return iter;
bool stream_operator_test=false;
bool has_semicolon=false;
bool colon_test=false;
if(is_bracket_language) {
if(*iter==';')
stream_operator_test=true;
has_semicolon=true;
if(*iter=='{') {
iter.backward_char();
colon_test=true;
@ -1316,7 +1316,7 @@ Gtk::TextIter Source::View::get_start_of_expression(Gtk::TextIter iter) {
bool stream_operator_found=false;
bool colon_found=false;
// Handle << at the beginning of the sentence if iter initially started with ;
if(stream_operator_test) {
if(has_semicolon) {
auto test_iter=get_tabs_end_iter(iter);
if(!test_iter.starts_line() && *test_iter=='<' && is_code_iter(test_iter) &&
test_iter.forward_char() && *test_iter=='<')
@ -1328,12 +1328,12 @@ Gtk::TextIter Source::View::get_start_of_expression(Gtk::TextIter iter) {
if(!test_iter.starts_line() && *test_iter==':' && is_code_iter(test_iter))
colon_found=true;
}
// Handle : and , on previous line
// Handle : , = & | on previous line
if(!stream_operator_found && !colon_found) {
auto previous_iter=iter;
previous_iter.backward_char();
while(!previous_iter.starts_line() && (*previous_iter==' ' || previous_iter.ends_line()) && previous_iter.backward_char()) {}
if(*previous_iter!=',' && *previous_iter!=':')
if(*previous_iter!=',' && *previous_iter!=':' && *previous_iter!='=' && *previous_iter!='&' && *previous_iter!='|')
return iter;
else if(*previous_iter==':') {
previous_iter.backward_char();
@ -1346,6 +1346,9 @@ Gtk::TextIter Source::View::get_start_of_expression(Gtk::TextIter iter) {
else
return iter;
}
// Handle for instance: int a =\n b;
else if((*previous_iter=='=' || *previous_iter=='&' || *previous_iter=='|') && !has_semicolon)
return iter;
}
}
} while(iter.backward_char());

Loading…
Cancel
Save