]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.134
authorfred <fred>
Wed, 27 Mar 2002 00:56:55 +0000 (00:56 +0000)
committerfred <fred>
Wed, 27 Mar 2002 00:56:55 +0000 (00:56 +0000)
31 files changed:
Documentation/footer.html.in
input/test/orchestscore.ly
lily/a2-engraver.cc
lily/align-interface.cc
lily/align-note-column-engraver.cc
lily/arpeggio-engraver.cc
lily/bar-number-engraver.cc
lily/break-align-item.cc
lily/clef-engraver.cc
lily/dot-column-engraver.cc
lily/dot-column.cc
lily/dynamic-engraver.cc
lily/grace-position-engraver.cc
lily/include/side-position-interface.hh
lily/instrument-name-engraver.cc
lily/mark-engraver.cc
lily/paper-outputter.cc
lily/performance.cc
lily/piano-pedal-engraver.cc
lily/script-column-engraver.cc
lily/script-column.cc
lily/script-engraver.cc
lily/script.cc
lily/side-position-interface.cc
lily/syllable-group.cc
lily/system-start-delimiter.cc
lily/text-engraver.cc
lily/text-spanner-engraver.cc
lily/volta-engraver.cc
lily/volta-spanner.cc
scm/grob-description.scm

index 205114b3354ee4c92d7fbf6ebbe08f8054f11676..19ed96aed4e958cb3d1aafa38cfbb4d66ffca3b4 100644 (file)
@@ -28,7 +28,7 @@ Please send comments on these web pages to
 
 <p>
 
-Copyright (c) 1997, 1998, 1999, 2000 Han-Wen Nienhuys and Jan Nieuwenhuizen.
+Copyright (c) 1997--2001 Han-Wen Nienhuys and Jan Nieuwenhuizen.
 
 <p>
 
index 06a8b1acf852ea8d9d9ab614e7ab6934c7562803..5dc33ef467730c316a13c20d5865031e122bc5bb 100644 (file)
@@ -17,7 +17,9 @@ c1 | c2 c | c c | R1*5
 \score{ < 
   \context StaffGroup = wood <
     \context Staff = flauto <
-      \property Staff.instrument = "\\rotatebox[origin=c]{90}{Flauto}"
+    %"\\rotatebox[origin=c]{90}{Flauto}"
+    
+      \property Staff.instrument = "Flauto"
       \property Staff.instr = "Fl."
       \m
     >
@@ -82,7 +84,7 @@ c1 | c2 c | c c | R1*5
     >
     \context Staff = vlc <
       %% \property Staff.instrument = "Violoncello"
-      \property StaffCombineStaff.instrument = #'(lines "Violoncello" "e" "Contrabasso")
+      \property Staff.instrument = #'(lines "Violoncello" "e" "Contrabasso")
       \property Staff.instr = "Vlc"
       \m
     >
index f767e7004d3826723466128686b666b7f285a952..b6958618bc6d4cb8dd7e617389904f5956139dc2 100644 (file)
@@ -55,7 +55,7 @@ A2_engraver::create_grobs ()
                  && daddy_trans_l_->id_str_.left_str (3) == "one")))
        {
          text_p_ = new Item (get_property ("TextScript"));
-         Side_position::set_axis (text_p_, Y_AXIS);
+         Side_position_interface::set_axis (text_p_, Y_AXIS);
          announce_grob (text_p_, 0);
       
          Direction dir = UP;
@@ -80,7 +80,7 @@ A2_engraver::create_grobs ()
                text = get_property ("aDueText");
            }
          
-         Side_position::set_direction (text_p_, dir);
+         Side_position_interface::set_direction (text_p_, dir);
          text_p_->set_grob_property ("text", text);
        }
     }
@@ -97,14 +97,14 @@ A2_engraver::acknowledge_grob (Grob_info i)
       if (Note_head::has_interface (i.elem_l_))
        {
          Grob*t = text_p_;
-         Side_position::add_support (t, i.elem_l_);
-         if (Side_position::get_axis (t) == X_AXIS
+         Side_position_interface::add_support (t, i.elem_l_);
+         if (Side_position_interface::get_axis (t) == X_AXIS
              && !t->parent_l (Y_AXIS))
            t->set_parent (i.elem_l_, Y_AXIS);
        }
       if (Stem::has_interface (i.elem_l_))
        {
-         Side_position::add_support (text_p_, i.elem_l_);
+         Side_position_interface::add_support (text_p_, i.elem_l_);
        }
     }
          
@@ -174,7 +174,7 @@ A2_engraver::stop_translation_timestep ()
 {
   if (text_p_)
     {
-      Side_position::add_staff_support (text_p_);
+      Side_position_interface::add_staff_support (text_p_);
       typeset_grob (text_p_);
       text_p_ = 0;
     }
index 5df19061aad3e580d2ec1f6c28a4c8c5bbc7e7c9..7aa6de3fc82278b10331c1dbe7d467331ed08cea 100644 (file)
@@ -199,17 +199,16 @@ Align_interface::align_elements_to_extents (Grob * me, Axis a)
          all_translates .push (w);
          j++;
        }
-    }
 
-  if (isdir_b  (align))
-    {
-      center_offset = total.linear_combination (gh_scm2double (align));
-    }
+      if (isdir_b  (align))
+       {
+         center_offset = total.linear_combination (gh_scm2double (align));
+       }
 
-  for (int j = 0 ;  j < all_grobs.size (); j++)
-    all_grobs[j]->translate_axis (all_translates[j] - center_offset, a);
+      for (int j = 0 ;  j < all_grobs.size (); j++)
+       all_grobs[j]->translate_axis (all_translates[j] - center_offset, a);
+    }
 }
