|
|
1.1 root 1: # include "e.h"
2:
3: paren(leftc, p1, rightc)
4: int p1, leftc, rightc;
5: {
6: int n, m, j;
7: float h1, b1, v;
8: extern float Parenbase;
9:
10: h1 = eht[p1];
11: b1 = ebase[p1];
12: yyval = p1;
13: lfont[yyval] = rfont[yyval] = 0;
14: n = REL(h1,ps) + 0.99; /* ceiling */
15: if (n < 2)
16: n = 1;
17: m = n - 2;
18: if (leftc == '{' || rightc == '}') {
19: n = n%2 ? n : ++n;
20: if (n < 3)
21: n = 3;
22: m = n-3;
23: }
24: eht[yyval] = EM((float) n, ps);
25: ebase[yyval] = eht[yyval]/2 - EM(Parenbase, ps);
26: /* v = REL(-ebase[yyval] + (eht[yyval]-h1)/2 + b1, ps); */
27: v = 0; /* in other words, don't shift it at all */
28: printf(".ds %d \\|", yyval);
29: switch (leftc) {
30: case 'n': /* nothing */
31: case '\0':
32: break;
33: case 'f': /* floor */
34: if (n <= 1)
35: printf("\\(lf");
36: else
37: brack(m, "\\(bv", "\\(bv", "\\(lf");
38: break;
39: case 'c': /* ceiling */
40: if (n <= 1)
41: printf("\\(lc");
42: else
43: brack(m, "\\(lc", "\\(bv", "\\(bv");
44: break;
45: case '{':
46: printf("\\b'\\(lt");
47: for(j = 0; j < m; j += 2) printf("\\(bv");
48: printf("\\(lk");
49: for(j = 0; j < m; j += 2) printf("\\(bv");
50: printf("\\(lb'");
51: break;
52: case '(':
53: brack(m, "\\(lt", "\\(bv", "\\(lb");
54: break;
55: case '[':
56: brack(m, "\\(lc", "\\(bv", "\\(lf");
57: break;
58: case '|':
59: brack(m, "|", "|", "|");
60: break;
61: default:
62: brack(m, (char *) &leftc, (char *) &leftc, (char *) &leftc);
63: break;
64: }
65: if (v)
66: printf("\\v'%gm'\\*(%d\\v'%gm'", -v, p1, v);
67: else
68: printf("\\*(%d", p1);
69: if (rightc) {
70: switch (rightc) {
71: case 'f': /* floor */
72: if (n <= 1)
73: printf("\\(rf");
74: else
75: brack(m, "\\(bv", "\\(bv", "\\(rf");
76: break;
77: case 'c': /* ceiling */
78: if (n <= 1)
79: printf("\\(rc");
80: else
81: brack(m, "\\(rc", "\\(bv", "\\(bv");
82: break;
83: case '}':
84: printf("\\b'\\(rt");
85: for(j = 0; j < m; j += 2) printf("\\(bv");
86: printf("\\(rk");
87: for(j = 0; j < m; j += 2) printf("\\(bv");
88: printf("\\(rb'");
89: break;
90: case ']':
91: brack(m, "\\(rc", "\\(bv", "\\(rf");
92: break;
93: case ')':
94: brack(m, "\\(rt", "\\(bv", "\\(rb");
95: break;
96: case '|':
97: brack(m, "|", "|", "|");
98: break;
99: default:
100: brack(m, (char *) &rightc, (char *) &rightc, (char *) &rightc);
101: break;
102: }
103: }
104: printf("\n");
105: dprintf(".\tcurly: h=%g b=%g n=%d v=%g l=%c, r=%c\n",
106: eht[yyval], ebase[yyval], n, v, leftc, rightc);
107: }
108:
109: brack(m, t, c, b)
110: int m;
111: char *t, *c, *b;
112: {
113: int j;
114: printf("\\b'%s", t);
115: for( j=0; j < m; j++)
116: printf("%s", c);
117: printf("%s'", b);
118: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.