]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/instrument-name-engraver.cc (start_spanner): new
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 26 Jul 2006 12:33:43 +0000 (12:33 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 26 Jul 2006 12:33:43 +0000 (12:33 +0000)
function. Create spanner when property changes.
(stop_spanner): new function.

* python/convertrules.py (conv): add rule.

* lily/instrument-name-engraver.cc: shortVocalName iso. vocNam,
shortInstrumentName iso. instr.

ChangeLog
lily/instrument-name-engraver.cc
lily/system-start-text.cc
python/convertrules.py

index 8f49cc7343504fce79413af51ec408bf1c12abee..7b5c994854ecb8330570076e99b66dc56e78e0a9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2006-07-26  Han-Wen Nienhuys  <hanwen@lilypond.org>
 
+       * lily/instrument-name-engraver.cc (start_spanner): new
+       function. Create spanner when property changes.
+       (stop_spanner): new function.
+
        * python/convertrules.py (conv): add rule.
 
        * lily/instrument-name-engraver.cc: shortVocalName iso. vocNam,
index 0375e400741c5f9db0572d845cf0934de3075c92..76e0a88e33dca6ca44535e889f230ed91aa0fe43 100644 (file)
@@ -25,41 +25,63 @@ public:
 protected:
   Spanner *text_spanner_;
 
+  SCM long_text_;
+  SCM short_text_;
+
+  vector<Grob*> axis_groups_;
+  
   virtual void finalize ();
   DECLARE_ACKNOWLEDGER (axis_group);
   void process_music ();
+  void start_spanner ();
+  void stop_spanner ();
 };
 
 Instrument_name_engraver::Instrument_name_engraver ()
 {
   text_spanner_ = 0;
+
+  long_text_ = SCM_EOL;
+  short_text_ = SCM_EOL;
 }
 
 void
 Instrument_name_engraver::process_music ()
 {
-  if (!text_spanner_)
+  start_spanner ();
+}
+
+void
+Instrument_name_engraver::start_spanner ()
+{
+  SCM long_text = get_property ("instrumentName");
+  SCM short_text = get_property ("shortInstrumentName");
+
+  if (!(Text_interface::is_markup (long_text)
+       || Text_interface::is_markup (short_text)))
     {
-      SCM long_text = get_property ("instrument");
-      SCM short_text = get_property ("shortInstrumentName");
-
-      if (!(Text_interface::is_markup (long_text)
-           || Text_interface::is_markup (short_text)))
-       {
-         long_text = get_property ("vocalName");
-         short_text = get_property ("shortVocalName");
-       }
+      long_text = get_property ("vocalName");
+      short_text = get_property ("shortVocalName");
+    }
   
-      if (Text_interface::is_markup (long_text)
-         || Text_interface::is_markup (short_text))
-       {
-         text_spanner_ = make_spanner ("InstrumentName", SCM_EOL);
+  if ((Text_interface::is_markup (long_text)
+       || Text_interface::is_markup (short_text))
+      && (!text_spanner_
+         || short_text_ != short_text
+         || long_text_ != long_text))
+    {
+      if (text_spanner_)
+       stop_spanner ();
+      
+      text_spanner_ = make_spanner ("InstrumentName", SCM_EOL);
          
-         Grob *col = unsmob_grob (get_property ("currentCommandColumn"));
-         text_spanner_->set_bound (LEFT, col);
-         text_spanner_->set_property ("text", short_text);
-         text_spanner_->set_property ("long-text", long_text);
-       }
+      Grob *col = unsmob_grob (get_property ("currentCommandColumn"));
+      text_spanner_->set_bound (LEFT, col);
+      text_spanner_->set_property ("text", short_text);
+      text_spanner_->set_property ("long-text", long_text);
+
+      short_text_ = short_text;
+      long_text_ = long_text;
     }
 }
 