-
 Axis
 Align_interface::axis (Grob*me)
 {
index d03f316746f485ac889e3651a4190c356b0cd2b0..87dd0f079483ff71bdd72e20c017a99ab56900fc 100644 (file)
@@ -48,8 +48,8 @@ Align_note_column_engraver::initialize ()
 {
   align_item_p_ = new Item (get_property ("GraceAlignment"));
   Grace_align_item::set_interface (align_item_p_);
-  Side_position::set_axis (align_item_p_, X_AXIS);
-  Side_position::set_direction (align_item_p_, LEFT);
+  Side_position_interface::set_axis (align_item_p_, X_AXIS);
+  Side_position_interface::set_direction (align_item_p_, LEFT);
   
   // needed  for setting font size.
   announce_grob (align_item_p_, 0);
index 76bc80a5050bd7fd55f66842dbc7ecb44f43ba62..b69aeb35bc85f7418821c4add7ecd6c8045c26bd 100644 (file)
@@ -91,7 +91,7 @@ Arpeggio_engraver::create_grobs ()
        }
       for (int i = 0; i < supports_.size (); i++)
        {
-         Side_position::add_support (arpeggio_, supports_[i]);
+         Side_position_interface::add_support (arpeggio_, supports_[i]);
        }
       announce_grob (arpeggio_, arpeggio_req_);
     }
index b082ddb1aae0b842615989c86c668b360164048e..eb91eeef961f68cb4938779d7a0cacaad4f0429b 100644 (file)
@@ -119,7 +119,7 @@ Bar_number_engraver::create_items ()
 
   SCM b = get_property ("BarNumber");
   text_p_ = new Item (b);
-  Side_position::set_axis(text_p_,Y_AXIS);
+  Side_position_interface::set_axis(text_p_,Y_AXIS);
 
   announce_grob (text_p_, 0);
 }
index 74dab15ca4e0de6977ba657690a6084de823ce66..779be73cf3340f725b15b2e053a2f554fe58c307 100644 (file)
@@ -69,7 +69,7 @@ Break_align_interface::self_align_callback (SCM element_smob, SCM axis)
    */
   
   
-  return Side_position::aligned_on_self (element_smob, axis);  
+  return Side_position_interface::aligned_on_self (element_smob, axis);  
 }
 
 void
index adc1807f39eb7ac51442fc97655150a97ab4f48b..f0fe112bac76b22f341282e43361d33960c1045b 100644 (file)
@@ -163,7 +163,7 @@ Clef_engraver::create_clef ()
     {
       Item * g = new Item (get_property ("OctavateEight"));
 
-      Side_position::add_support (g,clef_p_);      
+      Side_position_interface::add_support (g,clef_p_);      
 
       g->set_parent (clef_p_, Y_AXIS);
       g->set_parent (clef_p_, X_AXIS);
index 9fc7bbcd04a7d43d45b7144742bb40107f8424f5..9e234405cfc0991fcd81004562f7cd431a6f3650 100644 (file)
@@ -54,8 +54,8 @@ Dot_column_engraver::acknowledge_grob (Grob_info info)
          dotcol_p_ = new Item(get_property ("DotColumn"));
 
          Dot_column::set_interface (dotcol_p_);
-         Side_position::set_axis (dotcol_p_, X_AXIS);
-         Side_position::set_direction (dotcol_p_, RIGHT);      
+         Side_position_interface::set_axis (dotcol_p_, X_AXIS);
+         Side_position_interface::set_direction (dotcol_p_, RIGHT);      
          announce_grob (dotcol_p_, 0);
        }
 
