ref: 47de129642654bcb5793cf64e0ea1f9b9dee9aeb
parent: eb90d8300b54b89cd1b4551188bcd45263e345e4
author: Ali Gholami Rudi <ali@rudi.ir>
date: Sat May 6 07:13:59 EDT 2017
tr: .blm request Suggested and tested by aksr <aksr@t-com.me>.
--- a/tr.c
+++ b/tr.c
@@ -6,6 +6,7 @@
#include "roff.h"
static int tr_nl = 1; /* just read a newline */
+static int tr_bm = -1; /* blank line macro */
char c_pc[GNLEN] = "%"; /* page number character */
int c_ec = '\\'; /* escape character */
int c_cc = '.'; /* control character */
@@ -834,6 +835,11 @@
font_map(fn, args[2], args[3]);
}
+static void tr_blm(char **args)
+{+ tr_bm = args[1] ? map(args[1]) : -1;
+}
+
/* read a macro argument */
static int tr_arg(struct sbuf *sbuf, int brk, int (*next)(void), void (*back)(int))
{@@ -1016,6 +1022,7 @@
{"am", tr_de, mkargs_reg1}, {"as", tr_as, mkargs_ds}, {"bd", tr_bd},+ {"blm", tr_blm}, {"bp", tr_bp}, {"br", tr_br}, {"c2", tr_c2},@@ -1147,12 +1154,18 @@
}
cp_back(c2);
}
- if (c < 0 || (c != c_cc && c != c_c2)) {+ if (c < 0 || (c != c_cc && c != c_c2 && (c != '\n' || tr_bm < 0))) {cp_back(c);
return 1;
}
cp_reqbeg();
- cmd = read_name(n_cp);
+ if (c != '\n') {+ cmd = read_name(n_cp);
+ } else { /* blank line macro */+ cmd = malloc(strlen(map_name(tr_bm)) + 1);
+ strcpy(cmd, map_name(tr_bm));
+ cp_back(c);
+ }
args[0] = dotted(cmd, c);
req = str_dget(map(cmd));
if (req) {--
⑨