diff options
author | J. Bruce Fields <bfields@citi.umich.edu> | 2007-12-16 11:31:41 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-12-16 13:07:58 -0800 |
commit | ffe568859ba89b4283afc36251561a9be3173bf8 (patch) | |
tree | 3734c366a9c89d3537d88f759fd6ce4bcf299407 /ws.c | |
parent | 9afa2d4aa9423ab594c7281cc2360df55498a407 (diff) | |
download | git-ffe568859ba89b4283afc36251561a9be3173bf8.tar.gz |
whitespace: more accurate initial-indent highlighting
Instead of highlighting the entire initial indent, highlight only the
problematic spaces.
In the case of an indent like ' \t \t' there may be multiple problematic
ranges, so it's easiest to emit the highlighting as we go instead of
trying rember disjoint ranges and do it all at the end.
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'ws.c')
-rw-r--r-- | ws.c | 24 |
1 files changed, 16 insertions, 8 deletions
@@ -150,24 +150,32 @@ unsigned check_and_emit_line(const char *line, int len, unsigned ws_rule, continue; if (line[i] != '\t') break; - if ((ws_rule & WS_SPACE_BEFORE_TAB) && written < i) + if ((ws_rule & WS_SPACE_BEFORE_TAB) && written < i) { result |= WS_SPACE_BEFORE_TAB; + if (stream) { + fputs(ws, stream); + fwrite(line + written, i - written, 1, stream); + fputs(reset, stream); + } + } else if (stream) + fwrite(line + written, i - written, 1, stream); + if (stream) + fwrite(line + i, 1, 1, stream); written = i + 1; } /* Check for indent using non-tab. */ - if ((ws_rule & WS_INDENT_WITH_NON_TAB) && i - written >= 8) + if ((ws_rule & WS_INDENT_WITH_NON_TAB) && i - written >= 8) { result |= WS_INDENT_WITH_NON_TAB; - - if (stream) { - /* Highlight errors in leading whitespace. */ - if ((result & WS_SPACE_BEFORE_TAB) || - (result & WS_INDENT_WITH_NON_TAB)) { + if (stream) { fputs(ws, stream); - fwrite(line, written, 1, stream); + fwrite(line + written, i - written, 1, stream); fputs(reset, stream); } + written = i; + } + if (stream) { /* Now the rest of the line starts at written. * The non-highlighted part ends at trailing_whitespace. */ if (trailing_whitespace == -1) |