index cfd51975ac96abfd809569cd8bb1a7422f655204..db7e3b0d3c10e7f9b9906b0bfacc369df8bffec4 100644 (file)
@@ -124,7 +124,7 @@ Dot_column::add_head (Grob * me, Grob *rh)
   Grob * d = unsmob_grob (rh->get_grob_property ("dot"));
   if (d)
     {
-      Side_position::add_support (me,rh);
+      Side_position_interface::add_support (me,rh);
 
       Pointer_group_interface ::add_element (me, "dots",d);
       d->add_offset_callback (Dot_column::force_shift_callback_proc , Y_AXIS);
index 2aee3603d13b643874daf05d7cea6f0bd53c333d..ae16fb9aaf0ce848f861ad68238df9efd8b6db26 100644 (file)
@@ -140,7 +140,7 @@ Dynamic_engraver::process_music ()
        {
          line_spanner_ = new Spanner (get_property ("DynamicLineSpanner"));
 
-         Side_position::set_axis (line_spanner_, Y_AXIS);
+         Side_position_interface::set_axis (line_spanner_, Y_AXIS);
          Axis_group_interface::set_interface (line_spanner_);
          Axis_group_interface::set_axes (line_spanner_, Y_AXIS, Y_AXIS);
 
@@ -174,8 +174,8 @@ Dynamic_engraver::process_music ()
       script_p_->set_grob_property ("text",
                                   script_req_l_->get_mus_property ("text"));
       
-      Side_position::set_direction (script_p_, LEFT);
-      Side_position::set_axis (script_p_, X_AXIS);
+      Side_position_interface::set_direction (script_p_, LEFT);
+      Side_position_interface::set_axis (script_p_, X_AXIS);
       
       if (Direction d = script_req_l_->get_direction ())
        Directional_element_interface::set (line_spanner_, d);
@@ -339,7 +339,7 @@ Dynamic_engraver::typeset_all ()
       /*
        To make sure that this works
       */
-      Side_position::add_staff_support (finished_line_spanner_);
+      Side_position_interface::add_staff_support (finished_line_spanner_);
       /*
        We used to have
        
@@ -366,7 +366,7 @@ Dynamic_engraver::acknowledge_grob (Grob_info i)
     {
       if (line_spanner_)
        {
-         Side_position::add_support (line_spanner_,i.elem_l_);
+         Side_position_interface::add_support (line_spanner_,i.elem_l_);
          add_bound_item (line_spanner_,dynamic_cast<Item*>(i.elem_l_));
        }
     }
index b5bf1b1a054ac8a3495b5ee674efb76d41c76555..0f732a37d8990bf74cb630084b3e5860c8a1e1c1 100644 (file)
@@ -67,7 +67,7 @@ Grace_position_engraver::create_grobs ()
   if (align_l_)
     {
       for (int i=0; i < support_.size (); i++)
-       Side_position::add_support (align_l_,support_[i]);
+       Side_position_interface::add_support (align_l_,support_[i]);
       support_.clear ();
     }
 }
@@ -75,7 +75,7 @@ Grace_position_engraver::create_grobs ()
 void
 Grace_position_engraver::stop_translation_timestep ()
 {
-  if (align_l_ && !Side_position::supported_b (align_l_))
+  if (align_l_ && !Side_position_interface::supported_b (align_l_))
     {
   /*
      We don't have support. Either some moron tried attaching us to a rest,
index 38ab695aa1e2184fbeed0d3920d6726d7ef3b618..9ce408a662e92c44f161c70d406abc223253847e 100644 (file)
 #include "item.hh"
 
 /*
-  TODO: move  out unrelated callbacks.
+  TODO: move out unrelated callbacks.
 
   TODO: reduce number of methods.
 */
-struct Side_position
+struct Side_position_interface
 {
 public:
-  DECLARE_SCHEME_CALLBACK(side_position, (SCM  element, SCM axis));
-  DECLARE_SCHEME_CALLBACK(aligned_on_self, (SCM  element, SCM axis));
+  DECLARE_SCHEME_CALLBACK(aligned_on_support_extents, (SCM element, SCM axis));
+  DECLARE_SCHEME_CALLBACK(aligned_on_support_refpoints, (SCM element, SCM axis));
+  DECLARE_SCHEME_CALLBACK(aligned_on_self, (SCM element, SCM axis));
   DECLARE_SCHEME_CALLBACK(aligned_side, (SCM element, SCM axis));  
   DECLARE_SCHEME_CALLBACK(quantised_position, (SCM element, SCM axis));
   DECLARE_SCHEME_CALLBACK(centered_on_parent, (SCM element, SCM axis));
+
+  static SCM general_side_position (Grob*, Axis, bool);
   static void set_axis (Grob*,Axis);
   static void set_minimum_space (Grob*,Real);
   static void set_padding (Grob*,Real);
index 852ef176d35a4a0b4d963b95cbb5d4c39a9e7b84..9171bb691939e39e1536db8997eedc46fa0ce51a 100644 (file)
 #include "system-start-delimiter.hh"
 #include "side-position-interface.hh"
 #include "align-interface.hh"
+#include "axis-group-interface.hh"
+#include "translator-group.hh"
 
 class Instrument_name_engraver : public Engraver
 {
   Item *text_;
-  Grob * delim_ ;
-
+  Grob *delim_ ;
+  
   void create_text (SCM s);
 public:
   VIRTUAL_COPY_CONS(Translator);
   Instrument_name_engraver ();
-
+  virtual void initialize ();
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep ();
 };
@@ -37,11 +39,19 @@ Instrument_name_engraver::Instrument_name_engraver ()
 }
 
 
+void
+Instrument_name_engraver::initialize ()
+{
+  daddy_trans_l_->set_property ("instrumentSupport", SCM_EOL); 
+}
+
 void
 Instrument_name_engraver::stop_translation_timestep ()
 {
   if (text_)
     {
+      text_->set_grob_property ("side-support-elements",
+                               get_property ("instrumentSupport"));
       typeset_grob (text_);
       text_ = 0;
     }
@@ -82,12 +92,20 @@ Instrument_name_engraver::acknowledge_grob (Grob_info i)
          
     }
 
-  if (Align_interface::has_interface (i.elem_l_)
-      && Align_interface::axis  (i.elem_l_) == Y_AXIS      
-      //System_start_delimiter::has_interface (i.elem_l_)
-      && i.origin_trans_l_->daddy_trans_l_ == daddy_trans_l_)
+  if (dynamic_cast<Spanner*> (i.elem_l_)
+      && i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface")))
+    return;
+  
+  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_)
+            && Align_interface::axis  (i.elem_l_) == Y_AXIS)))
     {
-      delim_ = i.elem_l_;
+      SCM nl = gh_cons (i.elem_l_->self_scm (),
+                       get_property ("instrumentSupport"));
+
+      daddy_trans_l_->set_property ("instrumentSupport", nl);
     }
 }
 
index e559ff8029f547304ffbfee1973507c25e2cfce6..b860caba17b99b9c9e1ac399495423c54b991e50 100644 (file)
@@ -107,7 +107,7 @@ Mark_engraver::create_items (Request *rq)
   text_p_ = new Item (s);
 
 
-  Side_position::set_axis (text_p_, Y_AXIS);
+  Side_position_interface::set_axis (text_p_, Y_AXIS);
 
   announce_grob (text_p_, rq);
 }
index 5317b7ada185ef110ebd770b8654a60e5407ef80..46016c7573f425a7adfdadd430aa55d71a86b776 100644 (file)
@@ -97,6 +97,11 @@ Paper_outputter::output_header ()
       generate = generate.left_str (generate.length_i () - 1);
     }
 
+  /*
+    Make fixed length time stamps
+   */
+  generate = generate + to_str (' ' * (120 - generate.length_i ())>? 0)  ;
+  
   SCM args_scm = 
     gh_list (ly_str02scm (creator.ch_l ()),
             ly_str02scm (generate.ch_l ()), SCM_UNDEFINED);
index 7418c30f86eb2fd3ca47958aa2b32ed0d5bbf834..9e8715b1116d757bdec861186b7a44963f310fd5 100644 (file)
@@ -104,6 +104,11 @@ Performance::output_header_track (Midi_stream& midi_stream)
       str += ctime (&t);
       str = str.left_str (str.length_i() - 1);
     }
+
+  /*
+    Pad out time stamps to 120 chars.  */
+  str = str + to_str (' ' , (120 - str.length_i ()) >? 0);
+  
   Audio_text generate_a (Audio_text::TEXT, str);
   Midi_text generate (&generate_a);
   midi_track.add (Moment (0), &generate);
