]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/instrument-name-engraver.cc
release commit
[lilypond.git] / lily / instrument-name-engraver.cc
index c98bbdd7e9f23338f07a279729980b37d4ff194e..ed8ff27d7bd8b697aec28d03a749e113bcd82e08 100644 (file)
@@ -1,36 +1,38 @@
 /*   
 /*   
-  new-staff-margin-engraver.cc --  implement Instrument_name_engraver
+  instrument-name-engraver.cc --  implement Instrument_name_engraver
   
   source file of the GNU LilyPond music typesetter
   
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2000--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 2000--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
   
  */
 
 #include "engraver.hh"
 #include "item.hh"
   
  */
 
 #include "engraver.hh"
 #include "item.hh"
-#include "bar.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 "system-start-delimiter.hh"
 #include "side-position-interface.hh"
 #include "align-interface.hh"
 #include "axis-group-interface.hh"
 #include "translator-group.hh"
+#include "text-item.hh"
 
 class Instrument_name_engraver : public Engraver
 {
   Item *text_;
   Grob *delim_ ;
   
 
 class Instrument_name_engraver : public Engraver
 {
   Item *text_;
   Grob *delim_ ;
   
-  void create_text (SCM s);
+  void create_text ();
 public:
 public:
-  VIRTUAL_COPY_CONS (Translator);
-  Instrument_name_engraver ();
+  TRANSLATOR_DECLARATIONS(Instrument_name_engraver);
+
   virtual void initialize ();
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
   virtual void initialize ();
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
+  virtual void process_music ();
 };
 
 };
 
-ADD_THIS_TRANSLATOR (Instrument_name_engraver);
+
 
 Instrument_name_engraver::Instrument_name_engraver ()
 {
 
 Instrument_name_engraver::Instrument_name_engraver ()
 {
@@ -42,7 +44,7 @@ Instrument_name_engraver::Instrument_name_engraver ()
 void
 Instrument_name_engraver::initialize ()
 {
 void
 Instrument_name_engraver::initialize ()
 {
-  daddy_trans_l_->set_property ("instrumentSupport", SCM_EOL); 
+  daddy_trans_->set_property ("instrumentSupport", SCM_EOL); 
 }
 
 void
 }
 
 void
@@ -58,41 +60,45 @@ 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_->set_grob_property ("text", txt);
       text_ = new Item (get_property ("InstrumentName"));
       
       if (text_->get_grob_property ("text") != txt)
        text_->set_grob_property ("text", txt);
-     
+
+      if (new_markup_p (txt))
+       text_->set_grob_property ("molecule-callback", new_markup_brewer());
+      
       if (delim_)
         text_->set_parent (delim_, Y_AXIS);
       
       if (delim_)
         text_->set_parent (delim_, Y_AXIS);
       
-      announce_grob (text_,0);
+      announce_grob (text_, SCM_EOL);
     }
 }
 
 void
 Instrument_name_engraver::acknowledge_grob (Grob_info i)
 {
     }
 }
 
 void
 Instrument_name_engraver::acknowledge_grob (Grob_info i)
 {
-  if (Bar::has_interface (i.elem_l_))
+  if (Bar_line::has_interface (i.grob_))
     {
     {
-      SCM s = get_property ("instrument");
-  
-      if (now_mom () > Moment (0))
-       s = get_property ("instr");
-
-      /*
-       FIXME: use markup_p () to check type.
-      */
-      if (gh_string_p (s) || gh_pair_p (s))
-       create_text (s);
+      create_text();
     }
 
     }
 
-  if (dynamic_cast<Spanner*> (i.elem_l_)
-      && i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface")))
+  if (dynamic_cast<Spanner*> (i.grob_)
+      && i.grob_->internal_has_interface (ly_symbol2scm ("dynamic-interface")))
     return;
 
   /*
     return;
 
   /*
@@ -100,20 +106,39 @@ 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.
   */
   */
-  if (dynamic_cast<Spanner*> (i.elem_l_)
-      && ((Axis_group_interface::has_interface (i.elem_l_)
-          && Axis_group_interface::axis_b (i.elem_l_, Y_AXIS)))
-      && !Align_interface::has_interface (i.elem_l_))
+  if (dynamic_cast<Spanner*> (i.grob_)
+      && ((Axis_group_interface::has_interface (i.grob_)
+          && Axis_group_interface::axis_b (i.grob_, Y_AXIS)))
+      && !Align_interface::has_interface (i.grob_))
     {
     {
-      SCM nl = gh_cons (i.elem_l_->self_scm (),
+      SCM nl = gh_cons (i.grob_->self_scm (),
                        get_property ("instrumentSupport"));
 
                        get_property ("instrumentSupport"));
 
-      daddy_trans_l_->set_property ("instrumentSupport", nl);
+      daddy_trans_->set_property ("instrumentSupport", nl);
     }
 }
 
     }
 }
 
+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 "
+" @code{Staff.instrument} and @code{Staff.instr}) "
+"at the left of the staff. ",
+/* creats*/       "InstrumentName",
+/* accepts */     "",
+/* acks  */      "bar-line-interface axis-group-interface",
+/* reads */       "instrument instr",
+/* write */       "");