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