/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2003--2011 Juergen Reuter <reuter@ipd.uka.de>
+ Copyright (C) 2003--2015 Juergen Reuter <reuter@ipd.uka.de>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
int context_info, int delta_pitch);
bool is_stacked_head (int prefix_set,
int context_info);
- Real align_heads (vector<Grob_info> primitives,
+ Real align_heads (vector<Grob_info> const &primitives,
Real flexa_width,
Real thickness);
void check_for_prefix_loss (Item *primitive);
public:
TRANSLATOR_DECLARATIONS (Vaticana_ligature_engraver);
-
+ TRANSLATOR_INHERIT (Gregorian_ligature_engraver);
protected:
virtual Spanner *create_ligature_spanner ();
virtual void transform_heads (Spanner *ligature,
- vector<Grob_info> primitives);
- DECLARE_TRANSLATOR_LISTENER (pes_or_flexa);
- DECLARE_TRANSLATOR_LISTENER (ligature);
+ vector<Grob_info> const &primitives);
};
-IMPLEMENT_TRANSLATOR_LISTENER (Vaticana_ligature_engraver, pes_or_flexa);
-void
-Vaticana_ligature_engraver::listen_pes_or_flexa (Stream_event *ev)
-{
- Gregorian_ligature_engraver::listen_pes_or_flexa (ev);
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (Vaticana_ligature_engraver, ligature);
-void
-Vaticana_ligature_engraver::listen_ligature (Stream_event *ev)
-{
- Ligature_engraver::listen_ligature (ev);
-}
-
-Vaticana_ligature_engraver::Vaticana_ligature_engraver ()
+Vaticana_ligature_engraver::Vaticana_ligature_engraver (Context *c)
+ : Gregorian_ligature_engraver (c)
{
brew_ligature_primitive_proc
= Vaticana_ligature::brew_ligature_primitive_proc;
{
if (prev_prefix_set & VIRGA)
/*
- * After a virga, make a an additional small space such that the
+ * After a virga, make an additional small space such that the
* appendix on the right side of the head does not touch the
* following head.
*/
if ((context_info & FLEXA_LEFT) && ! (context_info & PES_UPPER))
/*
- * Before a flexa (but not within a torculus), make a an
+ * Before a flexa (but not within a torculus), make an
* additional small space such that the appendix on the left side
* of the flexa does not touch the this head.
*/
}
Real
-Vaticana_ligature_engraver::align_heads (vector<Grob_info> primitives,
+Vaticana_ligature_engraver::align_heads (vector<Grob_info> const &primitives,
Real flexa_width,
Real thickness)
{
*/
SCM glyph_name_scm = primitive->get_property ("glyph-name");
- if (glyph_name_scm == SCM_EOL)
+ if (scm_is_null (glyph_name_scm))
{
primitive->programming_error ("Vaticana_ligature:"
" undefined glyph-name ->"
if (prev_primitive) /* urgh, need prev_primitive only here */
{
SCM delta_pitch_scm = prev_primitive->get_property ("delta-position");
- if (delta_pitch_scm != SCM_EOL)
+ if (!scm_is_null (delta_pitch_scm))
delta_pitch = scm_to_int (delta_pitch_scm);
else
{
// bitmask based O (1) test); where n=<number of primitives in the
// ligature> (which is typically small (n<10), though).
Stream_event *new_cause = primitive.event_cause ();
- int new_pitch = unsmob_pitch (new_cause->get_property ("pitch"))->steps ();
+ int new_pitch = unsmob<Pitch> (new_cause->get_property ("pitch"))->steps ();
for (vsize i = 0; i < augmented_primitives_.size (); i++)
{
Stream_event *cause = augmented_primitives_[i].event_cause ();
- int pitch = unsmob_pitch (cause->get_property ("pitch"))->steps ();
+ int pitch = unsmob<Pitch> (cause->get_property ("pitch"))->steps ();
if (pitch == new_pitch)
{
primitive.grob ()->
- warning ("Ambiguous use of dots in ligature: there are"
- " multiple dotted notes with the same pitch."
- " The ligature should be split.");
+ warning (_ ("Ambiguous use of dots in ligature: there are"
+ " multiple dotted notes with the same pitch."
+ " The ligature should be split."));
return; // supress multiple identical warnings
}
}
void
Vaticana_ligature_engraver::transform_heads (Spanner *ligature,
- vector<Grob_info> primitives)
+ vector<Grob_info> const &primitives)
{
Real flexa_width = robust_scm2double (ligature->get_property ("flexa-width"), 2);
int delta_pitch;
SCM delta_pitch_scm = primitive->get_property ("delta-position");
- if (delta_pitch_scm != SCM_EOL)
+ if (!scm_is_null (delta_pitch_scm))
delta_pitch = scm_to_int (delta_pitch_scm);
else
{
}
else if (augmented_primitives_.size () > 0)
{
- primitive->warning ("This ligature has a dotted head followed by"
- " a non-dotted head. The ligature should be"
- " split after the last dotted head before"
- " this head.");
+ primitive->warning (_ ("This ligature has a dotted head followed by"
+ " a non-dotted head. The ligature should be"
+ " split after the last dotted head before"
+ " this head."));
}
if (is_stacked_head (prefix_set, context_info))
#endif
}
-ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, rest);
-ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, ligature_head);
+void
+Vaticana_ligature_engraver::boot ()
+{
+ ADD_LISTENER (Vaticana_ligature_engraver, pes_or_flexa);
+ ADD_LISTENER (Vaticana_ligature_engraver, ligature);
+ ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, rest);
+ ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, ligature_head);
+}
+
ADD_TRANSLATOR (Vaticana_ligature_engraver,
/* doc */
"Handle ligatures by glueing special ligature heads"