@@ -71,8 +93,7 @@ Instrument_name_engraver::acknowledge_axis_group (Grob_info info)
       && Axis_group_interface::has_axis (info.grob (), Y_AXIS)
       && (!Align_interface::has_interface (info.grob ())))
     {
-      Grob *staff = info.grob();
-      Pointer_group_interface::add_grob (text_spanner_, ly_symbol2scm ("elements"), staff);
+      axis_groups_.push_back (info.grob ());
     }
 }
 
@@ -81,21 +102,32 @@ Instrument_name_engraver::finalize ()
 {
   if (text_spanner_)
     {
-      text_spanner_->set_bound (RIGHT,
-                               unsmob_grob (get_property ("currentCommandColumn")));
+      stop_spanner ();
+    }
+}
+
+void
+Instrument_name_engraver::stop_spanner ()
+{
+  for (vsize i = 0; i < axis_groups_.size (); i++)
+    Pointer_group_interface::add_grob (text_spanner_, ly_symbol2scm ("elements"), axis_groups_[i]);
+  
+  text_spanner_->set_bound (RIGHT,
+                           unsmob_grob (get_property ("currentCommandColumn")));
 
-      Pointer_group_interface::set_ordered (text_spanner_, ly_symbol2scm ("elements"), false);
+  Pointer_group_interface::set_ordered (text_spanner_, ly_symbol2scm ("elements"), false);
 
-      System *system = get_root_system (text_spanner_);
+  System *system = get_root_system (text_spanner_);
 
-      /*
-       UGH, should handle this in Score_engraver.
-       */
-      if (system)
-       Axis_group_interface::add_element (system, text_spanner_);
-      else
-       text_spanner_->programming_error ("can't find root system");
-    }
+  /*
+    UGH, should handle this in Score_engraver.
+  */
+  if (system)
+    Axis_group_interface::add_element (system, text_spanner_);
+  else
+    text_spanner_->programming_error ("can't find root system");
+
+  text_spanner_ = 0;
 }
 
 #include "translator.icc"
index 2bc4e507d65ec6cb17758c907a31113d48eda90b..5a90191081e307575dfce3f143c8cb2c785451c7 100644 (file)
@@ -13,6 +13,7 @@
 #include "font-interface.hh"
 #include "spanner.hh"
 #include "stencil.hh"
+#include "item.hh"
 
 class System_start_text
 {
@@ -56,6 +57,12 @@ System_start_text::print (SCM smob)
 {
   Spanner *me = unsmob_spanner (smob);
 
+  if (!me->get_bound (LEFT)->break_status_dir ())
+    {
+      me->suicide ();
+      return SCM_EOL;
+    }
+
   extract_grob_set (me, "elements", all_elts);
   vector<Grob*> elts;
   for (vsize i = 0; i < all_elts.size (); i++)
@@ -81,7 +88,8 @@ System_start_text::print (SCM smob)
     }
 
   Stencil m = get_stencil (me);
-  m.translate_axis (ext.center (), Y_AXIS);
+  if (!ext.is_empty ())
+    m.translate_axis (ext.center (), Y_AXIS);
   return m.smobbed_copy ();
 }
 
index af56792a702daa0c07d03679e7c30b2674367452..d670696b765c7b5a92d18f9cccaf3140aa7d28d5 100644 (file)
@@ -2827,7 +2827,8 @@ conversions.append (((2, 9, 11), conv, """\\set tupletNumberFormatFunction -> \\
 def conv (str):
     str = re.sub ('vocNam', 'shortVocalName', str)
     str = re.sub (r'([^a-z])instr\s*=', r'\1shortInstrumentName =', str)
+    str = re.sub (r'([^a-z])instrument\s*=', r'\1instrumentName =', str)
     return str
 
-conversions.append (((2, 9, 13), conv, """instr -> shortInstrumentName, vocNam -> shortVocalName"""))
+conversions.append (((2, 9, 13), conv, """instrument -> instrumentName, instr -> shortInstrumentName, vocNam -> shortVocalName"""))