aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/troff
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-12-14 19:58:32 +0000
committerrsc <devnull@localhost>2005-12-14 19:58:32 +0000
commit1076c720dff8ea5f05dfc8f5c7c1cd192330eb63 (patch)
tree41e2f594f02c46d43d8aa6f13d0f30f30da40792 /src/cmd/troff
parentbaa6e34b72e5d978fb0da4266c4527e7e582e675 (diff)
downloadplan9port-1076c720dff8ea5f05dfc8f5c7c1cd192330eb63.tar.gz
plan9port-1076c720dff8ea5f05dfc8f5c7c1cd192330eb63.tar.bz2
plan9port-1076c720dff8ea5f05dfc8f5c7c1cd192330eb63.zip
add .ei for else-if
Diffstat (limited to 'src/cmd/troff')
-rw-r--r--src/cmd/troff/fns.h1
-rw-r--r--src/cmd/troff/n5.c23
-rw-r--r--src/cmd/troff/ni.c1
3 files changed, 19 insertions, 6 deletions
diff --git a/src/cmd/troff/fns.h b/src/cmd/troff/fns.h
index 922a3a80..d04fd037 100644
--- a/src/cmd/troff/fns.h
+++ b/src/cmd/troff/fns.h
@@ -172,6 +172,7 @@ void casefl(void);
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 2c7d3287..72f9bbb6 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 envcopy(Env *e1, Env *e2) /* copy env e2 to e1 */
}
+void caseei(void)
+{
+ if (--ifx < 0) {
+ ifx = 0;
+ iflist[0] = 0;
+ }
+ caseif1(1);
+ ifx++;
+}
+
void caseel(void)
{
if (--ifx < 0) {
@@ -621,7 +631,6 @@ void caseel(void)
caseif1(2);
}
-
void caseie(void)
{
if (ifx >= NIF) {
@@ -629,11 +638,11 @@ void caseie(void)
ifx = 0;
edone(040);
}
+ iflist[ifx] = 1;
caseif1(1);
ifx++;
}
-
void caseif(void)
{
caseif1(0);
@@ -645,7 +654,7 @@ void caseif1(int x)
int notflag, true;
Tchar i;
- if (x == 2) {
+ if (x == 2) { /* .el */
notflag = 0;
true = iflist[ifx];
goto i1;
@@ -691,8 +700,10 @@ void caseif1(int x)
}
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 a80cec64..27a0ff3d 100644
--- a/src/cmd/troff/ni.c
+++ b/src/cmd/troff/ni.c
@@ -70,6 +70,7 @@ Contab contab[NM] = {
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),