/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
static Stencil
internal_print (Grob *me, string *font_char)
{
- SCM style = me->get_property ("style");
- if (!scm_is_symbol (style))
- style = ly_symbol2scm ("default");
+ string style = robust_symbol2string (me->get_property ("style"), "default");
string suffix = to_string (min (robust_scm2int (me->get_property ("duration-log"), 2), 2));
- if (style != ly_symbol2scm ("default"))
- {
- SCM gn = me->get_property ("glyph-name");
- if (scm_is_string (gn))
- suffix = ly_scm2string (gn);
- }
+ if (style != "default")
+ suffix = robust_scm2string (me->get_property ("glyph-name"), "");
Font_metric *fm = Font_interface::get_default_font (me);
+ string prefix = "noteheads.";
string idx_symmetric;
string idx_directed;
- string idx_either;
- idx_symmetric = idx_either = "noteheads.s" + suffix;
- Stencil out = fm->find_by_name (idx_symmetric);
+ string idx_either = idx_symmetric = prefix + "s";
+ Stencil out = fm->find_by_name (idx_either + suffix);
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);
+ idx_either = idx_directed = prefix + (stem_dir == UP ? "u" : "d");
+ out = fm->find_by_name (idx_either + suffix);
+ }
+
+ if (style == "mensural"
+ || style == "neomensural"
+ || style == "petrucci"
+ || style == "baroque")
+ {
+ if (!Staff_symbol_referencer::on_line
+ (me,
+ robust_scm2int (me->get_property ("staff-position"), 0)))
+ {
+ Stencil test = fm->find_by_name (idx_either + "r" + suffix);
+ if (!test.is_empty ())
+ {
+ idx_either += "r";
+ out = test;
+ }
+ }
}
+ idx_either += suffix;
if (out.is_empty ())
{
me->warning (_f ("none of note heads `%s' or `%s' found",