]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/paper-book.cc
Restore some code that was removed in commit a7c3c0ab5
[lilypond.git] / lily / paper-book.cc
index 926f9f5a962afed18ba94dfdc394ace7df50d5bf..195e978f65a1581e84d1f4913e6d45c104ae76d2 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2006 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2004--2007 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "paper-book.hh"
 #include "grob.hh"
 #include "main.hh"
 #include "output-def.hh"
+#include "paper-column.hh"
 #include "paper-score.hh"
 #include "paper-system.hh"
 #include "text-interface.hh"
 #include "warn.hh"
+#include "program-option.hh"
 
 #include "ly-smobs.icc"
 
@@ -90,9 +92,9 @@ Paper_book::output (SCM output_channel)
 {
   if (scm_is_pair (performances_))
     {
-      SCM proc = ly_lily_module_constant ("paper-book-write-midis");
-
-      scm_call_2 (proc, self_scm (), output_channel);
+      SCM proc = ly_lily_module_constant ("write-performances-midis");
+      scm_call_2 (proc, performances (), output_channel);
     }
 
   if (scores_ == SCM_EOL)
@@ -105,7 +107,7 @@ Paper_book::output (SCM output_channel)
   if (ly_is_module (header_))
     scopes = scm_cons (header_, scopes);
 
-  string mod_nm = "scm framework-" + output_backend_global;
+  string mod_nm = "scm framework-" + get_output_backend_name ();
 
   SCM mod = scm_c_resolve_module (mod_nm.c_str ());
   if (make_print)
@@ -135,6 +137,13 @@ Paper_book::output (SCM output_channel)
 void
 Paper_book::classic_output (SCM output)
 {
+  if (scm_is_pair (performances_))
+    {
+      SCM proc = ly_lily_module_constant ("write-performances-midis");
+      scm_call_2 (proc, performances (), output);
+    }
+  
   /* Generate all stencils to trigger font loads.  */
   systems ();
 
@@ -145,7 +154,7 @@ Paper_book::classic_output (SCM output)
   if (ly_is_module (header_0_))
     scopes = scm_cons (header_0_, scopes);
 
-  string format = output_backend_global;
+  string format = get_output_backend_name ();
   string mod_nm = "scm framework-" + format;
 
   SCM mod = scm_c_resolve_module (mod_nm.c_str ());
@@ -219,7 +228,7 @@ Paper_book::score_title (SCM header)
 /* read the breakbefore property of a score block and set up the preceding
    system-spec to honour it. That is, SYM should be the system spec that
    immediately precedes the score (from which HEADER is taken)
-   in the get_system_specs() list */
+   in the get_system_specs () list */
 void
 set_system_penalty (SCM sys, SCM header)
 {
@@ -236,7 +245,11 @@ set_system_penalty (SCM sys, SCM header)
            {
              vector<Grob*> cols = ps->get_columns ();
              if (cols.size ())
-               cols.back ()->set_property ("page-break-permission", sym);
+               {
+                 Paper_column *col = dynamic_cast<Paper_column*> (cols.back ());
+                 col->set_property ("page-break-permission", sym);
+                 col->find_prebroken_piece (LEFT)->set_property ("page-break-permission", sym);
+               }
            }
          else if (Prob *pb = unsmob_prob (sys))
            pb->set_property ("page-break-permission", sym);
@@ -261,7 +274,7 @@ Paper_book::get_score_title (SCM header)
       Prob *ps = make_paper_system (props);
       paper_system_set_stencil (ps, title);
 
-      return ps->self_scm();
+      return ps->self_scm ();
     }
 
   return SCM_BOOL_F;
@@ -370,6 +383,7 @@ Paper_book::systems ()
   
   systems_ = scm_reverse (systems_);
 
+  /* backwards compatibility for the old page breaker */
   int i = 0;
   Prob *last = 0;
   for (SCM s = systems_; scm_is_pair (s); s = scm_cdr (s))
@@ -382,6 +396,16 @@ Paper_book::systems ()
          && !scm_is_number (ps->get_property ("penalty")))
        ps->set_property ("penalty", scm_from_int (10000));
       last = ps;
+
+      if (scm_is_pair (scm_cdr (s)))
+       {
+         SCM perm = ps->get_property ("page-break-permission");
+         Prob *next = unsmob_prob (scm_cadr (s));
+         if (perm == SCM_EOL)
+           next->set_property ("penalty", scm_from_int (10001));
+         else if (perm == ly_symbol2scm ("force"))
+           next->set_property ("penalty", scm_from_int (-10001));
+       }
     }
 
   return systems_;
@@ -395,7 +419,7 @@ Paper_book::pages ()
 
   pages_ = SCM_EOL;
   SCM proc = paper_->c_variable ("page-breaking-wrapper");
-  pages_ = scm_apply_0 (proc, scm_list_1(self_scm ()));
+  pages_ = scm_apply_0 (proc, scm_list_1 (self_scm ()));
 
   /* set systems_ from the pages */
   if (systems_ == SCM_BOOL_F)