X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Faccidental-engraver.cc;h=23958478898ae7a1fec65e7335531cd8481e74e1;hb=062b17ac5868311ee1e31655da86da1c931ffe31;hp=4549a30547e3f03cc62a4cdc83de6502c91064bf;hpb=0a8f98072c53d877cbb53dd490ba4394d03fa8d2;p=lilypond.git diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index 4549a30547..2395847889 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -1,12 +1,12 @@ /* accidental-engraver.cc -- implement accidental_engraver - (c) 1997--2002 Han-Wen Nienhuys - Modified 2001-2002 by Rune Zedeler + (c) 1997--2003 Han-Wen Nienhuys + Modified 2001--2002 by Rune Zedeler */ -#include "musical-request.hh" -#include "command-request.hh" +#include "event.hh" + #include "item.hh" #include "tie.hh" #include "rhythmic-head.hh" @@ -16,8 +16,8 @@ #include "engraver.hh" #include "arpeggio.hh" #include "warn.hh" - #include "translator-group.hh" +#include "protected-scm.hh" /** @@ -59,35 +59,27 @@ protected: virtual void finalize (); public: - /* - TODO -> property. - - This is not a property, and it is not protected. This poses a - very small risk of the value being GC'd from under us. - */ - SCM last_keysig_; + Protected_scm last_keysig_; /* Urgh. Since the accidentals depend on lots of variables, we have to store all information before we can really create the accidentals. */ - Link_array arpeggios_; + Link_array left_objects_; + Link_array right_objects_; Grob * accidental_placement_; - /* The next */ Array accidentals_; - Link_array ties_; - - }; -static void set_property_on_children (Translator_group * trans, const char * sym, SCM val) +static void +set_property_on_children (Translator_group * trans, const char * sym, SCM val) { trans->set_property (sym, val); for (SCM p = trans -> trans_group_list_; gh_pair_p (p); p = ly_cdr(p)) { @@ -128,9 +120,9 @@ static int number_accidentals (SCM sig, Music * note, Pitch *pitch, SCM curbarnum, SCM lazyness, bool ignore_octave_b) { - int n = pitch->notename_; - int o = pitch->octave_; - int a = pitch->alteration_; + int n = pitch->get_notename (); + int o = pitch->get_octave(); + int a = pitch->get_alteration (); int curbarnum_i = gh_scm2int (curbarnum); int accbarnum_i = 0; @@ -138,7 +130,7 @@ number_accidentals (SCM sig, Music * note, Pitch *pitch, SCM curbarnum, SCM lazy if (ignore_octave_b) prev = ly_assoc_cdr (scm_int2num (n), sig); else - prev = gh_assoc (gh_cons (scm_int2num (o), scm_int2num (n)), sig); + prev = scm_assoc (gh_cons (scm_int2num (o), scm_int2num (n)), sig); /* should really be true unless prev == SCM_BOOL_F */ if (gh_pair_p (prev) && gh_pair_p (ly_cdr (prev))) @@ -150,7 +142,7 @@ number_accidentals (SCM sig, Music * note, Pitch *pitch, SCM curbarnum, SCM lazy /* If an accidental was not found or the accidental was too old */ if (prev == SCM_BOOL_F || (gh_number_p (lazyness) && curbarnum_i > accbarnum_i + gh_scm2int (lazyness))) - prev = gh_assoc (scm_int2num (n), sig); + prev = scm_assoc (scm_int2num (n), sig); SCM prev_acc = (prev == SCM_BOOL_F) ? scm_int2num (0) : ly_cdr (prev); @@ -158,9 +150,7 @@ number_accidentals (SCM sig, Music * note, Pitch *pitch, SCM curbarnum, SCM lazy int p = gh_number_p (prev_acc) ? gh_scm2int (prev_acc) : 0; int num; - if (a == p - && !to_boolean (note->get_mus_property ("force-accidental")) - && gh_number_p (prev_acc)) + if (a == p && gh_number_p (prev_acc)) num = 0; else if ( (abs (a)get_mus_property ("force-accidental"))) + num=1; bool different = num < 0; num = abs (num); @@ -303,7 +296,7 @@ Accidental_engraver::process_acknowledged_grobs () announce_grob (a, SCM_EOL); - SCM accs = gh_cons (scm_int2num (pitch->alteration_), SCM_EOL); + SCM accs = gh_cons (scm_int2num (pitch->get_alteration ()), SCM_EOL); if (num == 2 && extra_natural_b) accs = gh_cons (scm_int2num (0), accs); @@ -333,8 +326,10 @@ Accidental_engraver::process_acknowledged_grobs () accidentals. */ - for (int i = 0; i < arpeggios_.size (); i++) - Side_position_interface::add_support (arpeggios_[i], a); + for (int i = 0; i < left_objects_.size (); i++) + Side_position_interface::add_support (left_objects_[i], a); + for (int i = 0; i < right_objects_.size (); i++) + Side_position_interface::add_support (a, right_objects_[i]); } @@ -347,9 +342,9 @@ Accidental_engraver::process_acknowledged_grobs () */ - int n = pitch->notename_; - int o = pitch->octave_; - int a = pitch->alteration_; + int n = pitch->get_notename (); + int o = pitch->get_octave (); + int a = pitch->get_alteration (); SCM on_s = gh_cons (scm_int2num (o), scm_int2num (n)); /* @@ -421,7 +416,8 @@ Accidental_engraver::stop_translation_timestep () accidental_placement_ = 00; accidentals_.clear(); - arpeggios_.clear (); + left_objects_.clear (); + right_objects_.clear (); ties_.clear (); } @@ -447,9 +443,12 @@ Accidental_engraver::acknowledge_grob (Grob_info info) } else if (Arpeggio::has_interface (info.grob_)) { - arpeggios_.push (info.grob_); + left_objects_.push (info.grob_); + } + else if (info.grob_->internal_has_interface (ly_symbol2scm("finger-interface"))) + { + left_objects_.push (info.grob_); } - } void @@ -479,12 +478,11 @@ Accidental_engraver::process_music () ENTER_DESCRIPTION (Accidental_engraver, -"Make accidentals. Catches note heads, ties and notices key-change -events. Due to interaction with ties (which don't come together -with note heads), this needs to be in a context higher than Tie_engraver.", - +"Make accidentals. Catches note heads, ties and notices key-change " +" events. Due to interaction with ties (which don't come together " +" with note heads), this needs to be in a context higher than Tie_engraver.", "Accidental", -/* accepts */ "general-music", - "rhythmic-head-interface tie-interface arpeggio-interface", +/* accepts */ "", + "finger-interface rhythmic-head-interface tie-interface arpeggio-interface", "localKeySignature extraNatural autoAccidentals autoCautionaries", "localKeySignature");