add .ei for else-if
diff --git a/src/cmd/troff/fns.h b/src/cmd/troff/fns.h index 922a3a8..d04fd03 100644 --- a/src/cmd/troff/fns.h +++ b/src/cmd/troff/fns.h
@@ -172,6 +172,7 @@ void caseev(void); void envcopy(Env *e1, Env *e2); void caseel(void); +void caseei(void); void caseie(void); void casexif(void); void caseif(void);
diff --git a/src/cmd/troff/n5.c b/src/cmd/troff/n5.c index 2c7d328..72f9bbb 100644 --- a/src/cmd/troff/n5.c +++ b/src/cmd/troff/n5.c
@@ -8,7 +8,7 @@ #include "fns.h" #include "ext.h" -int iflist[NIF]; +int iflist[NIF]; /* whether 'else' is true */ int ifx; int ifnum = 0; /* trying numeric expression for .if or .ie condition */ @@ -612,6 +612,16 @@ } +void caseei(void) +{ + if (--ifx < 0) { + ifx = 0; + iflist[0] = 0; + } + caseif1(1); + ifx++; +} + void caseel(void) { if (--ifx < 0) { @@ -621,7 +631,6 @@ caseif1(2); } - void caseie(void) { if (ifx >= NIF) { @@ -629,11 +638,11 @@ ifx = 0; edone(040); } + iflist[ifx] = 1; caseif1(1); ifx++; } - void caseif(void) { caseif1(0); @@ -645,7 +654,7 @@ int notflag, true; Tchar i; - if (x == 2) { + if (x == 2) { /* .el */ notflag = 0; true = iflist[ifx]; goto i1; @@ -691,8 +700,10 @@ } i1: true ^= notflag; - if (x == 1) - iflist[ifx] = !true; + if (x == 1) { /* .ie or .ei */ + true = true && iflist[ifx]; + iflist[ifx] = iflist[ifx] && !true; + } if (true) { i2: while ((cbits(i = getch())) == ' ')
diff --git a/src/cmd/troff/ni.c b/src/cmd/troff/ni.c index a80cec6..27a0ff3 100644 --- a/src/cmd/troff/ni.c +++ b/src/cmd/troff/ni.c
@@ -70,6 +70,7 @@ C(PAIR('n', 'r'), casenr), C(PAIR('i', 'f'), caseif), C(PAIR('i', 'e'), caseie), + C(PAIR('e', 'i'), caseei), C(PAIR('e', 'l'), caseel), C(PAIR('p', 'o'), casepo), C(PAIR('t', 'l'), casetl),