9 char direction_char(int y_sign)
29 Lookup::half_slur_middlepart(Real &dx, int dir)
31 if (dx >= convert_dimen(400,"pt")) // todo
32 error ("halfslur too large");
33 int widx = int(floor(dx / 4.0));
37 WARN << "slur too narrow\n";
42 s.dim.y = Interval(MIN(0,0), MAX(0,0));
43 s.dim.x = Interval(0,dx);
45 String f = String("\\hslurchar");
46 f += direction_char(0);
53 f+=String( "{" ) + idx + "}";
56 a.translate(Offset(dx/2,0));
57 s.tex = a.TeXstring();
62 Lookup::half_slur(int dy, Real &dx, int dir, int xpart)
65 return half_slur_middlepart(dx, dir);
69 if (dx >= convert_dimen(96,"pt")) {
70 WARN << "Slur half too wide.";
71 dx = convert_dimen(96,"pt");
74 widx = int(rint(dx/12.0));
79 WARN << "slur too narrow\n";
83 s.dim.x = Interval(0,dx);
84 s.dim.y = Interval(MIN(0,dy), MAX(0,dy));
87 String f = String("\\hslurchar");
89 f+= direction_char(dir);
98 idx = widx * 16 + hidx;
102 f+=String( "{" ) + idx + "}";
111 Lookup::slur (int dy , Real &dx, int dir)
112 { // ugh. assuming pt here.
114 int y_sign = sgn(dy);
116 bool large = dy > 16;
119 large |= dx>= convert_dimen(4*16, "pt");
121 large |= dx>= convert_dimen(4*54, "pt");
124 return big_slur(dy, dx, dir);
127 int widx = int(floor(dx/4.0)); // slurs better too small..
132 WARN << "slur too narrow\n";
140 error("slur to steep");
144 s.dim.x = Interval(0,dx);
145 s.dim.y = Interval(MIN(0,dy), MAX(0,dy));
147 String f = String("\\slurchar") + direction_char(y_sign);
151 idx = hidx * 16 + widx;
155 if (dx >= convert_dimen(4*54, "pt"))
156 error("slur too wide");
162 f+=String( "{" ) + idx + "}";
166 a.translate(Offset(dx/2,0));
168 s.tex = a.TeXstring();
173 Lookup::big_slur(int dy , Real &dx, int dir)
175 assert(dx >= convert_dimen(24,"pt"));
176 Real slur_extra =ABS(dy) /2.0 + 2;
177 int l_dy = int(Real (dy)/2 + slur_extra*dir);
178 int r_dy = dy - l_dy;
180 Real left_wid = dx/4.0;
181 Real right_wid = left_wid;
183 Atom l = half_slur(l_dy, left_wid, dir, -1);
184 Atom r = half_slur(r_dy, right_wid, dir, 1);
185 Real mid_wid = dx - left_wid - right_wid;
187 Atom m = half_slur(0, mid_wid, dir, 0);
192 a.translate(Offset(0,slur_extra * internote()));
195 mol.translate(Offset(0, l_dy * internote()));
197 s.tex = mol.TeXstring();
198 s.dim = mol.extent();