X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Faccidental-engraver.cc;h=808c2408ec5a76947e8de6ff12d16366516ca942;hb=e540311d3f5799216c91d203080f63b65cccde07;hp=7e160184c3b37b2aaa75a2bccdec77a91429ce44;hpb=5227deb9e456fbf658ae69d4e249063aa46b4cdb;p=lilypond.git diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index 7e160184c3..808c2408ec 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -27,10 +27,10 @@ struct Accidental_entry { Context *origin_; Grob* head_; bool tied_; - Accidental_entry(); + Accidental_entry (); }; -Accidental_entry::Accidental_entry() +Accidental_entry::Accidental_entry () { tied_ = false; done_ = false; @@ -62,9 +62,6 @@ public: Grob * accidental_placement_; - /* - The next - */ Array accidentals_; Link_array ties_; @@ -76,10 +73,10 @@ static void set_property_on_children (Context * trans, const char * sym, SCM val) { trans->set_property (sym, val); - for (SCM p = trans->context_list_; gh_pair_p (p); p = ly_cdr(p)) + for (SCM p = trans->children_contexts (); ly_c_pair_p (p); p = ly_cdr (p)) { Context *trg = unsmob_context (ly_car (p)); - set_property_on_children(trg, sym, ly_deep_copy(val)); + set_property_on_children (trg, sym, ly_deep_copy (val)); } } @@ -94,14 +91,14 @@ Accidental_engraver::initialize () { last_keysig_ = get_property ("keySignature"); - Context * trans_ = daddy_context_; + Context * trans_ = context (); while (trans_) { trans_ -> set_property ("localKeySignature", ly_deep_copy (last_keysig_)); - trans_ = trans_->daddy_context_; + trans_ = trans_->get_parent_context (); } - set_property_on_children (daddy_context_,"localKeySignature", last_keysig_); + set_property_on_children (context (),"localKeySignature", last_keysig_); } /* @@ -110,7 +107,6 @@ Accidental_engraver::initialize () sig (passed as argument) Returns number of accidentals (0, 1 or 2). - Negative (-1 or -2) if accidental has changed. */ static int @@ -119,36 +115,36 @@ number_accidentals_from_sig (bool *different, bool ignore_octave) { int n = pitch->get_notename (); - int o = pitch->get_octave(); + int o = pitch->get_octave (); int a = pitch->get_alteration (); - int curbarnum_i = gh_scm2int (curbarnum); + int curbarnum_i = ly_scm2int (curbarnum); int accbarnum_i = 0; SCM prev; if (ignore_octave) prev = ly_assoc_cdr (scm_int2num (n), sig); else - prev = scm_assoc (gh_cons (scm_int2num (o), scm_int2num (n)), sig); + prev = scm_assoc (scm_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))) + if (ly_c_pair_p (prev) && ly_c_pair_p (ly_cdr (prev))) { - accbarnum_i = gh_scm2int (ly_cddr (prev)); - prev = gh_cons (ly_car (prev), ly_cadr (prev)); + accbarnum_i = ly_scm2int (ly_cddr (prev)); + prev = scm_cons (ly_car (prev), ly_cadr (prev)); } /* 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))) + (ly_c_number_p (lazyness) && curbarnum_i > accbarnum_i + ly_scm2int (lazyness))) prev = scm_assoc (scm_int2num (n), sig); SCM prev_acc = (prev == SCM_BOOL_F) ? scm_int2num (0) : ly_cdr (prev); - int p = gh_number_p (prev_acc) ? gh_scm2int (prev_acc) : 0; + int p = ly_c_number_p (prev_acc) ? ly_scm2int (prev_acc) : 0; int num; - if (a == p && gh_number_p (prev_acc)) + if (a == p && ly_c_number_p (prev_acc)) num = 0; else if ( (abs (a)get_property ("localKeySignature"); bool same_octave_b = - gh_eq_p (ly_symbol2scm ("same-octave"), type); + ly_c_eq_p (ly_symbol2scm ("same-octave"), type); bool any_octave_b = - gh_eq_p (ly_symbol2scm ("any-octave"), type); + ly_c_eq_p (ly_symbol2scm ("any-octave"), type); if (same_octave_b || any_octave_b) { @@ -195,7 +191,7 @@ number_accidentals (bool *different, number = max (number, n); } else - warning (_f ("unknown accidental typesetting: %s. Ignored", + warning (_f ("ignoring unknown accidental: %s", ly_symbol2string (type).to_str0 ())); } @@ -203,11 +199,11 @@ number_accidentals (bool *different, /* if symbol then it is a context name. Scan parent contexts to find it. */ - else if (gh_symbol_p (rule)) + else if (ly_c_symbol_p (rule)) { Context * dad = origin; while (dad && !dad->is_alias (rule)) - dad = dad->daddy_context_; + dad = dad->get_parent_context (); if (dad) origin = dad; @@ -222,25 +218,22 @@ number_accidentals (bool *different, SCM Accidental_engraver::get_bar_num () { - SCM barnum = get_property ("currentBarNumber"); - SCM smp = get_property("measurePosition"); + SCM barnum = get_property ("currentBarNumber"); + SCM smp = get_property ("measurePosition"); - Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0); - if (mp.main_part_ < Rational (0) - && gh_number_p (barnum)) - barnum = scm_int2num (gh_scm2int (barnum) - 1); + Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0); + if (mp.main_part_ < Rational (0) + && ly_c_number_p (barnum)) + barnum = scm_int2num (ly_scm2int (barnum) - 1); - - return barnum ; - + return barnum ; } void Accidental_engraver::process_acknowledged_grobs () { - if (accidentals_.size () && !accidentals_.top().done_) + if (accidentals_.size () && !accidentals_.top ().done_) { - //SCM localsig = get_property ("localKeySignature"); SCM accidentals = get_property ("autoAccidentals"); SCM cautionaries = get_property ("autoCautionaries"); SCM barnum = get_bar_num (); @@ -255,7 +248,7 @@ Accidental_engraver::process_acknowledged_grobs () Music * note = accidentals_[i].melodic_; Context * origin = accidentals_[i].origin_; - Pitch * pitch = unsmob_pitch (note->get_mus_property ("pitch")); + Pitch * pitch = unsmob_pitch (note->get_property ("pitch")); if (!pitch) continue; @@ -269,7 +262,7 @@ Accidental_engraver::process_acknowledged_grobs () pitch, origin, cautionaries, barnum); - bool cautionary = to_boolean (note->get_mus_property ("cautionary")); + bool cautionary = to_boolean (note->get_property ("cautionary")); if (num_caut > num) { @@ -278,7 +271,7 @@ Accidental_engraver::process_acknowledged_grobs () cautionary = true; } - if (num == 0 && to_boolean (note->get_mus_property ("force-accidental"))) + if (num == 0 && to_boolean (note->get_property ("force-accidental"))) num = 1; @@ -286,18 +279,7 @@ Accidental_engraver::process_acknowledged_grobs () Can not look for ties: it's not guaranteed that they reach us before the notes */ - /* See if there's a tie that makes the accidental disappear */ - Grob *tie_break_reminder = 0; - bool tie_changes = false; - for (int j = 0; j < ties_.size (); j++) - if (support == Tie::head (ties_[j], RIGHT)) - { - tie_changes = different; - if (different) - tie_break_reminder = ties_[j]; - break; - } - + if (num) { /* @@ -305,23 +287,23 @@ Accidental_engraver::process_acknowledged_grobs () level, so that we get the property settings for Accidental from the respective Voice. */ - Grob * a = make_item_from_properties (origin, - ly_symbol2scm ("Accidental")); + Grob * a = make_item_from_properties (origin->implementation (), + ly_symbol2scm ("Accidental"), + note->self_scm () + ); a->set_parent (support, Y_AXIS); if (!accidental_placement_) { - accidental_placement_ = make_item ("AccidentalPlacement"); - announce_grob (accidental_placement_, a->self_scm()); + accidental_placement_ = make_item ("AccidentalPlacement", a->self_scm ()); } Accidental_placement::add_accidental (accidental_placement_, a); - announce_grob (a, SCM_EOL); - SCM accs = gh_cons (scm_int2num (pitch->get_alteration ()), SCM_EOL); + SCM accs = scm_cons (scm_int2num (pitch->get_alteration ()), SCM_EOL); if (num == 2 && extra_natural_b) - accs = gh_cons (scm_int2num (0), accs); + accs = scm_cons (scm_int2num (0), accs); /* TODO: @@ -330,19 +312,13 @@ Accidental_engraver::process_acknowledged_grobs () if (cautionary) { - a->set_grob_property ("cautionary", SCM_BOOL_T); - } - - if (tie_break_reminder) - { - // TODO. - a->set_grob_property ("tie", tie_break_reminder->self_scm()); + a->set_property ("cautionary", SCM_BOOL_T); } - support->set_grob_property ("accidental-grob", a->self_scm ()); + support->set_property ("accidental-grob", a->self_scm ()); - a->set_grob_property ("accidentals", accs); + a->set_property ("accidentals", accs); accidentals_[i].accidental_ = a; /* @@ -378,7 +354,7 @@ Accidental_engraver::stop_translation_timestep () { if (Grob * g = accidentals_[i].accidental_) { - g->set_grob_property ("tie", ties_[j]->self_scm ()); + g->set_property ("tie", ties_[j]->self_scm ()); accidentals_[i].tied_ = true; } @@ -394,14 +370,14 @@ Accidental_engraver::stop_translation_timestep () Music * note = accidentals_[i].melodic_; Context * origin = accidentals_[i].origin_; - Pitch * pitch = unsmob_pitch (note->get_mus_property ("pitch")); + Pitch * pitch = unsmob_pitch (note->get_property ("pitch")); if (!pitch) continue; 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)); + SCM on_s = scm_cons (scm_int2num (o), scm_int2num (n)); while (origin) { @@ -417,7 +393,7 @@ Accidental_engraver::stop_translation_timestep () that of the tied note and of the key signature. */ localsig = ly_assoc_front_x - (localsig, on_s, gh_cons (SCM_BOOL_T, barnum)); + (localsig, on_s, scm_cons (SCM_BOOL_T, barnum)); change = true; } @@ -428,28 +404,29 @@ Accidental_engraver::stop_translation_timestep () noteheads with the same notename. */ localsig = ly_assoc_front_x - (localsig, on_s, gh_cons (scm_int2num (a), barnum)); + (localsig, on_s, scm_cons (scm_int2num (a), barnum)); change = true; } if (change) origin->set_property ("localKeySignature", localsig); - origin = origin->daddy_context_; + origin = origin->get_parent_context (); } } - for (int i = 0; i < accidentals_.size(); i++) + for (int i = 0; i < accidentals_.size (); i++) { if (Grob *a = accidentals_[i].accidental_) typeset_grob (a); } if (accidental_placement_) - typeset_grob(accidental_placement_); - accidental_placement_ = 00; + typeset_grob (accidental_placement_); + + accidental_placement_ = 0; - accidentals_.clear(); + accidentals_.clear (); left_objects_.clear (); right_objects_.clear (); } @@ -461,16 +438,20 @@ Accidental_engraver::acknowledge_grob (Grob_info info) if (note && note->is_mus_type ("note-event") - && Rhythmic_head::has_interface (info.grob_) - && !gh_equal_p (info.grob_->get_grob_property ("style"), ly_symbol2scm ("harmonic")) - ) + && Rhythmic_head::has_interface (info.grob_)) { - Accidental_entry entry ; - entry.head_ = info.grob_; - entry.origin_ = info.origin_trans_->daddy_context_; - entry.melodic_ = note; + if (to_boolean ( get_property ("harmonicAccidentals")) + || !ly_c_equal_p (info.grob_->get_property ("style"), + ly_symbol2scm ("harmonic"))) + { + + Accidental_entry entry ; + entry.head_ = info.grob_; + entry.origin_ = info.origin_trans_->context (); + entry.melodic_ = note; - accidentals_.push (entry); + accidentals_.push (entry); + } } else if (Tie::has_interface (info.grob_)) { @@ -480,7 +461,7 @@ Accidental_engraver::acknowledge_grob (Grob_info info) { left_objects_.push (info.grob_); } - else if (info.grob_->internal_has_interface (ly_symbol2scm("finger-interface"))) + else if (info.grob_->internal_has_interface (ly_symbol2scm ("finger-interface"))) { left_objects_.push (info.grob_); } @@ -496,13 +477,13 @@ Accidental_engraver::process_music () */ if (last_keysig_ != sig) { - Context * trans_ = daddy_context_; + Context * trans_ = context (); while (trans_) { trans_ -> set_property ("localKeySignature", ly_deep_copy (sig)); - trans_ = trans_->daddy_context_; + trans_ = trans_->get_parent_context (); } - set_property_on_children(daddy_context_,"localKeySignature", sig); + set_property_on_children (context (),"localKeySignature", sig); last_keysig_ = sig; } @@ -522,5 +503,5 @@ ENTER_DESCRIPTION (Accidental_engraver, "Accidental", "", "finger-interface rhythmic-head-interface tie-interface arpeggio-interface", - "localKeySignature extraNatural autoAccidentals autoCautionaries", + "localKeySignature harmonicAccidentals extraNatural autoAccidentals autoCautionaries", "localKeySignature");