index 641a7fb0f7eb8e6e21c3982c11b193b01ce04cd3..527bd396c775745b99cd4197e1af8f5a917e60af 100644 (file)
@@ -90,15 +90,15 @@ Piano_pedal_engraver::acknowledge_grob (Grob_info info)
        {
          if (Rhythmic_head::has_interface (info.elem_l_))
            {
-             Side_position::add_support (p->item_p_, info.elem_l_);
+             Side_position_interface::add_support (p->item_p_, info.elem_l_);
 
-             if (Side_position::get_axis(p->item_p_) == X_AXIS
+             if (Side_position_interface::get_axis(p->item_p_) == X_AXIS
                  && !p->item_p_->parent_l (Y_AXIS))
                p->item_p_->set_parent (info.elem_l_, Y_AXIS);
            }
          if (Stem::has_interface (info.elem_l_))
            {
-             Side_position::add_support (p->item_p_,info.elem_l_);
+             Side_position_interface::add_support (p->item_p_,info.elem_l_);
            }
        }
     }
@@ -195,7 +195,7 @@ Piano_pedal_engraver::stop_translation_timestep ()
     {
       if (p->item_p_)
        {
-         Side_position::add_staff_support (p->item_p_);
+         Side_position_interface::add_staff_support (p->item_p_);
          
          /*
            Hmm.
@@ -204,7 +204,7 @@ Piano_pedal_engraver::stop_translation_timestep ()
            {
              if (sustain)
                {
-                 Side_position::add_support (p->item_p_,sustain);
+                 Side_position_interface::add_support (p->item_p_,sustain);
                }
            }
          typeset_grob (p->item_p_);
index 185ae49cdf0110239489003ba471c3eacc10a78d..5f0b41db4e569104ac7f8bcc635d939cf7f89613 100644 (file)
@@ -57,10 +57,10 @@ void
 Script_column_engraver::acknowledge_grob(Grob_info inf) 
 {
   Item *thing = dynamic_cast<Item*> (inf.elem_l_);
-  if (thing && Side_position::has_interface (inf.elem_l_)) // ugh FIXME
+  if (thing && Side_position_interface::has_interface (inf.elem_l_)) // ugh FIXME
     {
       if (!Item::breakable_b (thing)
-         && Side_position::get_axis (inf.elem_l_) == Y_AXIS)
+         && Side_position_interface::get_axis (inf.elem_l_) == Y_AXIS)
        {
          script_l_arr_.push (thing);
        }
index 2c7e6b24de0cb88134682909bd4e67768baf8bd2..1bddead7707182d515783dab3eba12d3ab7fbb36 100644 (file)
@@ -46,7 +46,7 @@ Script_column::before_line_breaking (SCM smob)
                                     
   for (int i=0; i < staff_sided.size (); i++)
     {
-      arrs[Side_position::get_direction (staff_sided[i])]
+      arrs[Side_position_interface::get_direction (staff_sided[i])]
        .push (staff_sided[i]);
     }
 
@@ -61,7 +61,7 @@ Script_column::before_line_breaking (SCM smob)
       {
 
        if (last)
-         Side_position::add_support( arr[i],last);
+         Side_position_interface::add_support( arr[i],last);
            
        arr[i]->remove_grob_property ("script-priority");
        last = arr[i];
index c8d677d26ea34854e483ba997ed1fd496204de88..22870e20757463d6acedb92ccf23d8429ae3a789 100644 (file)
@@ -100,13 +100,13 @@ Script_engraver::create_grobs ()
        */
       SCM axisprop = get_property ("scriptHorizontal");
       bool xaxis = to_boolean (axisprop);
-      Side_position::set_axis (p, xaxis ? X_AXIS : Y_AXIS);
+      Side_position_interface::set_axis (p, xaxis ? X_AXIS : Y_AXIS);
       
       if (!follow_staff && ! xaxis)
        p->set_grob_property ("staff-support", SCM_BOOL_T);
 
       if (!xaxis && follow_staff)
-       p->add_offset_callback (Side_position::quantised_position_proc, Y_AXIS);
+       p->add_offset_callback (Side_position_interface::quantised_position_proc, Y_AXIS);
       
       
       p->set_grob_property ("script-priority", priority);
@@ -134,7 +134,7 @@ Script_engraver::acknowledge_grob (Grob_info inf)
          Grob*e = script_p_arr_[i];
 
          e->set_grob_property ("direction-source", inf.elem_l_->self_scm ());
-         Side_position::add_support (e, inf.elem_l_);
+         Side_position_interface::add_support (e, inf.elem_l_);
        }
     }
   else if (Rhythmic_head::has_interface (inf.elem_l_))
@@ -147,11 +147,11 @@ Script_engraver::acknowledge_grob (Grob_info inf)
            {
              e->set_parent (inf.elem_l_, X_AXIS);
            }
-         if (Side_position::get_axis (e) == X_AXIS
+         if (Side_position_interface::get_axis (e) == X_AXIS
              && !e->parent_l (Y_AXIS))
            e->set_parent (inf.elem_l_, Y_AXIS);
          
-         Side_position::add_support (e,inf.elem_l_);
+         Side_position_interface::add_support (e,inf.elem_l_);
        }
     }  
 }
@@ -164,7 +164,7 @@ Script_engraver::stop_translation_timestep()
       Grob * sc = script_p_arr_[i];
       if (to_boolean (sc->get_grob_property ("staff-support")))
        {
-         Side_position::add_staff_support (sc);
+         Side_position_interface::add_staff_support (sc);
        }
       typeset_grob (sc);
     }
index 6ed6ee306c1c9ae8405631556cca1d67cf6baab0..b19724f6b18ef2f367ea9cb4612e0482ff7f0c6c 100644 (file)
@@ -44,8 +44,8 @@ Script::after_line_breaking (SCM smob)
 {
   Grob * me = unsmob_grob (smob);
 
-  Direction d = Side_position::get_direction (me);
-  Side_position::set_direction (me,d);
+  Direction d = Side_position_interface::get_direction (me);
+  Side_position_interface::set_direction (me,d);
 
   return SCM_UNSPECIFIED;
 }
@@ -62,7 +62,7 @@ Script::brew_molecule (SCM smob)
    if (isdir_b (d))
      dir = to_dir (d);
 #endif
-  Direction dir = Side_position::get_direction(me);
+  Direction dir = Side_position_interface::get_direction(me);
   return get_molecule (me, dir).smobbed_copy();
 }
 
