X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fchord-name-engraver.cc;h=cfa35c26219c2682d79ae60155137f1a54c09b71;hb=d9b43b93f2c885409bafdb157138158f65cc49aa;hp=7b72e3bc26464a322cf0840730681711492b3ddc;hpb=df4a7c4a55148e065d878dcc2f7e09ac27ea9c32;p=lilypond.git diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index 7b72e3bc26..cfa35c2621 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1998--2000 Jan Nieuwenhuizen + (c) 1998--2002 Jan Nieuwenhuizen */ #include "engraver.hh" @@ -21,40 +21,40 @@ class Chord_name_engraver : public Engraver { -public: - Chord_name_engraver (); - VIRTUAL_COPY_CONS (Translator); + + TRANSLATOR_DECLARATIONS( Chord_name_engraver); protected: virtual void stop_translation_timestep (); virtual void acknowledge_grob (Grob_info i); - void deprecated_process_music (); + virtual void create_grobs (); virtual bool try_music (Music *); private: void add_note (Note_req *); Item* chord_name_p_; + Protected_scm chord_; Protected_scm last_chord_; }; -ADD_THIS_TRANSLATOR (Chord_name_engraver); + Chord_name_engraver::Chord_name_engraver () { chord_name_p_ = 0; chord_ = gh_cons (SCM_EOL, gh_cons (SCM_EOL, SCM_EOL)); - last_chord_ = gh_cons (SCM_EOL, gh_cons (SCM_EOL, SCM_EOL)); + last_chord_ = chord_; } void Chord_name_engraver::add_note (Note_req* n) { - SCM pitches = gh_car (chord_); - SCM modifiers = gh_cdr (chord_); - SCM inversion = modifiers == SCM_EOL ? SCM_EOL : gh_car (modifiers); - SCM bass = modifiers == SCM_EOL ? SCM_EOL : gh_cdr (modifiers); + SCM pitches = ly_car (chord_); + SCM modifiers = ly_cdr (chord_); + SCM inversion = modifiers == SCM_EOL ? SCM_EOL : ly_car (modifiers); + SCM bass = modifiers == SCM_EOL ? SCM_EOL : ly_cdr (modifiers); if (n->get_mus_property ("inversion") == SCM_BOOL_T) inversion = n->get_mus_property ("pitch"); @@ -77,55 +77,24 @@ Chord_name_engraver::try_music (Music* m) return false; } -/* Uh, if we do acknowledge_grob, shouldn't we postpone - deprecated_process_music until do_process_acknowlegded? - - Sigh, I can *never* remember how this works, can't we - possibly-please just number these functions: - - do_creation0 - - post_move1 - try_music2 - deprecated_process_music3 (or is it acknowledge_grob3 ?) - acknowledge_grob4 - - do_pre_move9 - - do_removal99 - - and what was the deal with this ``do'' prefix again? */ void Chord_name_engraver::acknowledge_grob (Grob_info i) { - if (Note_req* n = dynamic_cast (i.req_l_)) + if (Note_req* n = dynamic_cast (i.music_cause ())) add_note (n); } void -Chord_name_engraver::deprecated_process_music () +Chord_name_engraver::create_grobs () { - if (!chord_name_p_ && gh_car (chord_) != SCM_EOL) + if (!chord_name_p_ && ly_car (chord_) != SCM_EOL) { -#if 0 - bool find_inversion_b = false; - SCM chord_inversion = get_property ("chordInversion"); - if (gh_boolean_p (chord_inversion)) - find_inversion_b = gh_scm2bool (chord_inversion); - - chord_ = Chord::pitches_and_requests_to_chord (pitches_, - inversion_, - bass_, - find_inversion_b); - -#endif - chord_name_p_ = new Item (get_property ("ChordName")); chord_name_p_->set_grob_property ("chord", chord_); announce_grob (chord_name_p_, 0); - SCM s = get_property ("drarnChords"); //FIXME! - if (to_boolean (s) && last_chord_ != SCM_EOL && - gh_equal_p (chord_, last_chord_)) + SCM s = get_property ("chordChanges"); + if (to_boolean (s) && ly_car (last_chord_) != SCM_EOL + && gh_equal_p (chord_, last_chord_)) chord_name_p_->set_grob_property ("begin-of-line-visible", SCM_BOOL_T); } } @@ -139,7 +108,15 @@ Chord_name_engraver::stop_translation_timestep () } chord_name_p_ = 0; - last_chord_ = chord_; + if (ly_car (chord_) != SCM_EOL) + last_chord_ = chord_; chord_ = gh_cons (SCM_EOL, gh_cons (SCM_EOL, SCM_EOL)); } +ENTER_DESCRIPTION(Chord_name_engraver, +/* descr */ "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req +and generate the appropriate chordname.", +/* creats*/ "ChordName", +/* acks */ "grob-interface", +/* reads */ "chordChanges", +/* write */ "");