]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/axis-group-spanner.cc
release: 0.1.11
[lilypond.git] / lily / axis-group-spanner.cc
index 1d45de3ae0e3bd003c7ff457ec5daf88ab859bcd..033a55b33a25be97a84e0af417556f87249d7bc6 100644 (file)
@@ -21,97 +21,95 @@ Axis_group_spanner::do_break_processing_if_unbroken()
   Line_of_score *my_line = line_l();
   for (int i=0; i < elems.size(); i++) 
     {
-       if (!elems[i]->line_l()) 
-         {
-           Item * item_l = elems[i]->item();
-           if  (item_l
-                && item_l->breakable_b_ 
-                && item_l->break_status_i() == 0) 
-                  {
-               // last two checks are paranoia
-               Item * broken_item_l = 
-                   item_l->find_prebroken_piece (my_line);
-               add_element (broken_item_l);
-             }
-           remove_element (elems[i]);  
-         }
+      if (!elems[i]->line_l()) 
+       {
+         Item * item_l = elems[i]->item();
+         if  (item_l
+              && item_l->breakable_b_ 
+              && item_l->break_status_i() == 0) 
+           {
+             // last two checks are paranoia
+             Item * broken_item_l = 
+               item_l->find_prebroken_piece (my_line);
+             add_element (broken_item_l);
+           }
+         remove_element (elems[i]);  
+       }
     }
-  
 }
 void
 Axis_group_spanner::do_break_processing()
 {
-  set_my_columns();
   bool breaking_self_b = ! Spanner::line_l();
   if (!breaking_self_b)  
     {
-       do_break_processing_if_unbroken();
-       Spanner::do_break_processing();
-       return;
+      do_break_processing_if_unbroken();
+      Spanner::do_break_processing();
+      return;
     }
 
-  break_into_pieces (true);
+  break_into_pieces ();
   Link_array<Score_elem> loose_elems = axis_admin_.elem_l_arr_;
   remove_all();
   
   for (int i=0; i < loose_elems.size(); i++) 
     {
-       Score_elem * elt = loose_elems[i];
-       Line_of_score *elt_line = elt->line_l();
+      Score_elem * elt = loose_elems[i];
+      Line_of_score *elt_line = elt->line_l();
        
-       if ( ! elt_line)
-         {
-           /* this piece doesn't know where it belongs.
-              Find out if it was broken, and use the broken remains
-              */
-           if (elt->spanner()) 
-             {
-               Spanner * sp = elt->spanner();
+      if (! elt_line)
+       {
+         /* this piece doesn't know where it belongs.
+            Find out if it was broken, and use the broken remains
+            */
+         if (elt->spanner()) 
+           {
+             Spanner * sp = elt->spanner();
                
-               for (int j =0; j < broken_into_l_arr_.size(); j++) 
-                 {
-                   Axis_group_spanner * my_broken_l
-                        = (Axis_group_spanner*)broken_into_l_arr_[j];
+             for (int j =0; j < broken_into_l_arr_.size(); j++) 
+               {
+                 Axis_group_spanner * my_broken_l
+                   = (Axis_group_spanner*)broken_into_l_arr_[j];
                    
-                   Spanner * broken_span_l 
-                       = sp->find_broken_piece (
-                           ((Score_elem*)my_broken_l)->line_l());
+                 Spanner * broken_span_l 
+                   = sp->find_broken_piece (
+                                            ((Score_elem*)my_broken_l)->line_l());
                    
-                   if (broken_span_l) 
-                       my_broken_l->add_element (broken_span_l);
-                   
-                 }
-             }
-           else if (elt->item() 
-                      && elt->item()->breakable_b_ 
-                      && elt->item()->break_status_i () == 0) 
-                        {
-
-               // broken items
-               for (int j =0; j < 2; j++) 
-                 {
-                   Item * my_item = elt->item()->broken_to_a_[j];
-                   Line_of_score * item_line_l = my_item->line_l() ;
-                   if ( ! item_line_l) 
-                       continue;
+                 if (broken_span_l) 
+                   my_broken_l->add_element (broken_span_l);
                    
-                   Axis_group_spanner * v
-                       = (Axis_group_spanner*)find_broken_piece (item_line_l);
-                   if (v)
-                       v->add_element (my_item);
-                 }
+               }
+           }
+         else if (elt->item() 
+                  && elt->item()->breakable_b_ 
+                  && elt->item()->break_status_i () == 0) 
+           {
+             // broken items
+             Direction  j=LEFT;
+             do 
+               {
+                 Item * my_item = elt->item()->broken_to_drul_[j];
+                 Line_of_score * item_line_l = my_item->line_l() ;
+                 if (! item_line_l) 
+                   continue;
                    
-             }
-         }
-       else 
-         {
+                 Axis_group_spanner * v
+                   = (Axis_group_spanner*)find_broken_piece (item_line_l);
+                 if (v)
+                   v->add_element (my_item);
+               }
+             while ((j*=-1) != LEFT);
+           }
+       }
+      else 
+       {
          /* this piece *does* know where it belongs.
             Put it in appropriate piece of this spanner
             */
-           Axis_group_spanner * my_broken_l
-               = (Axis_group_spanner*)find_broken_piece (elt->line_l());
-           my_broken_l->add_element (elt);
-         }
+         Axis_group_spanner * my_broken_l
+           = (Axis_group_spanner*)find_broken_piece (elt->line_l());
+         my_broken_l->add_element (elt);
+       }
     }
   
   Spanner::do_break_processing();