shithub: neatroff

Download patch

ref: 9e9121225b695ed05d8d1a12c9ce8caa21a00528
parent: c2d797db53a5231417096f57a0a1f38de98d80df
author: Ali Gholami Rudi <ali@rudi.ir>
date: Sat Apr 27 06:01:06 EDT 2013

ren: add \c

--- a/ren.c
+++ b/ren.c
@@ -23,6 +23,7 @@
 static int ren_f = -1;		/* last rendered n_f */
 static int ren_s = -1;		/* last rendered n_s */
 static int ren_div;		/* rendering a diversion */
+static int ren_part;		/* partial line (\c) */
 
 static int ren_backed = -1;	/* pushed back character */
 
@@ -554,10 +555,9 @@
 {
 	char c[GNLEN * 4];
 	char arg[ILNLEN];
-	char widbuf[16];
 	struct glyph *g;
 	int zerowid = 0;
-	int n, w;
+	int w;
 	nextchar(c, next);
 	if (c[0] == ' ' || c[0] == '\n') {
 		adj_put(adj, charwid(dev_spacewid(), n_s), c);
@@ -579,10 +579,9 @@
 					nextchar(c + strlen(c), next);
 				}
 			}
-		} else if (c[1] == 'w') {
-			n = ren_wid(next, back);
-			sprintf(widbuf, "%d", n);
-			in_push(widbuf, NULL);
+		} else if (c[1] == 'c') {
+			if (adj == cadj)
+				ren_part = 1;
 			return 0;
 		} else if (strchr(" bDdfhkLlorsuvXxz0^|{}&", c[1])) {
 			escarg_ren(arg, c[1], next, back);
@@ -640,20 +639,22 @@
 	ren_first();			/* transition to the first page */
 	c = ren_next();
 	while (c >= 0) {
-		if (c == ' ' || c == '\n') {
+		if (!ren_part && (c == ' ' || c == '\n')) {
 			ren_back(c);
 			ren_char(cadj, ren_next, ren_back);
 		}
 		while (adj_full(cadj, !n_ce && n_u))
 			ren_br(0);
-		if (c == '\n') {	/* end of input line */
+		if (c == '\n')		/* end of input line */
 			n_lb = adj_wid(cadj);
+		if (c == '\n' && !ren_part)
 			n_ce = MAX(0, n_ce - 1);
-		}
-		if (c != ' ' && c != '\n') {
+		if (!ren_part && (c != ' ' && c != '\n')) {
 			ren_back(c);
 			ren_char(cadj, ren_next, ren_back);
 		}
+		if (ren_part && c == '\n')
+			ren_part = 0;
 		c = ren_next();
 	}
 	ren_br(1);