/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 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);
- }
+ string suffix = ::to_string (min (robust_scm2int (me->get_property ("duration-log"), 2), 2));
+ if (style != "default")
+ suffix = robust_scm2string (me->get_property ("glyph-name"), "");
Font_metric *fm = Font_interface::get_default_font (me);
Stencil out = fm->find_by_name (idx_either + suffix);
if (out.is_empty ())
{
- Grob *stem = unsmob_grob (me->get_object ("stem"));
+ Grob *stem = Grob::unsmob (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_either = idx_directed = prefix + ((stem_dir == UP) ? "u" : "d");
+ idx_either = idx_directed = prefix + (stem_dir == UP ? "u" : "d");
+ out = fm->find_by_name (idx_either + suffix);
}
- out = fm->find_by_name (idx_either + "r" + suffix);
- if (!out.is_empty ()
- && !Staff_symbol_referencer::on_line
- (me,
- robust_scm2int (me->get_property ("staff-position"), 0)))
- idx_either += "r";
+ if (style == "mensural"
+ || style == "neomensural"
+ || style == "petrucci"
+ || style == "baroque"
+ || style == "kievan")
+ {
+ 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;
+ }
+ }
+ }
+
+ if (style == "kievan"
+ && 3 == robust_scm2int (me->get_property ("duration-log"), 2))
+ {
+ Grob *stem = Grob::unsmob (me->get_object ("stem"));
+ Grob *beam = Grob::unsmob (stem->get_object ("beam"));
+ if (beam)
+ out = fm->find_by_name (idx_either + "2kievan");
+ }
idx_either += suffix;
- out = fm->find_by_name (idx_either);
if (out.is_empty ())
{
me->warning (_f ("none of note heads `%s' or `%s' found",
SCM
Note_head::stem_x_shift (SCM smob)
{
- Grob *me = unsmob_grob (smob);
- Grob *stem = unsmob_grob (me->get_object ("stem"));
+ Grob *me = Grob::unsmob (smob);
+ Grob *stem = Grob::unsmob (me->get_object ("stem"));
if (stem)
(void) stem->get_property ("positioning-done");
SCM
Note_head::print (SCM smob)
{
- Grob *me = unsmob_grob (smob);
+ Grob *me = Grob::unsmob (smob);
string idx;
return internal_print (me, &idx).smobbed_copy ();
SCM
Note_head::include_ledger_line_height (SCM smob)
{
- Grob *me = unsmob_grob (smob);
+ Grob *me = Grob::unsmob (smob);
Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
if (staff)
}
Offset
-Note_head::get_stem_attachment (Font_metric *fm, string key)
+Note_head::get_stem_attachment (Font_metric *fm, const string &key)
{
Offset att;
SCM
Note_head::calc_stem_attachment (SCM smob)
{
- Grob *me = unsmob_grob (smob);
+ Grob *me = Grob::unsmob (smob);
Font_metric *fm = Font_interface::get_default_font (me);
string key;
internal_print (me, &key);