From 046cabf51351075a5b05cafb589915f17b912b2b Mon Sep 17 00:00:00 2001 From: eidheim Date: Tue, 11 Aug 2015 10:09:35 +0200 Subject: [PATCH] Again, improved indenting in preparation for more complex clang-indenting. --- src/source.cc | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/source.cc b/src/source.cc index 6c595e5..5d1bbab 100644 --- a/src/source.cc +++ b/src/source.cc @@ -241,9 +241,9 @@ bool Source::View::on_key_press_event(GdkEventKey* key) { string previous_line=get_line(line_nr-1); std::smatch sm2; if(std::regex_match(previous_line, sm2, spaces_regex)) { - if(sm[1].str().size()==sm2[1].str().size() || sm[1].str().size()==sm2[1].str().size()+config->tab_size) { + if(line.size()==sm2[1].str().size() || line.size()==sm2[1].str().size()+config->tab_size || line.size()==sm2[1].str().size()-config->tab_size) { auto previous_line_end_it=insert_it; - for(unsigned c=0;cerase(previous_line_end_it, insert_it); @@ -651,15 +651,23 @@ bool Source::ClangViewParse::on_key_press_event(GdkEventKey* key) { return true; } } + if(next_line!=sm[1].str()+"}") { + get_source_buffer()->insert_at_cursor("\n"+sm[1].str()+config->tab+"\n"+sm[1].str()+"}"); + auto insert_it = get_source_buffer()->get_insert()->get_iter(); + for(size_t c=0;ctab_size+sm[1].str().size();c++) + insert_it--; + scroll_to(get_source_buffer()->get_insert()); + get_source_buffer()->place_cursor(insert_it); + get_source_buffer()->end_user_action(); + return true; + } + else { + get_source_buffer()->insert_at_cursor("\n"+sm[1].str()+config->tab); + scroll_to(get_source_buffer()->get_insert()); + get_source_buffer()->end_user_action(); + return true; + } } - get_source_buffer()->insert_at_cursor("\n"+sm[1].str()+config->tab+"\n"+sm[1].str()+"}"); - auto insert_it = get_source_buffer()->get_insert()->get_iter(); - for(size_t c=0;ctab_size+sm[1].str().size();c++) - insert_it--; - scroll_to(get_source_buffer()->get_insert()); - get_source_buffer()->place_cursor(insert_it); - get_source_buffer()->end_user_action(); - return true; } else if(std::regex_match(line, sm, no_bracket_statement_regex)) { get_source_buffer()->insert_at_cursor("\n"+sm[1].str()+config->tab);