Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/indent indent: distinguish blank lines from newline ...
details: https://anonhg.NetBSD.org/src/rev/a78db9fb0d10
branches: trunk
changeset: 376317:a78db9fb0d10
user: rillig <rillig%NetBSD.org@localhost>
date: Sat Jun 10 11:01:58 2023 +0000
description:
indent: distinguish blank lines from newline characters
diffstat:
usr.bin/indent/debug.c | 14 +++++-----
usr.bin/indent/io.c | 64 ++++++++++++++++++++++++-------------------------
2 files changed, 38 insertions(+), 40 deletions(-)
diffs (227 lines):
diff -r 17631f786aa5 -r a78db9fb0d10 usr.bin/indent/debug.c
--- a/usr.bin/indent/debug.c Sat Jun 10 09:31:41 2023 +0000
+++ b/usr.bin/indent/debug.c Sat Jun 10 11:01:58 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: debug.c,v 1.47 2023/06/10 09:31:41 rillig Exp $ */
+/* $NetBSD: debug.c,v 1.48 2023/06/10 11:01:58 rillig Exp $ */
/*-
* Copyright (c) 2023 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: debug.c,v 1.47 2023/06/10 09:31:41 rillig Exp $");
+__RCSID("$NetBSD: debug.c,v 1.48 2023/06/10 11:01:58 rillig Exp $");
#include <stdarg.h>
#include <string.h>
@@ -144,7 +144,7 @@ static struct {
struct parser_state prev_ps;
bool ps_first;
const char *heading;
- unsigned wrote_newlines;
+ unsigned wrote_newlines;
} state = {
.ps_first = true,
.wrote_newlines = 1,
@@ -227,7 +227,7 @@ debug_buffers(void)
debug_print_buf("label", &lab);
debug_print_buf("code", &code);
debug_print_buf("comment", &com);
- debug_println("");
+ debug_blank_line();
}
static void
@@ -287,7 +287,7 @@ debug_ps_paren(void)
}
if (ps.nparen == 0)
debug_printf(" none");
- debug_println("");
+ debug_blank_line();
}
static bool
@@ -313,7 +313,7 @@ debug_ps_di_stack(void)
debug_printf(" %d", ps.di_stack[i]);
if (ps.decl_level == 0)
debug_printf(" none");
- debug_println("");
+ debug_blank_line();
}
#define debug_ps_bool(name) \
@@ -395,6 +395,6 @@ debug_parse_stack(const char *situation)
for (int i = 0; i <= psyms->top; ++i)
debug_printf(" %d %s",
psyms->ind_level[i], psym_name[psyms->sym[i]]);
- debug_println("");
+ debug_blank_line();
}
#endif
diff -r 17631f786aa5 -r a78db9fb0d10 usr.bin/indent/io.c
--- a/usr.bin/indent/io.c Sat Jun 10 09:31:41 2023 +0000
+++ b/usr.bin/indent/io.c Sat Jun 10 11:01:58 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: io.c,v 1.213 2023/06/10 08:17:04 rillig Exp $ */
+/* $NetBSD: io.c,v 1.214 2023/06/10 11:01:58 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: io.c,v 1.213 2023/06/10 08:17:04 rillig Exp $");
+__RCSID("$NetBSD: io.c,v 1.214 2023/06/10 11:01:58 rillig Exp $");
#include <stdio.h>
@@ -50,10 +50,11 @@ const char *inp_p;
struct output_state out;
enum indent_enabled indent_enabled;
static int out_ind; /* width of the line that is being written */
-static unsigned wrote_newlines = 2; /* 0 in the middle of a line, 1 after a
- * single '\n', > 1 means there were (n
- * - 1) blank lines above */
-static unsigned buffered_blank_lines;
+static unsigned newlines = 2; /* the total of written and buffered newlines;
+ * 0 in the middle of a line, 1 after a single
+ * finished line, anything > 1 are trailing
+ * blank lines */
+static unsigned buffered_newlines; /* not yet written */
static int paren_indent;
@@ -108,37 +109,37 @@ inp_next(void)
static void
-write_newline(void)
+buffer_newline(void)
{
- buffered_blank_lines++;
- wrote_newlines++;
+ buffered_newlines++;
+ newlines++;
out_ind = 0;
}
static void
-write_buffered_blank_lines(void)
+write_buffered_newlines(void)
{
- for (; buffered_blank_lines > 0; buffered_blank_lines--) {
+ for (; buffered_newlines > 0; buffered_newlines--) {
fputc('\n', output);
- debug_println("output_newline");
+ debug_println("write_newline");
}
}
static void
write_range(const char *s, size_t len)
{
- write_buffered_blank_lines();
+ write_buffered_newlines();
fwrite(s, 1, len, output);
- debug_vis_range("output_range \"", s, len, "\"\n");
+ debug_vis_range("write_range \"", s, len, "\"\n");
for (size_t i = 0; i < len; i++)
- wrote_newlines = s[i] == '\n' ? wrote_newlines + 1 : 0;
+ newlines = s[i] == '\n' ? newlines + 1 : 0;
out_ind = ind_add(out_ind, s, len);
}
static void
write_indent(int new_ind)
{
- write_buffered_blank_lines();
+ write_buffered_newlines();
int ind = out_ind;
@@ -148,16 +149,16 @@ write_indent(int new_ind)
ind = ind - ind % opt.tabsize + n * opt.tabsize;
while (n-- > 0)
fputc('\t', output);
- wrote_newlines = 0;
+ newlines = 0;
}
}
for (; ind < new_ind; ind++) {
fputc(' ', output);
- wrote_newlines = 0;
+ newlines = 0;
}
- debug_println("output_indent %d", ind);
+ debug_println("write_indent %d", ind);
out_ind = ind;
}
@@ -191,10 +192,10 @@ static bool
is_blank_line_optional(void)
{
if (out.prev_line_kind == lk_stmt_head)
- return wrote_newlines >= 1;
+ return newlines >= 1;
if (ps.psyms.top >= 2)
- return wrote_newlines >= 2;
- return wrote_newlines >= 3;
+ return newlines >= 2;
+ return newlines >= 3;
}
static int
@@ -311,7 +312,7 @@ output_line_comment(void)
}
if (out_ind > target_ind)
- write_newline();
+ buffer_newline();
while (com.s + com.len > p && ch_isspace(com.s[com.len - 1]))
com.len--;
@@ -328,9 +329,9 @@ output_line_indented(void)
if (lab.len == 0 && code.len == 0 && com.len == 0)
out.line_kind = lk_blank;
- if (want_blank_line() && wrote_newlines < 2
+ if (want_blank_line() && newlines < 2
&& out.line_kind != lk_blank)
- write_newline();
+ buffer_newline();
/* This kludge aligns function definitions correctly. */
if (ps.ind_level == 0)
@@ -353,8 +354,10 @@ output_line_indented(void)
output_line_code();
if (com.len > 0)
output_line_comment();
+ buffer_newline();
+ if (out.line_kind != lk_blank)
+ write_buffered_newlines();
- write_newline();
out.prev_line_kind = out.line_kind;
}
@@ -407,13 +410,8 @@ output_line(void)
void
output_finish(void)
{
- if (lab.len > 0 || code.len > 0 || com.len > 0)
- output_line();
- if (indent_enabled == indent_on) {
- if (buffered_blank_lines > 1)
- buffered_blank_lines = 1;
- write_buffered_blank_lines();
- } else {
+ output_line();
+ if (indent_enabled != indent_on) {
indent_enabled = indent_last_off_line;
output_line();
}
Home |
Main Index |
Thread Index |
Old Index