]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/constrained-breaking.cc
lilypond-book: Use 550.0 as textwidth when autodetection fails.
[lilypond.git] / lily / constrained-breaking.cc
index 7e5bfadd50e054421a7d42d500c072c2fefc3b94..ee8b28906c5f6d476e82b49cb3afeba92974b833 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2006--2011 Joe Neeman <joeneeman@gmail.com>
+  Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -202,8 +202,10 @@ Constrained_breaking::solve (vsize start, vsize end, vsize sys_count)
         }
     }
   /* if we get to here, just put everything on one line */
-  warning (_ ("cannot find line breaking that satisfies constraints"));
-  ret.push_back (space_line (0, end_brk));
+  if (sys_count > 0) {
+    warning (_ ("cannot find line breaking that satisfies constraints"));
+    ret.push_back (space_line (0, end_brk));
+  }
   return ret;
 }
 
@@ -291,9 +293,11 @@ Constrained_breaking::line_details (vsize start, vsize end, vsize sys_count)
     }
 
   /* if we get to here, just put everything on one line */
-  Line_details details;
-  fill_line_details (&details, 0, end_brk);
-  ret.push_back (details);
+  if (sys_count > 0) {
+    Line_details details;
+    fill_line_details (&details, 0, end_brk);
+    ret.push_back (details);
+  }
   return ret;
 }
 
@@ -436,10 +440,10 @@ Constrained_breaking::initialize ()
   breaks_ = pscore_->get_break_indices ();
   all_ = pscore_->root_system ()->used_columns ();
   lines_.resize (breaks_.size (), breaks_.size (), Line_details ());
-  vector<Simple_spacer> spacers =
-    pscore_->root_system ()->get_simple_spacers(other_lines.length (),
-                                                other_lines.length () - first_line.length (),
-                                                ragged_right_);
+  vector<Real> forces = get_line_forces (all_,
+                                         other_lines.length (),
+                                         other_lines.length () - first_line.length (),
+                                         ragged_right_);
   for (vsize i = 0; i + 1 < breaks_.size (); i++)
     {
       for (vsize j = i + 1; j < breaks_.size (); j++)
@@ -448,18 +452,9 @@ Constrained_breaking::initialize ()
           bool ragged = ragged_right_ || (last && ragged_last_);
           Line_details &line = lines_.at (j, i);
 
-          line.force_ = spacers[i * breaks_.size () + j].force_penalty (ragged_right_);
-          if (!spacers[i * breaks_.size () + j].fits ())
-            {
-              if (spacers[i * breaks_.size () + j].minimal_)
-                line.force_ = -200000;
-              else
-                line.force_ = infinity_f;
-            }
+          line.force_ = forces[i * breaks_.size () + j];
           if (ragged && last && !isinf (line.force_))
             line.force_ = (line.force_ < 0 && j > i + 1) ? infinity_f : 0;
-          if (!line.force_ && !spacers[i * breaks_.size () + j].line_len ())
-            line.force_ = infinity_f;
           if (isinf (line.force_))
             break;