added rule for continued statements
parent
94c624a505
commit
c86d2dc9c6
|
@ -395,13 +395,9 @@ get_indentation_marks(Application_Links *app, Partition *part, Buffer_Summary *b
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (indent.current_indent > 0){
|
if (indent.current_indent > 0){
|
||||||
if (!(prev_token.flags & CPP_TFLAG_PP_BODY) &&
|
if (!(prev_token.flags & CPP_TFLAG_PP_BODY) && !(prev_token.flags & CPP_TFLAG_PP_DIRECTIVE)){
|
||||||
!(prev_token.flags & CPP_TFLAG_PP_DIRECTIVE)){
|
|
||||||
switch (prev_token.type){
|
switch (prev_token.type){
|
||||||
case CPP_TOKEN_BRACKET_OPEN:
|
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_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;
|
default: this_indent += tab_width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1302,6 +1302,42 @@ stickieness_guess(Cpp_Token_Type type, Cpp_Token_Type other_type, b32 on_left, b
|
||||||
return(guess);
|
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
|
internal void
|
||||||
file_measure_wraps(Models *models, Editing_File *file, f32 font_height, f32 *adv){
|
file_measure_wraps(Models *models, Editing_File *file, f32 font_height, f32 *adv){
|
||||||
General_Memory *general = &models->mem.general;
|
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;
|
potential_count = 0;
|
||||||
stage = 0;
|
stage = 0;
|
||||||
|
|
||||||
f32 current_shift = wrap_state.paren_nesting[wrap_state.paren_safe_top];
|
f32 current_shift = get_current_shift(&wrap_state, next_line_start);
|
||||||
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_indent_marks[real_count].wrap_position = 0;
|
wrap_indent_marks[real_count].wrap_position = 0;
|
||||||
wrap_indent_marks[real_count].line_shift = clamp_bottom(0.f, current_shift);
|
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;
|
need_to_choose_a_wrap = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
f32 current_shift = wrap_state.paren_nesting[wrap_state.paren_safe_top];
|
f32 current_shift = get_current_shift(&wrap_state, next_line_start);
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
b32 next_token_is_on_line = 0;
|
b32 next_token_is_on_line = 0;
|
||||||
if (wrap_state.token_ptr->start < next_line_start){
|
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 this_type = this_token->type;
|
||||||
Cpp_Token_Type next_type = CPP_TOKEN_JUNK;
|
Cpp_Token_Type next_type = CPP_TOKEN_JUNK;
|
||||||
|
|
||||||
if (this_token == next_token){
|
if (this_token == next_token || !next_token_is_on_line){
|
||||||
next_token = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!next_token_is_on_line){
|
|
||||||
next_token = 0;
|
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;
|
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 this_stickieness = stickieness_guess(this_type, next_type, 1, in_parens);
|
||||||
|
|
||||||
i32 next_stickieness = 0;
|
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){
|
for (i32 l = 0; wrap_state.i < next_line_start && l < 3; ++l){
|
||||||
wrap_state_consume_token(&wrap_state, next_line_start);
|
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;
|
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;
|
++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){
|
if (line_shift < 0){
|
||||||
line_shift = 0;
|
line_shift = 0;
|
||||||
}
|
}
|
||||||
|
|
3
TODO.txt
3
TODO.txt
|
@ -174,11 +174,12 @@
|
||||||
; [X] unify wrap rule parsing and indent rule parsing
|
; [X] unify wrap rule parsing and indent rule parsing
|
||||||
; [X] handle square brackets
|
; [X] handle square brackets
|
||||||
; [X] smarter wrap rule
|
; [X] smarter wrap rule
|
||||||
|
; [X] handle unclosed statements
|
||||||
; [] special indent rules in preprocessor body
|
; [] special indent rules in preprocessor body
|
||||||
; [] handle unclosed statements
|
|
||||||
; [] handle comments
|
; [] handle comments
|
||||||
; [] fix issues when relexing happens in parallel
|
; [] fix issues when relexing happens in parallel
|
||||||
; [] additional width for nesting?
|
; [] additional width for nesting?
|
||||||
|
; [] wrapped line indication
|
||||||
; [] remeasure version of measure_wraps
|
; [] remeasure version of measure_wraps
|
||||||
|
|
||||||
; Buffer behavior cleanup
|
; Buffer behavior cleanup
|
||||||
|
|
Loading…
Reference in New Issue