index f19e5471ccc8c5d317a26a37301b79e634cc14e6..f18363f95dc5ed8dd2758a5cf1437226f5a08590 100644 (file)
@@ -16,7 +16,7 @@
 #include "group-interface.hh"
 
 void
-Side_position::add_support (Grob*me, Grob*e)
+Side_position_interface::add_support (Grob*me, Grob*e)
 {
   Pointer_group_interface::add_element (me, "side-support-elements",e);
 }
@@ -24,7 +24,7 @@ Side_position::add_support (Grob*me, Grob*e)
 
 
 Direction
-Side_position::get_direction (Grob*me)
+Side_position_interface::get_direction (Grob*me)
 {
   SCM d = me->get_grob_property ("direction");
   if (isdir_b (d) && to_dir (d))
@@ -41,23 +41,31 @@ Side_position::get_direction (Grob*me)
   Grob * e = unsmob_grob(other_elt);
   if (e)
     {
-      return (Direction)(relative_dir * Side_position::get_direction (e));
+      return (Direction)(relative_dir * Side_position_interface::get_direction (e));
     }
   
-  return DOWN;
+  return CENTER;
 }
   
-/*
-   Callback that does the aligning. Puts the element next to the support
- */
 
-MAKE_SCHEME_CALLBACK(Side_position,side_position,2);
+MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_on_support_extents, 2);
 SCM
-Side_position::side_position (SCM element_smob, SCM axis)
+Side_position_interface::aligned_on_support_extents (SCM element_smob, SCM axis)
 {
   Grob *me = unsmob_grob (element_smob);
   Axis a = (Axis) gh_scm2int (axis);
 
+  return general_side_position (me, a, true);
+}
+
+
+/*
+ Puts the element next to the support, optionally taking in
+ account the extent of the support.
+*/
+SCM
+Side_position_interface::general_side_position (Grob * me, Axis a, bool use_extents)
+{
   Grob *common = me->parent_l (a);
   SCM support = me->get_grob_property ("side-support-elements");
   for (SCM s = support; s != SCM_EOL; s = gh_cdr (s))
@@ -70,12 +78,15 @@ Side_position::side_position (SCM element_smob, SCM axis)
   Interval dim;
   for (SCM s = support; s != SCM_EOL; s = gh_cdr (s))
     {
-
       Grob * e  = unsmob_grob ( gh_car (s));
       if (e)
-       {
+       if (use_extents)
          dim.unite (e->extent (common, a));
-       }
+       else
+         {
+           Real x = e->relative_coordinate (common, a);
+           dim.unite (Interval (x,x));
+         }
     }
 
   if (dim.empty_b ())
@@ -83,33 +94,51 @@ Side_position::side_position (SCM element_smob, SCM axis)
       dim = Interval(0,0);
     }
 
-  Direction dir = Side_position::get_direction (me);
+  Direction dir = Side_position_interface::get_direction (me);
     
   Real off =  me->parent_l (a)->relative_coordinate (common, a);
   SCM minimum = me->remove_grob_property ("minimum-space");
 
-  Real total_off = dim[dir] + off;
+  Real total_off = dim.linear_combination (dir) + off;
   SCM padding = me->remove_grob_property ("padding");
   if (gh_number_p (padding))
     {
       total_off += gh_scm2double (padding) * dir;
     }
-  if (gh_number_p (minimum) && total_off * dir < gh_scm2double (minimum))
+
+  if (gh_number_p (minimum) 
+      && dir
+      && total_off * dir < gh_scm2double (minimum))
     {
       total_off = gh_scm2double (minimum) * dir;
     }
+
   if (fabs (total_off) > 100 CM)
     programming_error ("Huh ? Improbable staff side dim.");
 
   return gh_double2scm (total_off);
 }
 
+/*
+  Cut & paste (ugh.)
+ */
+MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_on_support_refpoints,2);
+SCM
+Side_position_interface::aligned_on_support_refpoints (SCM smob, SCM axis)
+{
+  Grob *me = unsmob_grob (smob);
+  Axis a = (Axis) gh_scm2int (axis);
+
+  return  general_side_position (me, a, false); 
+}
+
+
 /**
   callback that centers the element on itself
  */
-MAKE_SCHEME_CALLBACK(Side_position,aligned_on_self,2);
+MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_on_self,2);
 SCM
