1 /*-
2 * Copyright (c) 1991 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * %sccs.include.proprietary.c%
6 */
7
8 #ifndef lint
9 static char sccsid[] = "@(#)diacrit.c 4.4 (Berkeley) 04/17/91";
10 #endif /* not lint */
11
12 # include "e.h"
13 # include "e.def"
14
diacrit(p1,type)15 diacrit(p1, type) int p1, type; {
16 int c, t;
17 #ifndef NEQN
18 int effps;
19 #endif NEQN
20
21 c = oalloc();
22 t = oalloc();
23 #ifdef NEQN
24 nrwid(p1, ps, p1);
25 printf(".nr 10 %du\n", max(eht[p1]-ebase[p1]-VERT(2),0));
26 #else NEQN
27 effps = EFFPS(ps);
28 nrwid(p1, effps, p1);
29 printf(".nr 10 %du\n", VERT(max(eht[p1]-ebase[p1]-6*ps,0))); /* vertical shift if high */
30 printf(".if \\n(ct>1 .nr 10 \\n(10+\\s%d.25m\\s0\n", effps);
31 printf(".nr %d \\s%d.1m\\s0\n", t, effps); /* horiz shift if high */
32 printf(".if \\n(ct>1 .nr %d \\s%d.15m\\s0\n", t, effps);
33 #endif NEQN
34 switch(type) {
35 case VEC: /* vec */
36 #ifndef NEQN
37 printf(".ds %d \\v'-.4m'\\s%d\\(->\\s0\\v'.4m'\n",
38 c, max(effps-3, 6));
39 break;
40 #endif NEQN
41 case DYAD: /* dyad */
42 #ifdef NEQN
43 printf(".ds %d \\v'-1'_\\v'1'\n", c);
44 #else NEQN
45 printf(".ds %d \\v'-.4m'\\s%d\\z\\(<-\\(->\\s0\\v'.4m'\n",
46 c, max(effps-3, 6));
47 #endif NEQN
48 break;
49 case HAT:
50 printf(".ds %d ^\n", c);
51 break;
52 case TILDE:
53 printf(".ds %d ~\n", c);
54 break;
55 case DOT:
56 #ifndef NEQN
57 printf(".ds %d \\s%d\\v'-.67m'.\\v'.67m'\\s0\n", c, effps);
58 #else NEQN
59 printf(".ds %d \\v'-1'.\\v'1'\n", c);
60 #endif NEQN
61 break;
62 case DOTDOT:
63 #ifndef NEQN
64 printf(".ds %d \\s%d\\v'-.67m'..\\v'.67m\\s0'\n", c, effps);
65 #else NEQN
66 printf(".ds %d \\v'-1'..\\v'1'\n", c);
67 #endif NEQN
68 break;
69 case BAR:
70 #ifndef NEQN
71 printf(".ds %d \\s%d\\v'.18m'\\h'.05m'\\l'\\n(%du-.1m\\(rn'\\h'.05m'\\v'-.18m'\\s0\n",
72 c, effps, p1);
73 #else NEQN
74 printf(".ds %d \\v'-1'\\l'\\n(%du'\\v'1'\n",
75 c, p1);
76 #endif NEQN
77 break;
78 case UNDER:
79 #ifndef NEQN
80 printf(".ds %d \\l'\\n(%du\\(ul'\n", c, p1);
81 printf(".nr %d 0\n", t);
82 printf(".nr 10 0-%d\n", ebase[p1]);
83 #else NEQN
84 printf(".ds %d \\l'\\n(%du'\n", c, p1);
85 #endif NEQN
86 break;
87 }
88 nrwid(c, ps, c);
89 #ifndef NEQN
90 if (lfont[p1] != ITAL)
91 printf(".nr %d 0\n", t);
92 printf(".as %d \\h'-\\n(%du-\\n(%du/2u+\\n(%du'\\v'0-\\n(10u'\\*(%d",
93 p1, p1, c, t, c);
94 printf("\\v'\\n(10u'\\h'-\\n(%du+\\n(%du/2u-\\n(%du'\n", c, p1, t);
95 /* BUG - should go to right end of widest */
96 #else NEQN
97 printf(".as %d \\h'-\\n(%du-\\n(%du/2u'\\v'0-\\n(10u'\\*(%d",
98 p1, p1, c, c);
99 printf("\\v'\\n(10u'\\h'-\\n(%du+\\n(%du/2u'\n", c, p1);
100 #endif NEQN
101 #ifndef NEQN
102 if (type != UNDER)
103 eht[p1] += VERT( (6*ps*15) / 100); /* 0.15m */
104 if(dbg)printf(".\tdiacrit: %c over S%d, lf=%c, rf=%c, h=%d,b=%d\n",
105 type, p1, lfont[p1], rfont[p1], eht[p1], ebase[p1]);
106 #else NEQN
107 if (type != UNDER)
108 eht[p1] += VERT(1);
109 if (dbg) printf(".\tdiacrit: %c over S%d, h=%d, b=%d\n", type, p1, eht[p1], ebase[p1]);
110 #endif NEQN
111 ofree(c); ofree(t);
112 }
113