X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finstrument-name-engraver.cc;h=74bb0b21a40e946c7cfb08d3d85a5fc0b9560ae3;hb=634ad74db688a5305f001917453c5cd15305c539;hp=ed8ff27d7bd8b697aec28d03a749e113bcd82e08;hpb=e63d8e146a993d7c3de271cf377191f7cf24775a;p=lilypond.git diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index ed8ff27d7b..74bb0b21a4 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -1,50 +1,46 @@ /* - instrument-name-engraver.cc -- implement Instrument_name_engraver + instrument-name-engraver.cc -- implement Instrument_name_engraver source file of the GNU LilyPond music typesetter - (c) 2000--2003 Han-Wen Nienhuys + (c) 2000--2005 Han-Wen Nienhuys */ #include "engraver.hh" -#include "item.hh" #include "bar-line.hh" #include "system-start-delimiter.hh" #include "side-position-interface.hh" #include "align-interface.hh" #include "axis-group-interface.hh" -#include "translator-group.hh" +#include "context.hh" #include "text-item.hh" class Instrument_name_engraver : public Engraver { - Item *text_; - Grob *delim_ ; - void create_text (); public: - TRANSLATOR_DECLARATIONS(Instrument_name_engraver); + TRANSLATOR_DECLARATIONS (Instrument_name_engraver); +protected: + Grob *text_; + + virtual void create_text (); virtual void initialize (); virtual void acknowledge_grob (Grob_info); virtual void stop_translation_timestep (); virtual void process_music (); }; - - Instrument_name_engraver::Instrument_name_engraver () { text_ = 0; - delim_ =0; } - void Instrument_name_engraver::initialize () { - daddy_trans_->set_property ("instrumentSupport", SCM_EOL); + context ()->set_property ("instrumentSupport", SCM_EOL); } void @@ -52,9 +48,8 @@ Instrument_name_engraver::stop_translation_timestep () { if (text_) { - text_->set_grob_property ("side-support-elements", - get_property ("instrumentSupport")); - typeset_grob (text_); + text_->set_property ("side-support-elements", + get_property ("instrumentSupport")); text_ = 0; } } @@ -62,31 +57,25 @@ Instrument_name_engraver::stop_translation_timestep () void Instrument_name_engraver::create_text () { - if (!text_) - { - SCM txt = get_property ("instrument"); + if (text_) + return ; - if (now_mom () > Moment (0)) - txt = get_property ("instr"); - /* - UGH. - */ - if (txt == SCM_EOL) - return ; - - text_ = new Item (get_property ("InstrumentName")); - - if (text_->get_grob_property ("text") != txt) - text_->set_grob_property ("text", txt); + SCM txt = get_property ("instrument"); + + if (now_mom () > Moment (0)) + txt = get_property ("instr"); + /* + UGH. + */ + if (txt == SCM_EOL) + return ; - if (new_markup_p (txt)) - text_->set_grob_property ("molecule-callback", new_markup_brewer()); - - if (delim_) - text_->set_parent (delim_, Y_AXIS); + + text_ = make_item ("InstrumentName", SCM_EOL); - announce_grob (text_, SCM_EOL); - } + if (text_->get_property ("text") != txt) + text_->set_property ("text", txt); + } void @@ -94,11 +83,16 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i) { if (Bar_line::has_interface (i.grob_)) { - create_text(); + create_text (); } + /* + Ugh - typechecking for pedal and dynamic sucks. + */ if (dynamic_cast (i.grob_) - && i.grob_->internal_has_interface (ly_symbol2scm ("dynamic-interface"))) + && (i.grob_->internal_has_interface (ly_symbol2scm ("dynamic-interface")) + || i.grob_->internal_has_interface (ly_symbol2scm ("piano-pedal-interface"))) + ) return; /* @@ -112,13 +106,13 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i) */ if (dynamic_cast (i.grob_) && ((Axis_group_interface::has_interface (i.grob_) - && Axis_group_interface::axis_b (i.grob_, Y_AXIS))) + && Axis_group_interface::has_axis (i.grob_, Y_AXIS))) && !Align_interface::has_interface (i.grob_)) { - SCM nl = gh_cons (i.grob_->self_scm (), + SCM nl = scm_cons (i.grob_->self_scm (), get_property ("instrumentSupport")); - daddy_trans_->set_property ("instrumentSupport", nl); + context ()->set_property ("instrumentSupport", nl); } } @@ -129,11 +123,11 @@ Instrument_name_engraver::process_music () Also create text if barlines in other groups. This allows a name to be attached to lyrics or chords. */ - if (gh_string_p (get_property ("whichBar"))) - create_text(); + if (scm_is_string (get_property ("whichBar"))) + create_text (); } -ENTER_DESCRIPTION(Instrument_name_engraver, +ADD_TRANSLATOR (Instrument_name_engraver, /* descr */ " Prints the name of the instrument (specified by " " @code{Staff.instrument} and @code{Staff.instr}) " "at the left of the staff. ", @@ -142,3 +136,55 @@ ENTER_DESCRIPTION(Instrument_name_engraver, /* acks */ "bar-line-interface axis-group-interface", /* reads */ "instrument instr", /* write */ ""); + +/****************************************************************/ + + +class Vocal_name_engraver : public Instrument_name_engraver +{ +public: + TRANSLATOR_DECLARATIONS (Vocal_name_engraver); + virtual void create_text (); +}; + + +Vocal_name_engraver::Vocal_name_engraver () +{ +} + + +void +Vocal_name_engraver::create_text () +{ + if (text_) + return ; + + SCM txt = get_property ("vocalName"); + + if (now_mom () > Moment (0)) + txt = get_property ("vocNam"); + + /* + UGH. + */ + if (txt == SCM_EOL) + return ; + + text_ = make_item ("VocalName", SCM_EOL); + + if (text_->get_property ("text") != txt) + text_->set_property ("text", txt); + +} + + + +ADD_TRANSLATOR (Vocal_name_engraver, +/* descr */ " Prints the name of the a lyric voice (specified by " +" @code{Staff.vocalName} and @code{Staff.vocNam}) " +"at the left of the staff. ", +/* creats*/ "VocalName", +/* accepts */ "", +/* acks */ "bar-line-interface axis-group-interface", +/* reads */ "vocNam vocalName", +/* write */ "");