X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgregorian-ligature-engraver.cc;h=91232d5b31c8e02b6f90c73bffff5039806f303b;hb=ba824abf873d98c5afa9f8236beb85929cec0c03;hp=4958274a2e14af17eb986ed1956095b5b3a37181;hpb=f2c2c5c43858f323e4708f83fd97e0f38017c275;p=lilypond.git diff --git a/lily/gregorian-ligature-engraver.cc b/lily/gregorian-ligature-engraver.cc index 4958274a2e..91232d5b31 100644 --- a/lily/gregorian-ligature-engraver.cc +++ b/lily/gregorian-ligature-engraver.cc @@ -3,17 +3,22 @@ source file of the GNU LilyPond music typesetter - (c) 2003--2005 Juergen Reuter + (c) 2003--2007 Juergen Reuter */ #include "gregorian-ligature-engraver.hh" #include "gregorian-ligature.hh" -#include "warn.hh" -#include "staff-symbol-referencer.hh" -#include "spanner.hh" +#include "international.hh" #include "paper-column.hh" #include "pitch.hh" +#include "spanner.hh" +#include "staff-symbol-referencer.hh" +#include "stream-event.hh" +#include "warn.hh" + +/* ASSIGN_EVENT_ONCE */ +#include "translator.icc" /* * This abstract class is the common superclass for all ligature @@ -31,19 +36,13 @@ Gregorian_ligature_engraver::Gregorian_ligature_engraver () pes_or_flexa_req_ = 0; } -bool -Gregorian_ligature_engraver::try_music (Music *m) +void +Gregorian_ligature_engraver::listen_pes_or_flexa (Stream_event *ev) { - if (m->is_mus_type ("pes-or-flexa-event")) - { - pes_or_flexa_req_ = m; - return true; - } - else - return Ligature_engraver::try_music (m); + ASSIGN_EVENT_ONCE (pes_or_flexa_req_, ev); } -void fix_prefix (char *name, int mask, +void fix_prefix (char const *name, int mask, int *current_set, int min_set, int max_set, Grob *primitive) { @@ -83,10 +82,10 @@ void fix_prefix_set (int *current_set, int min_set, int max_set, Grob *primitive fix_prefix ("pes_or_flexa", LINEA, current_set, min_set, max_set, primitive); } -void check_and_fix_all_prefixes (Array primitives) +void check_and_fix_all_prefixes (vector primitives) { - /* Check for illegal head modifier combinations */ - for (int i = 0; i < primitives.size (); i++) + /* Check for invalid head modifier combinations */ + for (vsize i = 0; i < primitives.size (); i++) { Grob *primitive = primitives[i].grob (); @@ -186,7 +185,7 @@ void check_and_fix_all_prefixes (Array primitives) /* all other combinations should be valid (unless I made a mistake) */ - primitive->set_property ("prefix-set", scm_int2num (prefix_set)); + primitive->set_property ("prefix-set", scm_from_int (prefix_set)); } } @@ -194,25 +193,23 @@ void check_and_fix_all_prefixes (Array primitives) * Marks those heads that participate in a pes or flexa. */ void -provide_context_info (Array primitives) +provide_context_info (vector primitives) { Grob *prev_primitive = 0; int prev_prefix_set = 0; int prev_context_info = 0; int prev_pitch = 0; - for (int i = 0; i < primitives.size (); i++) + for (vsize i = 0; i < primitives.size (); i++) { Grob *primitive = primitives[i].grob (); - Music *music_cause = primitives[i].music_cause (); + Stream_event *event_cause = primitives[i].event_cause (); int context_info = 0; - int pitch = unsmob_pitch (music_cause->get_property ("pitch"))->steps (); + int pitch = unsmob_pitch (event_cause->get_property ("pitch"))->steps (); int prefix_set = scm_to_int (primitive->get_property ("prefix-set")); if (prefix_set & PES_OR_FLEXA) if (!i) // ligature may not start with 2nd head of pes or flexa - { - primitive->warning (_ ( "can't apply `\\~' on first head of ligature")); - } + primitive->warning (_ ("cannot apply `\\~' on first head of ligature")); else if (pitch > prev_pitch) // pes { prev_context_info |= PES_LOWER; @@ -224,17 +221,13 @@ provide_context_info (Array primitives) context_info |= FLEXA_RIGHT; } else // (pitch == prev_pitch) - { - primitive->warning (_ ("can't apply `\\~' on heads with identical pitch")); - } + primitive->warning (_ ("cannot apply `\\~' on heads with identical pitch")); if (prev_prefix_set & DEMINUTUM) - { - context_info |= AFTER_DEMINUTUM; - } + context_info |= AFTER_DEMINUTUM; if (prev_primitive) prev_primitive->set_property ("context-info", - scm_int2num (prev_context_info)); + scm_from_int (prev_context_info)); prev_primitive = primitive; prev_prefix_set = prefix_set; prev_context_info = context_info; @@ -242,20 +235,12 @@ provide_context_info (Array primitives) } if (prev_primitive) prev_primitive->set_property ("context-info", - scm_int2num (prev_context_info)); -} - -void -Gregorian_ligature_engraver::transform_heads (Spanner *, Array) -{ - programming_error ("Gregorian_ligature_engraver::transform_heads (): " - "this is an abstract method that should not be called, " - "but overridden by a subclass"); + scm_from_int (prev_context_info)); } void Gregorian_ligature_engraver::build_ligature (Spanner *ligature, - Array primitives) + vector primitives) { // apply style-independent checking and transformation check_and_fix_all_prefixes (primitives); @@ -273,13 +258,5 @@ Gregorian_ligature_engraver::stop_translation_timestep () pes_or_flexa_req_ = 0; } -#include "translator.icc" - -ADD_ACKNOWLEDGER(Gregorian_ligature_engraver, rest); -ADD_ACKNOWLEDGER(Gregorian_ligature_engraver, note_head); -ADD_TRANSLATOR (Gregorian_ligature_engraver, - /* descr */ "This is an abstract class. Subclasses such as Vaticana_ligature_engraver handle ligatures by glueing special ligature heads together.", - /* creats*/ "", - /* accepts */ "ligature-event", - /* reads */ "", - /* write */ ""); +// no ADD_ACKNOWLEDGER / ADD_ACKNOWLEDGER / ADD_TRANSLATOR macro calls +// since this class is abstract