shithub: neatroff

Download patch

ref: 945538cfba3ce64d505ed4e944a21a8d5b85ebb8
parent: 69e9e62bae8ef3eb372d06d143349a5d2b429cee
author: Ali Gholami Rudi <ali@rudi.ir>
date: Fri Nov 23 13:56:56 EST 2012

tr: handle the second argument of .de

--- a/tr.c
+++ b/tr.c
@@ -95,24 +95,34 @@
 	str_set(N_ID(args[1][0], args[1][1]), args[2]);
 }
 
+static char *arg_regname(char *s, int len);
+
 static void tr_de(int argc, char **args)
 {
 	struct sbuf sbuf;
+	char buf[4];
+	int end[4] = {'.'};
 	int c;
+	int i;
 	if (argc <= 1)
 		return;
+	if (argc > 2 && args[2]) {
+		end[0] = args[2][0];
+		end[1] = args[2][1];
+	}
 	sbuf_init(&sbuf);
 	while ((c = cp_next()) >= 0) {
 		sbuf_add(&sbuf, c);
 		if (c == '\n') {
+			sbuf_add(&sbuf, c);
 			c = cp_next();
 			if (c == '.') {
-				c = cp_next();
-				if (c == '.')
+				arg_regname(buf, 4);
+				if (buf[0] == end[0] && buf[1] == end[1])
 					break;
 				sbuf_add(&sbuf, '.');
-				if (c >= 0)
-					sbuf_add(&sbuf, c);
+				for (i = 0; buf[i]; i++)
+					sbuf_add(&sbuf, (unsigned char) buf[i]);
 			} else {
 				if (c >= 0)
 					sbuf_add(&sbuf, c);