diff --git a/src/source.cc b/src/source.cc index 71d3d78..9792b16 100644 --- a/src/source.cc +++ b/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());