-Side_position::aligned_on_self (SCM element_smob, SCM axis)
+Side_position_interface::aligned_on_self (SCM element_smob, SCM axis)
 {
   Grob *me = unsmob_grob (element_smob);
   Axis a = (Axis) gh_scm2int (axis);
@@ -156,14 +185,14 @@ directed_round (Real f, Direction d)
 
   Only rounds when we're inside the staff, as determined by
   Staff_symbol_referencer::staff_radius() */
-MAKE_SCHEME_CALLBACK(Side_position,quantised_position,2);
+MAKE_SCHEME_CALLBACK(Side_position_interface,quantised_position,2);
 SCM
-Side_position::quantised_position (SCM element_smob, SCM )
+Side_position_interface::quantised_position (SCM element_smob, SCM )
 {
   Grob *me = unsmob_grob (element_smob);
   
   
-  Direction d = Side_position::get_direction (me);
+  Direction d = Side_position_interface::get_direction (me);
 
   if (Staff_symbol_referencer::has_interface (me))
     {
@@ -186,15 +215,15 @@ Side_position::quantised_position (SCM element_smob, SCM )
 /*
   Position next to support, taking into account my own dimensions and padding.
  */
-MAKE_SCHEME_CALLBACK(Side_position,aligned_side,2);
+MAKE_SCHEME_CALLBACK(Side_position_interface,aligned_side,2);
 SCM
-Side_position::aligned_side (SCM element_smob, SCM axis)
+Side_position_interface::aligned_side (SCM element_smob, SCM axis)
 {
   Grob *me = unsmob_grob (element_smob);
   Axis a = (Axis) gh_scm2int (axis);
   
-  Direction d = Side_position::get_direction (me);
-  Real o = gh_scm2double (side_position (element_smob,axis));
+  Direction d = Side_position_interface::get_direction (me);
+  Real o = gh_scm2double (aligned_on_support_extents (element_smob,axis));
 
   Interval iv =  me->extent (me, a);
 
@@ -212,9 +241,9 @@ Side_position::aligned_side (SCM element_smob, SCM axis)
 /*
   Position centered on parent.
  */
-MAKE_SCHEME_CALLBACK(Side_position,centered_on_parent,2);
+MAKE_SCHEME_CALLBACK(Side_position_interface,centered_on_parent,2);
 SCM
-Side_position::centered_on_parent (SCM element_smob, SCM axis)
+Side_position_interface::centered_on_parent (SCM element_smob, SCM axis)
 {
   Grob *me = unsmob_grob (element_smob);
   Axis a = (Axis) gh_scm2int (axis);
@@ -225,7 +254,7 @@ Side_position::centered_on_parent (SCM element_smob, SCM axis)
 
 
 void
-Side_position::add_staff_support (Grob*me)
+Side_position_interface::add_staff_support (Grob*me)
 {
   Grob* st = Staff_symbol_referencer::staff_symbol_l (me);
   if (st)
@@ -235,19 +264,19 @@ Side_position::add_staff_support (Grob*me)
 }
 
 void
-Side_position::set_axis (Grob*me, Axis a)
+Side_position_interface::set_axis (Grob*me, Axis a)
 {
-  me->add_offset_callback (Side_position::aligned_side_proc, a);
+  me->add_offset_callback (Side_position_interface::aligned_side_proc, a);
 }
 
 
 
 // ugh. doesn't cactch all variants. 
 Axis
-Side_position::get_axis (Grob*me)
+Side_position_interface::get_axis (Grob*me)
 {
-  if (me->has_offset_callback_b (Side_position::aligned_side_proc, X_AXIS)
-      || me->has_offset_callback_b (Side_position::aligned_side_proc , X_AXIS))
+  if (me->has_offset_callback_b (Side_position_interface::aligned_side_proc, X_AXIS)
+      || me->has_offset_callback_b (Side_position_interface::aligned_side_proc , X_AXIS))
     return X_AXIS;
 
   
@@ -255,31 +284,31 @@ Side_position::get_axis (Grob*me)
 }
 
 void
-Side_position::set_direction (Grob*me, Direction d)
+Side_position_interface::set_direction (Grob*me, Direction d)
 {
   me->set_grob_property ("direction", gh_int2scm (d));
 }
 
 void
-Side_position::set_minimum_space (Grob*me, Real m)
+Side_position_interface::set_minimum_space (Grob*me, Real m)
 {
   me->set_grob_property ("minimum-space", gh_double2scm (m));
 }
 
 void
-Side_position::set_padding (Grob*me, Real p)
+Side_position_interface::set_padding (Grob*me, Real p)
 {
   me->set_grob_property ("padding", gh_double2scm (p));
 }
 
 bool
-Side_position::has_interface (Grob*me) 
+Side_position_interface::has_interface (Grob*me) 
 {
   return me->has_interface (ly_symbol2scm ("side-position-interface"));
 }
 
 bool
-Side_position::supported_b (Grob*me) 
+Side_position_interface::supported_b (Grob*me) 
 {
   SCM s = me->get_grob_property  ("side-support-elements"); 
   return gh_pair_p(s);
index 5b1e5c6cfe0f519332965da0457060e9a362f600..6965162778e003342d3581ccc0f35d77f7aa34ff 100644 (file)
@@ -120,7 +120,7 @@ Syllable_group::set_lyric_align(const char *punc, Grob *default_notehead_l)
     // centre on notehead ... if we have one. 
     if(notehead_l_) {
       lyric->set_parent(notehead_l_, X_AXIS);
-      lyric->add_offset_callback (Side_position::centered_on_parent_proc, X_AXIS);
+      lyric->add_offset_callback (Side_position_interface::centered_on_parent_proc, X_AXIS);
       // reference is on the right of the notehead; move it left half way, and add translation
       lyric->translate_axis (group_translation_f_-(notehead_l_->extent(notehead_l_, X_AXIS)).center(), X_AXIS);
     }
index 6f3223ad18b056fde29b0135a5133d322d666712..85d4947d59c4b74e9737b664ff7789a19386740c 100644 (file)
@@ -100,7 +100,8 @@ System_start_delimiter::brew_molecule (SCM smob)
                                  (me->self_scm(), gh_int2scm (Y_AXIS)));
   Real l = ext.length () / staff_space;
   
-  if (gh_number_p (c) && l <= gh_scm2double (c))
+  if (ext.empty_b ()
+      || (gh_number_p (c) && l <= gh_scm2double (c)))
     {
       me->suicide();
       return SCM_EOL;
index cb668b414608a00662aede9453005f015fcdaa9b..e4d2bbc8827a91cc8e6aa4c358c5f9ac3589e3c5 100644 (file)
@@ -53,15 +53,15 @@ Text_engraver::acknowledge_grob (Grob_info inf)
       for (int i=0; i < texts_.size (); i++)
        {
          Grob*t = texts_[i];
-         Side_position::add_support (t,inf.elem_l_);
+         Side_position_interface::add_support (t,inf.elem_l_);
 
          /*
            ugh.
           */
-         if (Side_position::get_axis( t) == X_AXIS
+         if (Side_position_interface::get_axis( t) == X_AXIS
              && !t->parent_l (Y_AXIS))
            t->set_parent (inf.elem_l_, Y_AXIS);
-         else if (Side_position::get_axis(t) == Y_AXIS
+         else if (Side_position_interface::get_axis(t) == Y_AXIS
              && !t->parent_l (X_AXIS))
            t->set_parent (inf.elem_l_, X_AXIS);
        }
@@ -71,7 +71,7 @@ Text_engraver::acknowledge_grob (Grob_info inf)
     {
       for (int i=0; i < texts_.size (); i++)
        {
-         Side_position::add_support(texts_[i],inf.elem_l_);
+         Side_position_interface::add_support(texts_[i],inf.elem_l_);
        }
     }
 }
@@ -101,7 +101,7 @@ Text_engraver::create_grobs ()
       SCM axisprop = get_property ("scriptHorizontal");
       
       Axis ax = to_boolean (axisprop) ? X_AXIS : Y_AXIS;
-      Side_position::set_axis (text, ax);
+      Side_position_interface::set_axis (text, ax);
 
 #if 0
       if (r->style_str_ == "finger" && ax == Y_AXIS)
@@ -109,8 +109,8 @@ Text_engraver::create_grobs ()
          /*
            nicely center the scripts.
           */ 
-         text->add_offset_callback (Side_position::aligned_on_self_proc, X_AXIS);
-         text->add_offset_callback (Side_position::centered_on_parent_proc, X_AXIS);
+         text->add_offset_callback (Side_position_interface::aligned_on_self_proc, X_AXIS);
+         text->add_offset_callback (Side_position_interface::centered_on_parent_proc, X_AXIS);
        }
 #endif
       
@@ -123,7 +123,7 @@ Text_engraver::create_grobs ()
                              gh_int2scm (200 + i));
 
       if (r->get_direction ())
-       Side_position::set_direction (text, r->get_direction ());
+       Side_position_interface::set_direction (text, r->get_direction ());
       
       text->set_grob_property ("text", r->get_mus_property ("text"));
       
@@ -145,7 +145,7 @@ Text_engraver::stop_translation_timestep ()
   for (int i=0; i < texts_.size (); i++)
     {
       Item *ti = texts_[i];
-      Side_position::add_staff_support (ti);
+      Side_position_interface::add_staff_support (ti);
       typeset_grob (ti);
     }
   texts_.clear ();
index 07e9b00fbd85f1fbec8aff5c857680c35452b77c..bba9f9be4e1895c9a304ca15c04b82a7dfce01e3 100644 (file)
@@ -123,7 +123,7 @@ Text_spanner_engraver::create_grobs ()
          span_->set_grob_property ("if-text-padding", gh_double2scm (0));
          span_->set_grob_property ("width-correct", gh_double2scm (0));
                    
-         Side_position::set_axis (span_, Y_AXIS);
+         Side_position_interface::set_axis (span_, Y_AXIS);
          Grob *e = unsmob_grob (get_property ("currentMusicalColumn"));
          span_->set_bound (LEFT, e);
          
@@ -138,7 +138,7 @@ Text_spanner_engraver::acknowledge_grob (Grob_info info)
 {
   if (span_ && Note_column::has_interface (info.elem_l_))
     {
-      Side_position::add_support (span_, info.elem_l_);
+      Side_position_interface::add_support (span_, info.elem_l_);
       add_bound_item (span_, dynamic_cast<Item*> (info.elem_l_));
     }
 }
@@ -148,7 +148,7 @@ Text_spanner_engraver::typeset_all ()
 {  
   if (finished_)
     {
-      Side_position::add_staff_support (finished_);
+      Side_position_interface::add_staff_support (finished_);
       typeset_grob (finished_);
       finished_ = 0;
     }
index f21f8aebbad05f320f81f4a8f437a3f5b6d69ddc..a6a9bbd7ba21b83d8b784ac3eedd5b9fa29c20fa 100644 (file)
@@ -173,7 +173,7 @@ Volta_engraver::stop_translation_timestep ()
 {
   if (end_volta_span_p_)
     {
-      Side_position::add_staff_support (end_volta_span_p_);
+      Side_position_interface::add_staff_support (end_volta_span_p_);
       
       typeset_grob (end_volta_span_p_ );
       end_volta_span_p_ =0;
index df0d1e63493a63e86d5828169f9b71c736be2339..0385af35c246e13874fceb53f236a6a7aa431f5c 100644 (file)
@@ -111,12 +111,12 @@ void
 Volta_spanner::add_bar  (Grob *me, Item* b)
 {
   Pointer_group_interface::add_element(me, "bars",b);
-  Side_position::add_support (me,b);
+  Side_position_interface::add_support (me,b);
   add_bound_item (dynamic_cast<Spanner*>(me), b); 
 }
 
 void
 Volta_spanner::add_column (Grob*me, Grob* c)
 {
-  Side_position::add_support (me,c);
+  Side_position_interface::add_support (me,c);
 }
index f9bbfab167689e876fa294f2f46887cef67f4173..32e7a677057bc5fa8f397dc11e7dbaf02cf03262 100644 (file)
@@ -14,7 +14,7 @@
               (Y-extent-callback . #f)        
               (molecule-callback . ,Arpeggio::brew_molecule)
               (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
-              (X-offset-callbacks . (,Side_position::aligned_side))
+              (X-offset-callbacks . (,Side_position_interface::aligned_side))
               (direction . -1)
               (staff-position . 0.0)
               (meta . ,(grob-description "Arpeggio" arpeggio-interface side-position-interface font-interface))
@@ -49,7 +49,7 @@
                (direction . 1)
                 (font-family . roman)
                (font-relative-size . -1)
-               (Y-offset-callbacks . (,Side_position::aligned_side))
+               (Y-offset-callbacks . (,Side_position_interface::aligned_side))
                (meta . ,(grob-description "BarNumber"
                                           side-position-interface
                        text-interface  font-interface break-aligned-interface))
                (dash-thickness . 1.2)
                (dash-length . 4.0)
                (self-alignment-Y . 0)
-               (Y-offset-callbacks . (,Side_position::aligned_on_self))
+               (Y-offset-callbacks . (,Side_position_interface::aligned_on_self))
                (meta . ,(grob-description "Hairpin" hairpin-interface))
        ))
 
                (dot-count . 1)
                (staff-position . 0.0)
                (Y-offset-callbacks  . (,Dots::quantised_position_callback ,Staff_symbol_referencer::callback))
-               (meta . ,(grob-description "Dots"  font-interface dot-interface ))
+               (meta . ,(grob-description "Dots"  font-interface dots-interface ))
        ))
        
        (DynamicText . (
-               (Y-offset-callbacks . (,Side_position::aligned_on_self))
+               (Y-offset-callbacks . (,Side_position_interface::aligned_on_self))
                (molecule-callback . ,Text_item::brew_molecule)
                (script-priority . 100)
                (font-series . bold)
                (axes . ( 1))
                (padding . 0.6)
                (minimum-space . 1.2)
+               (direction . -1)
                (meta . ,(grob-description "DynamicLineSpanner" dynamic-interface axis-group-interface side-position-interface))
        ))
        
        
        (Fingering . (
                (molecule-callback . ,Text_item::brew_molecule)
-               (X-offset-callbacks . (,Side_position::centered_on_parent ,Side_position::aligned_on_self))
+               (X-offset-callbacks . (,Side_position_interface::centered_on_parent ,Side_position_interface::aligned_on_self))
                (padding . 0.6)
+               (direction . -1)
                (self-alignment-X . 0)
                (font-family . number)
                (font-relative-size . -3)
        
        (InstrumentName . (
                (breakable . #t)
-               (Y-offset-callbacks . (,Side_position::centered_on_parent
-                                      ,Side_position::aligned_on_self))
+               (Y-offset-callbacks . (,Side_position_interface::aligned_on_self
+                                      ,Side_position_interface::aligned_on_support_refpoints
+))
+               (direction . 0)
                (self-alignment-Y . 0)
                (molecule-callback . ,Text_item::brew_molecule)         
                (break-align-symbol . Instrument_name)
        
        (Accidentals . (
                (molecule-callback . ,Local_key_item::brew_molecule)
-               (X-offset-callbacks . (,Side_position::aligned_side))
+               (X-offset-callbacks . (,Side_position_interface::aligned_side))
                (after-line-breaking-callback . ,Local_key_item::after_line_breaking)
                (direction . -1)
                (left-padding . 0.2)
        
        (LyricText . (
                (molecule-callback . ,Text_item::brew_molecule)
-               (X-offset-callbacks . (,Side_position::aligned_on_self))
+               (X-offset-callbacks . (,Side_position_interface::aligned_on_self))
                (self-alignment-X . 0)
                (non-rhythmic . #t)
                (word-space . 0.6)
        
        (RehearsalMark . (
                (molecule-callback . ,Text_item::brew_molecule)
-               (X-offset-callbacks . (,Side_position::aligned_on_self))
+               (X-offset-callbacks . (,Side_position_interface::aligned_on_self))
                (self-alignment-X . 0)
 
                (direction . 1)
                (self-alignment-X . 0)
                (text . "8")
                (visibility-lambda . ,begin-of-line-visible)
-               (X-offset-callbacks . (,Side_position::centered_on_parent ,Side_position::aligned_on_self))
-               (Y-offset-callbacks . (,Side_position::aligned_side))
+               (X-offset-callbacks . (,Side_position_interface::centered_on_parent ,Side_position_interface::aligned_on_self))
+               (Y-offset-callbacks . (,Side_position_interface::aligned_side))
                (molecule-callback . ,Text_item::brew_molecule)
                 (font-shape . italic)
                (font-family . roman)
                (X-extent-callback . ,Rest::extent_callback)
                (Y-extent-callback . ,Rest::extent_callback)            
                (molecule-callback . ,Rest::brew_molecule)
+               (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) 
                (minimum-beam-collision-distance . 1.5)
                (meta . ,(grob-description  "Rest"
                        rhythmic-head-interface
+                       staff-symbol-referencer-interface
                        rest-interface))
        ))
        (RestCollision . (
 
        (Script . (
                (molecule-callback . ,Script::brew_molecule)
-               (X-offset-callbacks . (,Side_position::centered_on_parent))
+               (X-offset-callbacks . (,Side_position_interface::centered_on_parent))
                (after-line-breaking-callback . ,Script::after_line_breaking)
                (meta . ,(grob-description "Script" script-interface side-position-interface font-interface))
        ))
        (StaffSymbol . (
                (molecule-callback . ,Staff_symbol::brew_molecule)
                (staff-space . 1.0)
-               (line-count . 5 )
+               (line-count . 5)
+               (layer . 0)
                (meta . ,(grob-description "StaffSymbol" staff-symbol-interface ))
        ))
        (SostenutoPedal . (
                (molecule-callback . ,Text_item::brew_molecule)
-               (X-offset-callbacks . (,Side_position::aligned_on_self))
+               (X-offset-callbacks . (,Side_position_interface::aligned_on_self))
                (Y-offset-callbacks .
-                (,Side_position::aligned_side
-                 ,Side_position::centered_on_parent))
+                (,Side_position_interface::aligned_side
+                 ,Side_position_interface::centered_on_parent))
                (no-spacing-rods . #t)
                 (font-shape . italic)
                (self-alignment-X . 0)
                (no-spacing-rods . #t)
                (molecule-callback . ,Sustain_pedal::brew_molecule)
                (self-alignment-X . 0)
-               (X-offset-callbacks . (,Side_position::aligned_on_self))
+               (X-offset-callbacks . (,Side_position_interface::aligned_on_self))
                (Y-offset-callbacks .
-                                   (,Side_position::aligned_side
-                                    ,Side_position::centered_on_parent))
+                                   (,Side_position_interface::aligned_side
+                                    ,Side_position_interface::centered_on_parent))
 
                (meta . ,(grob-description "SustainPedal" sustain-pedal-interface side-position-interface font-interface))
        ))
                 (font-shape . italic)
                (no-spacing-rods . #t)
                (self-alignment-X . 0)
-               (X-offset-callbacks . (,Side_position::aligned_on_self))
+               (X-offset-callbacks . (,Side_position_interface::aligned_on_self))
                (Y-offset-callbacks .
-                (,Side_position::aligned_side
-                 ,Side_position::centered_on_parent))
+                (,Side_position_interface::aligned_side
+                 ,Side_position_interface::centered_on_parent))
                (meta . ,(grob-description "UnaChordaPedal" text-interface font-interface))
        ))
 
                (direction . 1)
                (padding . 1)
                 (font-style . volta)
-               (Y-offset-callbacks . (,Side_position::aligned_side))
+               (Y-offset-callbacks . (,Side_position_interface::aligned_side))
                (thickness . 1.6)  ;  stafflinethickness
                (height . 2.0) ; staffspace;
                (minimum-space . 5)