-int
-Note_head::compare (Note_head *const &a, Note_head * const &b)
-{
- return sign(a->position_f () - b->position_f ());
+ string idx_symmetric;
+ string idx_directed;
+ string idx_either;
+ idx_symmetric = idx_either = "noteheads.s" + suffix;
+ Stencil out = fm->find_by_name (idx_symmetric);
+ if (out.is_empty ())
+ {
+ string prefix = "noteheads.";
+
+ Grob *stem = unsmob_grob (me->get_object ("stem"));
+ Direction stem_dir = stem ? get_grob_direction (stem) : CENTER;
+
+ if (stem_dir == CENTER)
+ programming_error ("must have stem dir for note head");
+
+ idx_directed = idx_either =
+ prefix + ((stem_dir == UP) ? "u" : "d") + suffix;
+ out = fm->find_by_name (idx_directed);
+ }
+
+
+ if (out.is_empty ())
+ {
+ me->warning (_f ("none of note heads `%s' or `%s' found",
+ idx_symmetric.c_str (), idx_directed.c_str ()));
+ out = Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL);
+ }
+ else
+ *font_char = idx_either;
+
+ return out;