]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/instrument-name-engraver.cc
release commit
[lilypond.git] / lily / instrument-name-engraver.cc
index 593de87001cdf08b09e8b1a981d04c617a5424ec..ed8ff27d7bd8b697aec28d03a749e113bcd82e08 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2000--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 2000--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
   
  */
 
   
  */
 
@@ -22,13 +22,14 @@ class Instrument_name_engraver : public Engraver
   Item *text_;
   Grob *delim_ ;
   
   Item *text_;
   Grob *delim_ ;
   
-  void create_text (SCM s);
+  void create_text ();
 public:
   TRANSLATOR_DECLARATIONS(Instrument_name_engraver);
 
   virtual void initialize ();
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
 public:
   TRANSLATOR_DECLARATIONS(Instrument_name_engraver);
 
   virtual void initialize ();
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
+  virtual void process_music ();
 };
 
 
 };
 
 
@@ -59,10 +60,20 @@ Instrument_name_engraver::stop_translation_timestep ()
 }
 
 void
 }
 
 void
-Instrument_name_engraver::create_text (SCM txt)
+Instrument_name_engraver::create_text ()
 {
 {
-  if (!text_)
+   if (!text_)
     {
     {
+      SCM txt = get_property ("instrument");
+  
+      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_ = new Item (get_property ("InstrumentName"));
       
       if (text_->get_grob_property ("text") != txt)
@@ -83,16 +94,7 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i)
 {
   if (Bar_line::has_interface (i.grob_))
     {
 {
   if (Bar_line::has_interface (i.grob_))
     {
-      SCM s = get_property ("instrument");
-  
-      if (now_mom () > Moment (0))
-       s = get_property ("instr");
-
-      /*
-       FIXME: use get_markup () to check type.
-      */
-      if (gh_string_p (s) || gh_pair_p (s))
-       create_text (s);
+      create_text();
     }
 
   if (dynamic_cast<Spanner*> (i.grob_)
     }
 
   if (dynamic_cast<Spanner*> (i.grob_)
@@ -104,11 +106,9 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i)
     groups enclosing that staff. The alignment has no real location,
     but is only a vehicle for the placement routine it contains, and
     therefore the location of its refpoint won't be very useful.
     groups enclosing that staff. The alignment has no real location,
     but is only a vehicle for the placement routine it contains, and
     therefore the location of its refpoint won't be very useful.
-    
 
     We could also just use stavesFound, but lets keep this working
     without staffs as well.
 
     We could also just use stavesFound, but lets keep this working
     without staffs as well.
-
   */
   if (dynamic_cast<Spanner*> (i.grob_)
       && ((Axis_group_interface::has_interface (i.grob_)
   */
   if (dynamic_cast<Spanner*> (i.grob_)
       && ((Axis_group_interface::has_interface (i.grob_)
@@ -122,8 +122,16 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i)
     }
 }
 
     }
 }
 
-
-
+void
+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();
+}
 
 ENTER_DESCRIPTION(Instrument_name_engraver,
 /* descr */       " Prints the name of the instrument (specified by "
 
 ENTER_DESCRIPTION(Instrument_name_engraver,
 /* descr */       " Prints the name of the instrument (specified by "