upgrade to indent rule for handling comment spacing

This commit is contained in:
Allen Webster 2016-07-14 13:18:40 -04:00
parent c8d881c1b5
commit 71147d1624
2 changed files with 52 additions and 29 deletions

View File

@ -1295,37 +1295,37 @@ CUSTOM_COMMAND_SIG(if0_off){
CUSTOM_COMMAND_SIG(backspace_word){
unsigned int access = AccessOpen;
View_Summary view;
Buffer_Summary buffer;
int pos2, pos1;
View_Summary view = app->get_active_view(app, access);
Buffer_Summary buffer = app->get_buffer(app, view.buffer_id, access);
view = app->get_active_view(app, access);
if (buffer.exists){
int pos2 = 0, pos1 = 0;
pos2 = view.cursor.pos;
exec_command(app, seek_alphanumeric_left);
refresh_view(app, &view);
pos1 = view.cursor.pos;
pos2 = view.cursor.pos;
exec_command(app, seek_alphanumeric_left);
refresh_view(app, &view);
pos1 = view.cursor.pos;
buffer = app->get_buffer(app, view.buffer_id, access);
app->buffer_replace_range(app, &buffer, pos1, pos2, 0, 0);
app->buffer_replace_range(app, &buffer, pos1, pos2, 0, 0);
}
}
CUSTOM_COMMAND_SIG(delete_word){
unsigned int access = AccessOpen;
View_Summary view;
Buffer_Summary buffer;
int pos2, pos1;
View_Summary view = app->get_active_view(app, access);
Buffer_Summary buffer = app->get_buffer(app, view.buffer_id, access);
view = app->get_active_view(app, access);
if (buffer.exists){
int pos2 = 0, pos1 = 0;
pos1 = view.cursor.pos;
exec_command(app, seek_alphanumeric_right);
refresh_view(app, &view);
pos2 = view.cursor.pos;
pos1 = view.cursor.pos;
exec_command(app, seek_alphanumeric_right);
refresh_view(app, &view);
pos2 = view.cursor.pos;
buffer = app->get_buffer(app, view.buffer_id, access);
app->buffer_replace_range(app, &buffer, pos1, pos2, 0, 0);
app->buffer_replace_range(app, &buffer, pos1, pos2, 0, 0);
}
}
CUSTOM_COMMAND_SIG(snipe_token_or_word){

View File

@ -2674,6 +2674,7 @@ struct Indent_Parse_State{
i32 previous_line_indent;
i32 paren_nesting;
i32 paren_anchor_indent[16];
i32 comment_shift;
};
internal i32
@ -2693,13 +2694,27 @@ compute_this_indent(Buffer *buffer, Indent_Parse_State indent,
next_line_start = buffer_size(buffer);
}
if ((prev_token.type == CPP_TOKEN_COMMENT ||
prev_token.type == CPP_TOKEN_STRING_CONSTANT) &&
prev_token.start <= this_line_start &&
b32 did_special_behavior = false;
if (prev_token.start <= this_line_start &&
prev_token.start + prev_token.size > this_line_start){
this_indent = previous_indent;
if (prev_token.type == CPP_TOKEN_COMMENT){
Hard_Start_Result hard_start = buffer_find_hard_start(buffer, this_line_start, tab_width);
i32 line_pos = hard_start.char_pos - this_line_start;
this_indent = line_pos + indent.comment_shift;
if (this_indent < 0){
this_indent = 0;
}
did_special_behavior = true;
}
else if (prev_token.type == CPP_TOKEN_STRING_CONSTANT){
this_indent = previous_indent;
did_special_behavior = true;
}
}
else{
if (!did_special_behavior){
this_indent = indent.current_indent;
if (T.start < next_line_start){
if (T.flags & CPP_TFLAG_PP_DIRECTIVE){
@ -2898,6 +2913,14 @@ get_line_indentation_marks(Partition *part, Buffer *buffer, Cpp_Token_Stack toke
case CPP_TOKEN_BRACE_OPEN: indent.current_indent += 4; break;
case CPP_TOKEN_BRACE_CLOSE: indent.current_indent -= 4; break;
case CPP_TOKEN_COMMENT:
{
i32 line = buffer_get_line_index(buffer, T.start);
i32 start = buffer->line_starts[line];
indent.comment_shift = (indent.current_indent - (T.start - start));
}break;
case CPP_TOKEN_PARENTHESE_OPEN:
if (!(T.flags & CPP_TFLAG_PP_BODY)){
if (indent.paren_nesting < ArrayCount(indent.paren_anchor_indent)){