Commit | Line | Data |
---|---|---|
f6227721 | 1 | #ifndef lint |
0f4556f1 | 2 | static char sccsid[] = "@(#)paren.c 4.3 8/11/83"; |
f6227721 | 3 | #endif |
f9b0a841 BS |
4 | |
5 | # include "e.h" | |
6 | ||
7 | paren(leftc, p1, rightc) int p1, leftc, rightc; { | |
8 | int n, m, h1, j, b1, v; | |
9 | h1 = eht[p1]; b1 = ebase[p1]; | |
10 | yyval = p1; | |
6f1a2a65 | 11 | #ifndef NEQN |
f9b0a841 BS |
12 | lfont[yyval] = rfont[yyval] = 0; |
13 | n = (h1+(6*EFFPS(ps)-1))/(6*EFFPS(ps)); | |
6f1a2a65 BS |
14 | #else NEQN |
15 | n = max(b1+VERT(1), h1-b1-VERT(1)) / VERT(1); | |
16 | #endif NEQN | |
f9b0a841 BS |
17 | if( n<2 ) n = 1; |
18 | m = n-2; | |
19 | if (leftc=='{' || rightc == '}') { | |
20 | n = n%2 ? n : ++n; | |
21 | if( n<3 ) n=3; | |
22 | m = n-3; | |
23 | } | |
6f1a2a65 | 24 | #ifndef NEQN |
f9b0a841 BS |
25 | eht[yyval] = VERT(6 * ps * n); |
26 | ebase[yyval] = b1 + (eht[yyval]-h1)/2; | |
27 | v = b1 - h1/2 + VERT( (ps*6*4)/10 ); | |
6f1a2a65 BS |
28 | #else NEQN |
29 | eht[yyval] = VERT(2 * n); | |
30 | ebase[yyval] = (n)/2 * VERT(2); | |
31 | if (n%2 == 0) | |
32 | ebase[yyval] -= VERT(1); | |
33 | v = b1 - h1/2 + VERT(1); | |
34 | #endif NEQN | |
f9b0a841 BS |
35 | printf(".ds %d \\|\\v'%du'", yyval, v); |
36 | switch( leftc ) { | |
37 | case 'n': /* nothing */ | |
38 | case '\0': | |
39 | break; | |
40 | case 'f': /* floor */ | |
41 | if (n <= 1) | |
42 | printf("\\(lf"); | |
43 | else | |
44 | brack(m, "\\(bv", "\\(bv", "\\(lf"); | |
45 | break; | |
46 | case 'c': /* ceiling */ | |
47 | if (n <= 1) | |
48 | printf("\\(lc"); | |
49 | else | |
50 | brack(m, "\\(lc", "\\(bv", "\\(bv"); | |
51 | break; | |
52 | case '{': | |
53 | printf("\\b'\\(lt"); | |
54 | for(j = 0; j < m; j += 2) printf("\\(bv"); | |
55 | printf("\\(lk"); | |
56 | for(j = 0; j < m; j += 2) printf("\\(bv"); | |
57 | printf("\\(lb'"); | |
58 | break; | |
59 | case '(': | |
60 | brack(m, "\\(lt", "\\(bv", "\\(lb"); | |
61 | break; | |
62 | case '[': | |
63 | brack(m, "\\(lc", "\\(bv", "\\(lf"); | |
64 | break; | |
65 | case '|': | |
66 | brack(m, "|", "|", "|"); | |
67 | break; | |
68 | default: | |
69 | brack(m, (char *) &leftc, (char *) &leftc, (char *) &leftc); | |
70 | break; | |
71 | } | |
72 | printf("\\v'%du'\\*(%d", -v, p1); | |
73 | if( rightc ) { | |
74 | printf("\\|\\v'%du'", v); | |
75 | switch( rightc ) { | |
76 | case 'f': /* floor */ | |
77 | if (n <= 1) | |
78 | printf("\\(rf"); | |
79 | else | |
80 | brack(m, "\\(bv", "\\(bv", "\\(rf"); | |
81 | break; | |
82 | case 'c': /* ceiling */ | |
83 | if (n <= 1) | |
84 | printf("\\(rc"); | |
85 | else | |
86 | brack(m, "\\(rc", "\\(bv", "\\(bv"); | |
87 | break; | |
88 | case '}': | |
89 | printf("\\b'\\(rt"); | |
90 | for(j = 0; j< m; j += 2)printf("\\(bv"); | |
91 | printf("\\(rk"); | |
92 | for(j = 0; j< m; j += 2) printf("\\(bv"); | |
93 | printf("\\(rb'"); | |
94 | break; | |
95 | case ']': | |
96 | brack(m, "\\(rc", "\\(bv", "\\(rf"); | |
97 | break; | |
98 | case ')': | |
99 | brack(m, "\\(rt", "\\(bv", "\\(rb"); | |
100 | break; | |
101 | case '|': | |
102 | brack(m, "|", "|", "|"); | |
103 | break; | |
104 | default: | |
105 | brack(m, (char *) &rightc, (char *) &rightc, (char *) &rightc); | |
106 | break; | |
107 | } | |
108 | printf("\\v'%du'", -v); | |
109 | } | |
110 | printf("\n"); | |
111 | if(dbg)printf(".\tcurly: h=%d b=%d n=%d v=%d l=%c, r=%c\n", | |
112 | eht[yyval], ebase[yyval], n, v, leftc, rightc); | |
113 | } | |
114 | ||
115 | brack(m, t, c, b) int m; char *t, *c, *b; { | |
116 | int j; | |
117 | printf("\\b'%s", t); | |
118 | for( j=0; j<m; j++) | |
119 | printf("%s", c); | |
120 | printf("%s'", b); | |
121 | } |