Module Name:    src
Committed By:   rillig
Date:           Mon Jun  5 06:43:14 UTC 2023

Modified Files:
        src/usr.bin/indent: io.c

Log Message:
indent: let the output routines keep track of the indentation

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.193 -r1.194 src/usr.bin/indent/io.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/indent/io.c
diff -u src/usr.bin/indent/io.c:1.193 src/usr.bin/indent/io.c:1.194
--- src/usr.bin/indent/io.c:1.193	Sun Jun  4 20:51:19 2023
+++ src/usr.bin/indent/io.c	Mon Jun  5 06:43:14 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: io.c,v 1.193 2023/06/04 20:51:19 rillig Exp $	*/
+/*	$NetBSD: io.c,v 1.194 2023/06/05 06:43:14 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: io.c,v 1.193 2023/06/04 20:51:19 rillig Exp $");
+__RCSID("$NetBSD: io.c,v 1.194 2023/06/05 06:43:14 rillig Exp $");
 
 #include <stdio.h>
 
@@ -46,7 +46,9 @@ __RCSID("$NetBSD: io.c,v 1.193 2023/06/0
 
 struct buffer inp;
 const char *inp_p;
+
 struct output_state out;
+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 */
@@ -99,6 +101,7 @@ output_newline(void)
 	fputc('\n', output);
 	debug_println("output_newline");
 	wrote_newlines++;
+	out_ind = 0;
 }
 
 static void
@@ -108,12 +111,13 @@ output_range(const char *s, size_t len)
 	debug_vis_range("output_range \"", s, len, "\"\n");
 	for (size_t i = 0; i < len; i++)
 		wrote_newlines = s[i] == '\n' ? wrote_newlines + 1 : 0;
+	out_ind = ind_add(out_ind, s, len);
 }
 
-static int
-output_indent(int old_ind, int new_ind)
+static void
+output_indent(int new_ind)
 {
-	int ind = old_ind;
+	int ind = out_ind;
 
 	if (opt.use_tabs) {
 		int tabsize = opt.tabsize;
@@ -133,7 +137,7 @@ output_indent(int old_ind, int new_ind)
 	}
 
 	debug_println("output_indent %d", ind);
-	return ind;
+	out_ind = ind;
 }
 
 static bool
@@ -172,22 +176,20 @@ is_blank_line_optional(void)
 	return wrote_newlines >= 3;
 }
 
-static int
+static void
 output_line_label(void)
 {
 
 	while (lab.len > 0 && ch_isblank(lab.s[lab.len - 1]))
 		lab.len--;
 
-	int ind = output_indent(0, compute_label_indent());
+	output_indent(compute_label_indent());
 	output_range(lab.s, lab.len);
-	return ind_add(ind, lab.s, lab.len);
 }
 
-static int
-output_line_code(int ind)
+static void
+output_line_code(void)
 {
-
 	int target_ind = compute_code_indent();
 	for (int i = 0; i < ps.nparen; i++) {
 		int paren_ind = ps.paren[i].indent;
@@ -200,23 +202,21 @@ output_line_code(int ind)
 		}
 	}
 
-	int code_ind = output_indent(ind, target_ind);
-	if (ind > 0 && code_ind == ind)
-		output_range(" ", 1), code_ind++;
+	int label_end_ind = out_ind;
+	output_indent(target_ind);
+	if (label_end_ind > 0 && out_ind == label_end_ind)
+		output_range(" ", 1);
 	output_range(code.s, code.len);
-	return ind_add(code_ind, code.s, code.len);
 }
 
 static void
-output_line_comment(int ind)
+output_line_comment(void)
 {
-	int target_ind = ps.com_ind;
-	const char *p = com.s;
-
-	target_ind += ps.comment_delta;
+	int target_ind = ps.com_ind + ps.comment_delta;
+	const char *p;
 
 	/* consider original indentation in case this is a box comment */
-	for (; *p == '\t'; p++)
+	for (p = com.s; *p == '\t'; p++)
 		target_ind += opt.tabsize;
 
 	for (; target_ind < 0; p++) {
@@ -230,16 +230,13 @@ output_line_comment(int ind)
 		}
 	}
 
-	/* if comment can't fit on this line, put it on the next line */
-	if (ind > target_ind) {
+	if (out_ind > target_ind)
 		output_newline();
-		ind = 0;
-	}
 
 	while (com.s + com.len > p && ch_isspace(com.s[com.len - 1]))
 		com.len--;
 
-	(void)output_indent(ind, target_ind);
+	output_indent(target_ind);
 	output_range(p, com.len - (size_t)(p - com.s));
 
 	ps.comment_delta = ps.n_comment_delta;
@@ -283,13 +280,12 @@ output_line(void)
 		    && is_blank_line_optional())
 			goto dont_write_line;
 
-		int ind = 0;
 		if (lab.len > 0)
-			ind = output_line_label();
+			output_line_label();
 		if (code.len > 0)
-			ind = output_line_code(ind);
+			output_line_code();
 		if (com.len > 0)
-			output_line_comment(ind);
+			output_line_comment();
 
 		output_newline();
 		out.prev_line_kind = out.line_kind;

Reply via email to