added rule for continued statements

master
Allen Webster 2016-10-10 18:09:46 -04:00
parent 94c624a505
commit c86d2dc9c6
3 changed files with 44 additions and 100 deletions

View File

@ -395,13 +395,9 @@ get_indentation_marks(Application_Links *app, Partition *part, Buffer_Summary *b
default:
if (indent.current_indent > 0){
if (!(prev_token.flags & CPP_TFLAG_PP_BODY) &&
!(prev_token.flags & CPP_TFLAG_PP_DIRECTIVE)){
if (!(prev_token.flags & CPP_TFLAG_PP_BODY) && !(prev_token.flags & CPP_TFLAG_PP_DIRECTIVE)){
switch (prev_token.type){
case CPP_TOKEN_BRACKET_OPEN:
case CPP_TOKEN_BRACE_OPEN: case CPP_TOKEN_BRACE_CLOSE:
case CPP_TOKEN_SEMICOLON: case CPP_TOKEN_COLON:
case CPP_TOKEN_COMMA: case CPP_TOKEN_COMMENT: break;
case CPP_TOKEN_BRACKET_OPEN: case CPP_TOKEN_BRACE_OPEN: case CPP_TOKEN_BRACE_CLOSE: case CPP_TOKEN_SEMICOLON: case CPP_TOKEN_COLON: case CPP_TOKEN_COMMA: case CPP_TOKEN_COMMENT: break;
default: this_indent += tab_width;
}
}

View File

@ -1302,6 +1302,42 @@ stickieness_guess(Cpp_Token_Type type, Cpp_Token_Type other_type, b32 on_left, b
return(guess);
}
internal f32
get_current_shift(Code_Wrap_State *wrap_state, i32 next_line_start){
f32 current_shift = wrap_state->paren_nesting[wrap_state->paren_safe_top];
if (current_shift != 0.f && wrap_state->paren_safe_top == 0){
if (wrap_state->token_ptr > wrap_state->token_array.tokens){
Cpp_Token prev_token = *(wrap_state->token_ptr-1);
if (!(prev_token.flags & CPP_TFLAG_PP_BODY) && !(prev_token.flags & CPP_TFLAG_PP_DIRECTIVE)){
switch (prev_token.type){
case CPP_TOKEN_BRACKET_OPEN: case CPP_TOKEN_BRACE_OPEN: case CPP_TOKEN_BRACE_CLOSE: case CPP_TOKEN_SEMICOLON: case CPP_TOKEN_COLON: case CPP_TOKEN_COMMA: case CPP_TOKEN_COMMENT: break;
default: current_shift += wrap_state->tab_indent_amount; break;
}
}
}
}
if (wrap_state->token_ptr->start < next_line_start){
if (wrap_state->token_ptr->flags & CPP_TFLAG_PP_DIRECTIVE){
current_shift = 0;
}
else{
switch (wrap_state->token_ptr->type){
case CPP_TOKEN_BRACE_CLOSE:
{
if (wrap_state->paren_safe_top == 0){
current_shift -= wrap_state->tab_indent_amount;
}
}break;
}
}
}
return(current_shift);
}
internal void
file_measure_wraps(Models *models, Editing_File *file, f32 font_height, f32 *adv){
General_Memory *general = &models->mem.general;
@ -1464,22 +1500,7 @@ file_measure_wraps(Models *models, Editing_File *file, f32 font_height, f32 *adv
potential_count = 0;
stage = 0;
f32 current_shift = wrap_state.paren_nesting[wrap_state.paren_safe_top];
if (wrap_state.token_ptr->start < next_line_start){
if (wrap_state.token_ptr->flags & CPP_TFLAG_PP_DIRECTIVE){
current_shift = 0;
}
else{
switch (wrap_state.token_ptr->type){
case CPP_TOKEN_BRACE_CLOSE:
{
if (wrap_state.paren_safe_top == 0){
current_shift -= wrap_state.tab_indent_amount;
}
}break;
}
}
}
f32 current_shift = get_current_shift(&wrap_state, next_line_start);
wrap_indent_marks[real_count].wrap_position = 0;
wrap_indent_marks[real_count].line_shift = clamp_bottom(0.f, current_shift);
@ -1493,22 +1514,7 @@ file_measure_wraps(Models *models, Editing_File *file, f32 font_height, f32 *adv
need_to_choose_a_wrap = 1;
}
f32 current_shift = wrap_state.paren_nesting[wrap_state.paren_safe_top];
if (wrap_state.token_ptr->start < next_line_start){
if (wrap_state.token_ptr->flags & CPP_TFLAG_PP_DIRECTIVE){
current_shift = 0;
}
else{
switch (wrap_state.token_ptr->type){
case CPP_TOKEN_BRACE_CLOSE:
{
if (wrap_state.paren_safe_top == 0){
current_shift -= wrap_state.tab_indent_amount;
}
}break;
}
}
}
f32 current_shift = get_current_shift(&wrap_state, next_line_start);
b32 next_token_is_on_line = 0;
if (wrap_state.token_ptr->start < next_line_start){
@ -1530,11 +1536,7 @@ file_measure_wraps(Models *models, Editing_File *file, f32 font_height, f32 *adv
Cpp_Token_Type this_type = this_token->type;
Cpp_Token_Type next_type = CPP_TOKEN_JUNK;
if (this_token == next_token){
next_token = 0;
}
if (!next_token_is_on_line){
if (this_token == next_token || !next_token_is_on_line){
next_token = 0;
}
@ -1542,7 +1544,7 @@ file_measure_wraps(Models *models, Editing_File *file, f32 font_height, f32 *adv
next_type = next_token->type;
}
b32 in_parens = wrap_state.paren_top == 0;
b32 in_parens = (wrap_state.paren_top == 0);
i32 this_stickieness = stickieness_guess(this_type, next_type, 1, in_parens);
i32 next_stickieness = 0;
@ -1635,31 +1637,6 @@ file_measure_wraps(Models *models, Editing_File *file, f32 font_height, f32 *adv
for (i32 l = 0; wrap_state.i < next_line_start && l < 3; ++l){
wrap_state_consume_token(&wrap_state, next_line_start);
}
#if 0
if (stop.line_index + 2 <= params.buffer->line_count){
next_line_start = params.buffer->line_starts[stop.line_index+2];;
}
current_shift = wrap_state.paren_nesting[wrap_state.paren_safe_top];
if (wrap_state.token_ptr->start < next_line_start){
if (wrap_state.token_ptr->flags & CPP_TFLAG_PP_DIRECTIVE){
current_shift = 0;
}
else{
switch (wrap_state.token_ptr->type){
case CPP_TOKEN_BRACE_CLOSE:
{
if (wrap_state.paren_safe_top == 0){
current_shift -= wrap_state.tab_indent_amount;
}
}break;
}
}
}
wrap_state_set_x(&wrap_state, current_shift);
#endif
}
line_shift = wrap_indent_marks[stage].line_shift;
@ -1668,36 +1645,6 @@ file_measure_wraps(Models *models, Editing_File *file, f32 font_height, f32 *adv
++stage;
}
#if 0
for (; wrap_state.token_ptr < wrap_state.end_token; ){
Code_Wrap_Step step = wrap_state_consume_token(&wrap_state, stop.pos);
if (step.position_end >= stop.pos){
break;
}
}
f32 current_shift = wrap_state.paren_nesting[wrap_state.paren_safe_top];
if (wrap_state.token_ptr->start < next_line_start){
if (wrap_state.token_ptr->flags & CPP_TFLAG_PP_DIRECTIVE){
current_shift = 0;
}
else{
switch (wrap_state.token_ptr->type){
case CPP_TOKEN_BRACE_CLOSE:
{
if (wrap_state.paren_safe_top == 0){
current_shift -= wrap_state.tab_indent_amount;
}
}break;
}
}
}
line_shift = current_shift;
#endif
if (line_shift < 0){
line_shift = 0;
}

View File

@ -174,11 +174,12 @@
; [X] unify wrap rule parsing and indent rule parsing
; [X] handle square brackets
; [X] smarter wrap rule
; [X] handle unclosed statements
; [] special indent rules in preprocessor body
; [] handle unclosed statements
; [] handle comments
; [] fix issues when relexing happens in parallel
; [] additional width for nesting?
; [] wrapped line indication
; [] remeasure version of measure_wraps
; Buffer behavior cleanup