X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fchord-name-engraver.cc;h=3d989ccfb14de07ee33cf981f0e5e67ed338a3cb;hb=5d84bfad4626892bcffd05adcced53c8a2329047;hp=0cb0a7d8e417c0de8d501578dbac3b1079927d91;hpb=080d6ab968012d491c7fa70fa962d2001ace1ecc;p=lilypond.git diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index 0cb0a7d8e4..3d989ccfb1 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2014 Jan Nieuwenhuizen + Copyright (C) 1998--2015 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -39,8 +39,8 @@ protected: void stop_translation_timestep (); void process_music (); virtual void finalize (); - DECLARE_TRANSLATOR_LISTENER (note); - DECLARE_TRANSLATOR_LISTENER (rest); + void listen_note (Stream_event *); + void listen_rest (Stream_event *); private: vector notes_; @@ -52,7 +52,8 @@ Chord_name_engraver::finalize () { } -Chord_name_engraver::Chord_name_engraver () +Chord_name_engraver::Chord_name_engraver (Context *c) + : Engraver (c) { rest_event_ = 0; } @@ -96,22 +97,22 @@ Chord_name_engraver::process_music () { Stream_event *n = notes_[i]; SCM p = n->get_property ("pitch"); - if (!unsmob_pitch (p)) + if (!unsmob (p)) continue; - if (n->get_property ("bass") == SCM_BOOL_T) + if (to_boolean (n->get_property ("bass"))) bass = p; else { SCM oct = n->get_property ("octavation"); if (scm_is_number (oct)) { - Pitch orig = unsmob_pitch (p)->transposed (Pitch (-scm_to_int (oct), 0, 0)); + Pitch orig = unsmob (p)->transposed (Pitch (-scm_to_int (oct), 0)); pitches = scm_cons (orig.smobbed_copy (), pitches); } else pitches = scm_cons (p, pitches); - if (n->get_property ("inversion") == SCM_BOOL_T) + if (to_boolean (n->get_property ("inversion"))) { inversion = p; if (!scm_is_number (oct)) @@ -143,14 +144,12 @@ Chord_name_engraver::process_music () context ()->set_property ("lastChord", markup); } -IMPLEMENT_TRANSLATOR_LISTENER (Chord_name_engraver, note); void Chord_name_engraver::listen_note (Stream_event *ev) { notes_.push_back (ev); } -IMPLEMENT_TRANSLATOR_LISTENER (Chord_name_engraver, rest); void Chord_name_engraver::listen_rest (Stream_event *ev) { @@ -168,6 +167,13 @@ Chord_name_engraver::stop_translation_timestep () The READs description is not strictly accurate: which properties are read depend on the chord naming function active. */ +void +Chord_name_engraver::boot () +{ + ADD_LISTENER (Chord_name_engraver, note); + ADD_LISTENER (Chord_name_engraver, rest); +} + ADD_TRANSLATOR (Chord_name_engraver, /* doc */ "Catch note and rest events and generate the appropriate chordname.",