]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/instrument-name-engraver.cc
remove PDF related files
[lilypond.git] / lily / instrument-name-engraver.cc
index 11758a82c8e43c1ff93ee2bef972722ddf081359..8e1e84dc8e9f072227a12e7d90887b97c98052d8 100644 (file)
@@ -1,48 +1,46 @@
 /*   
 /*   
-  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--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 2000--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
   
  */
 
 #include "engraver.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 "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
 {
 
 class Instrument_name_engraver : public Engraver
 {
-  Item *text_;
-  Grob *delim_ ;
   
   
-  void create_text (SCM s);
 public:
 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 initialize ();
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
+  virtual void process_music ();
 };
 
 };
 
-
-
 Instrument_name_engraver::Instrument_name_engraver ()
 {
   text_ = 0;
 Instrument_name_engraver::Instrument_name_engraver ()
 {
   text_ = 0;
-  delim_ =0;
 }
 
 }
 
-
 void
 Instrument_name_engraver::initialize ()
 {
 void
 Instrument_name_engraver::initialize ()
 {
-  daddy_trans_l_->set_property ("instrumentSupport", SCM_EOL); 
+  context ()->set_property ("instrumentSupport", SCM_EOL); 
 }
 
 void
 }
 
 void
@@ -50,49 +48,51 @@ Instrument_name_engraver::stop_translation_timestep ()
 {
   if (text_)
     {
 {
   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;
     }
 }
 
 void
       text_ = 0;
     }
 }
 
 void
-Instrument_name_engraver::create_text (SCM txt)
+Instrument_name_engraver::create_text ()
 {
 {
-  if (!text_)
-    {
-      text_ = new Item (get_property ("InstrumentName"));
-      
-      if (text_->get_grob_property ("text") != txt)
-       text_->set_grob_property ("text", txt);
-     
-      if (delim_)
-        text_->set_parent (delim_, Y_AXIS);
+  if (text_)
+    return ;
+  
+  SCM txt = get_property ("instrument");
+  
+  if (now_mom () > Moment (0))
+    txt = get_property ("instr");
+  /*
+    UGH.
+  */
+  if (txt == SCM_EOL)
+    return ;
+
+  
+  text_ = make_item ("InstrumentName", SCM_EOL);
       
       
-      announce_grob (text_,0);
-    }
+  if (text_->get_property ("text") != txt)
+    text_->set_property ("text", txt);
+  
 }
 
 void
 Instrument_name_engraver::acknowledge_grob (Grob_info i)
 {
 }
 
 void
 Instrument_name_engraver::acknowledge_grob (Grob_info i)
 {
-  if (Bar::has_interface (i.grob_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.grob_l_)
-      && i.grob_l_->has_interface (ly_symbol2scm ("dynamic-interface")))
+  /*
+    Ugh - typechecking for pedal and dynamic sucks.
+   */
+  if (dynamic_cast<Spanner*> (i.grob_)
+      && (i.grob_->internal_has_interface (ly_symbol2scm ("dynamic-interface"))
+         || i.grob_->internal_has_interface (ly_symbol2scm ("piano-pedal-interface")))
+         )
     return;
 
   /*
     return;
 
   /*
@@ -100,29 +100,91 @@ 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.grob_l_)
-      && ((Axis_group_interface::has_interface (i.grob_l_)
-          && Axis_group_interface::axis_b (i.grob_l_, Y_AXIS)))
-      && !Align_interface::has_interface (i.grob_l_))
+  if (dynamic_cast<Spanner*> (i.grob_)
+      && ((Axis_group_interface::has_interface (i.grob_)
+          && Axis_group_interface::has_axis (i.grob_, Y_AXIS)))
+      && !Align_interface::has_interface (i.grob_))
     {
     {
-      SCM nl = gh_cons (i.grob_l_->self_scm (),
+      SCM nl = scm_cons (i.grob_->self_scm (),
                        get_property ("instrumentSupport"));
 
                        get_property ("instrumentSupport"));
 
-      daddy_trans_l_->set_property ("instrumentSupport", nl);
+      context ()->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 (scm_is_string (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.",
+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. ",
 /* creats*/       "InstrumentName",
 /* creats*/       "InstrumentName",
-/* acks  */       "bar-line-interface axis-group-interface",
+/* accepts */     "",
+/* acks  */      "bar-line-interface axis-group-interface",
 /* reads */       "instrument instr",
 /* write */       "");
 /* 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 */       "");