X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fchord-name-engraver.cc;h=bbccd04afee50aed36bd4055f133b46077bdfac9;hb=9a38b47c4a4589f2e7c413fcdfff83de454719e6;hp=7b72e3bc26464a322cf0840730681711492b3ddc;hpb=df4a7c4a55148e065d878dcc2f7e09ac27ea9c32;p=lilypond.git diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index 7b72e3bc26..bbccd04afe 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,37 @@ 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 process_music (); virtual bool try_music (Music *); private: void add_note (Note_req *); - Item* chord_name_p_; + Item* chord_name_; + Protected_scm chord_; Protected_scm last_chord_; }; -ADD_THIS_TRANSLATOR (Chord_name_engraver); + Chord_name_engraver::Chord_name_engraver () { - chord_name_p_ = 0; + chord_name_ = 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,69 +74,39 @@ 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) +Chord_name_engraver::process_music () { - if (Note_req* n = dynamic_cast (i.req_l_)) - add_note (n); -} - -void -Chord_name_engraver::deprecated_process_music () -{ - if (!chord_name_p_ && gh_car (chord_) != SCM_EOL) + if (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_)) - chord_name_p_->set_grob_property ("begin-of-line-visible", SCM_BOOL_T); + chord_name_ = new Item (get_property ("ChordName")); + chord_name_->set_grob_property ("chord", chord_); + announce_grob(chord_name_, SCM_EOL); + SCM s = get_property ("chordChanges"); + if (to_boolean (s) && ly_car (last_chord_) != SCM_EOL + && gh_equal_p (chord_, last_chord_)) + chord_name_->set_grob_property ("begin-of-line-visible", SCM_BOOL_T); } } void Chord_name_engraver::stop_translation_timestep () { - if (chord_name_p_) + if (chord_name_) { - typeset_grob (chord_name_p_); + typeset_grob (chord_name_); } - chord_name_p_ = 0; + chord_name_ = 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 */ "", +/* reads */ "chordChanges", +/* write */ "");