-def draw_sharp(expr arrowup, arrowdown) =
- save stem, stemx, stemwidth;
- save outer_space, interbeam;
- save stemlength, extendleft, extendright, height, depth;
-
- stemwidth# := stafflinethickness# + .05 staff_space#;
- define_whole_blacker_pixels (stemwidth);
-
- interbeam := 1.05 staff_space_rounded;
-
- stemlength# := 1.5 staff_space#;
- define_pixels (stemlength);
-
- height# = stemlength#;
- depth# = stemlength#;
- extendright# = 0;
- extendleft# = 0;
- if arrowup:
- height# := height# + 1.2 staff_space#;
- extendright# := extendright# + 1.5 stafflinethickness#;
- fi;
- if arrowdown:
- depth# := depth# + 1.2 staff_space#;
- extendleft# := extendleft# + 1.5 stafflinethickness#;
- fi;
- define_pixels (extendleft, extendright);
- set_char_box (extendleft#, 1.1 staff_space#, depth#, height#);
-
- stem := 7 / 16 * w;
- stemx := hround stem;
- outer_space := hround ((w - stemx - stemwidth) / 2);
-
- w := 2 outer_space + stemx + stemwidth;
- d := d - feta_space_shift;
-
- draw_meta_sharp (w, -.5 interbeam);
- draw_meta_sharp (w, -.5 interbeam + vround interbeam);
-
- % expand the charbox so that it encloses the whole arrow;
- % this must not happen earlier because some commands above
- % still rely on the old width
- w := w + extendright;
-
- pickup pencircle scaled stemwidth;
-
- lft x5 = lft x6 = outer_space;
- lft x7 = lft x8 = outer_space + stemx;
- bot y5 = -stemlength;
- top y6 = vround (1.5 staff_space - stem * beamslope);
- bot y7 = -top y6 + feta_space_shift;
- top y8 = stemlength;
-
- labels (5, 6, 7, 8);
-
- draw_gridline (z5, z6, stemwidth);
- draw_gridline (z7, z8, stemwidth);
-
- if arrowup:
- draw_arrow (z8, stemwidth, up,
- stafflinethickness / 2 + stemwidth / 2, false);
- fi;
- if arrowdown:
- draw_arrow (z5, stemwidth, up,
- stafflinethickness / 2 + stemwidth / 2, true);
- fi;
-
+def draw_sharp (expr arrowup, arrowdown) =
+ save dist_between_stems;
+ save outer_space;
+ save half_height, interbeam_dist;
+
+ half_height# := 0.5 default_height#;
+ define_pixels (half_height);
+ interbeam_dist := default_interbeam_dist;
+
+ set_char_box (0, default_width#, half_height#, half_height#);
+ d := d - feta_space_shift;
+
+ dist_between_stems := hround (7 / 16 * default_width);
+ outer_space := hround ((w - dist_between_stems - stem_thickness) / 2);
+
+ w := 2 outer_space + dist_between_stems + stem_thickness;
+
+ draw_sharp_beam (w, -.5 interbeam_dist);
+ draw_sharp_beam (w, -.5 interbeam_dist + vround interbeam_dist);
+
+ % expand the charbox so that it encloses the whole arrow;
+ % this must not happen earlier because some commands above
+ % still rely on the old width
+ if arrowup:
+ w := w + 1.5 stafflinethickness;
+ h := h + 1.2 staff_space;
+ fi;
+ if arrowdown:
+ b := b + 1.5 stafflinethickness;
+ d := d + 1.2 staff_space;
+ fi;
+
+ pickup pencircle scaled stem_thickness;
+
+ lft x5 = lft x6 = outer_space;
+ lft x7 = lft x8 = outer_space + dist_between_stems;
+ bot y5 = -half_height;
+ top y8 = half_height;
+ z6 = z8 + whatever * ne_beam_dir;
+ bot y7 = -top y6 + feta_space_shift;
+
+ draw_gridline (z5, z6, stem_thickness);
+ draw_gridline (z7, z8, stem_thickness);
+
+ if arrowup:
+ draw_arrow (z8, stem_thickness, up,
+ stafflinethickness / 2 + stem_thickness / 2, false);
+ fi;
+ if arrowdown:
+ draw_arrow (z5, stem_thickness, up,
+ stafflinethickness / 2 + stem_thickness / 2, true);
+ fi;
+
+ labels (5, 6, 7, 8);