3 #define abs(x) ((x) > 0 ? (x) : (-(x)))
5 extern void brack(int, char *, char *, char *);
7 void paren(int leftc
, int p1
, int rightc
)
11 double v
, bv
; /* v = shift of inside, bv = shift of brackets */
12 extern double Parenbase
, Parenshift
, Parenheight
;
14 bv
= ttype
== DEVPOST
? Parenshift
: 0; /* move brackets down this much */
18 lfont
[yyval
] = rfont
[yyval
] = 0;
19 n
= REL(h1
,ps
) + 0.99; /* ceiling */
23 if (leftc
== '{' || rightc
== '}') {
29 eht
[yyval
] = EM((double) n
+ Parenheight
, ps
);
30 ebase
[yyval
] = eht
[yyval
]/2 - EM(Parenbase
, ps
);
32 /* try to cope with things that are badly centered */
33 /* (top heavy or bottom heavy) */
34 if (abs(h1
/2 - b1
) >= EM(0.5, ps
))
35 v
= REL(-ebase
[yyval
] + (eht
[yyval
]-h1
)/2 + b1
, ps
);
37 v
= 0; /* don't shift it at all */
39 printf(".ds %d \\^", yyval
); /* was \| */
41 printf("\\v'%gm'", bv
);
43 case 'n': /* nothing */
50 brack(m
, "\\(bv", "\\(bv", "\\(lf");
52 case 'c': /* ceiling */
56 brack(m
, "\\(lc", "\\(bv", "\\(bv");
60 for(j
= 0; j
< m
; j
+= 2) printf("\\(bv");
62 for(j
= 0; j
< m
; j
+= 2) printf("\\(bv");
66 brack(m
, "\\(lt", "\\(bv", "\\(lb");
69 brack(m
, "\\(lc", "\\(bv", "\\(lf");
72 brack(m
, "|", "|", "|");
75 brack(m
, (char *) &leftc
, (char *) &leftc
, (char *) &leftc
);
79 printf("\\v'%gm'", -bv
);
81 printf("\\v'%gm'\\*(%d\\v'%gm'", -v
, p1
, v
);
86 printf("\\v'%gm'", bv
);
92 brack(m
, "\\(bv", "\\(bv", "\\(rf");
94 case 'c': /* ceiling */
98 brack(m
, "\\(rc", "\\(bv", "\\(bv");
102 for(j
= 0; j
< m
; j
+= 2) printf("\\(bv");
104 for(j
= 0; j
< m
; j
+= 2) printf("\\(bv");
108 brack(m
, "\\(rc", "\\(bv", "\\(rf");
111 brack(m
, "\\(rt", "\\(bv", "\\(rb");
114 brack(m
, "|", "|", "|");
117 brack(m
, (char *) &rightc
, (char *) &rightc
, (char *) &rightc
);
121 printf("\\v'%gm'", -bv
);
124 dprintf(".\tcurly: h=%g b=%g n=%d v=%g l=%c, r=%c\n",
125 eht
[yyval
], ebase
[yyval
], n
, v
, leftc
, rightc
);
128 void brack(int m
, char *t
, char *c
, char *b
)
132 for( j
=0; j
< m
; j
++)