+ Font_metric *fm =Font_interface::get_default_font (me);
+ Molecule squiggle = fm->find_by_name ("scripts-arpeggio");
+
+ Real arrow_space = (dir) ? Staff_symbol_referencer::staff_space (me) : 0.0;
+
+ Real y = heads[LEFT];
+ while (y < heads[RIGHT] - arrow_space)
+ {
+ mol.add_at_edge (Y_AXIS, UP,squiggle, 0.0, 0);
+ y+= squiggle. extent (Y_AXIS).length ();
+ }
+ mol.translate_axis (heads[LEFT], Y_AXIS);
+ if (dir)
+ mol.add_at_edge (Y_AXIS, dir,
+ fm->find_by_name ("scripts-arpeggio-arrow-" + to_string (dir)), 0.0, 0);
+
+ return mol.smobbed_copy () ;
+}
+
+/* Draws a vertical bracket to the left of a chord
+ Chris Jackson <chris@fluffhouse.org.uk> */
+
+MAKE_SCHEME_CALLBACK (Arpeggio, brew_chord_bracket, 1);
+SCM
+Arpeggio::brew_chord_bracket (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+
+ Grob * common = me;
+ for (SCM s = me->get_grob_property ("stems"); gh_pair_p (s); s = ly_cdr (s))
+ {
+ Grob * stem = unsmob_grob (ly_car (s));
+ common = common->common_refpoint (Staff_symbol_referencer::get_staff_symbol (stem),
+ Y_AXIS);
+ }
+
+ Interval heads;
+ Real my_y = me->relative_coordinate (common, Y_AXIS);
+
+ for (SCM s = me->get_grob_property ("stems"); gh_pair_p (s); s = ly_cdr (s))