]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/paper-book.cc
Merge branch 'master' of ssh://jomand@git.sv.gnu.org/srv/git/lilypond into lilypond...
[lilypond.git] / lily / paper-book.cc
index 0887f9312eb78512548c971ccc8d07cf4f696072..4307bb03eaa66880ac2fd9df18817978d43cc9ad 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2007 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 2004--2009 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "paper-book.hh"
@@ -108,12 +108,13 @@ Paper_book::add_performance (SCM s)
   performances_ = scm_cons (s, performances_);
 }
 
-void
+int
 Paper_book::output_aux (SCM output_channel,
                        bool is_last,
                        int *first_page_number,
                        int *first_performance_number)
 {
+  int page_nb = 0;
   if (scm_is_pair (performances_))
     {
       SCM proc = ly_lily_module_constant ("write-performances-midis");
@@ -127,27 +128,29 @@ Paper_book::output_aux (SCM output_channel,
 
   if (scm_is_pair (bookparts_))
     {
-      for (SCM p = scm_reverse (bookparts_); scm_is_pair (p); p = scm_cdr (p))
+      for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p))
        if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p)))
          {
            bool is_last_part = (is_last && !scm_is_pair (scm_cdr (p)));
-           pbookpart->output_aux (output_channel,
-                                  is_last_part,
-                                  first_page_number,
-                                  first_performance_number);
+           page_nb += pbookpart->output_aux (output_channel,
+                                             is_last_part,
+                                             first_page_number,
+                                             first_performance_number);
          }
     }
   else
     {
       if (scores_ == SCM_EOL)
-       return;
+       return 0;
       paper_->set_variable (ly_symbol2scm ("first-page-number"),
                            scm_long2num (*first_page_number));
-      paper_->set_variable (ly_symbol2scm ("part-is-last"),
+      paper_->set_variable (ly_symbol2scm ("is-last-bookpart"),
                            ly_bool2scm (is_last));
       /* Generate all stencils to trigger font loads.  */
-      *first_page_number += scm_ilength (pages ());
+      page_nb = scm_ilength (pages ());
+      *first_page_number += page_nb;
     }
+  return page_nb;
 }
 
 void
@@ -155,11 +158,12 @@ Paper_book::output (SCM output_channel)
 {
   int first_page_number = robust_scm2int (paper_->c_variable ("first-page-number"), 1);
   int first_performance_number = 0;
-  output_aux (output_channel,
-             true,
-             &first_page_number,
-             &first_performance_number);
-
+  if (!output_aux (output_channel,
+                  true,
+                  &first_page_number,
+                  &first_performance_number))
+    return;
+      
   SCM scopes = SCM_EOL;
   if (ly_is_module (header_))
     scopes = scm_cons (header_, scopes);
@@ -517,7 +521,7 @@ Paper_book::systems ()
   systems_ = SCM_EOL;
   if (scm_is_pair (bookparts_))
     {
-      for (SCM p = scm_reverse (bookparts_); scm_is_pair (p); p = scm_cdr (p))
+      for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p))
        if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p)))
          systems_ = scm_append_x (scm_list_2 (systems_, pbookpart->systems ()));
     }
@@ -577,11 +581,11 @@ Paper_book::pages ()
   pages_ = SCM_EOL;
   if (scm_is_pair (bookparts_))
     {
-      for (SCM p = scm_reverse (bookparts_); scm_is_pair (p); p = scm_cdr (p))
+      for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p))
        if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p)))
          pages_ = scm_append_x (scm_list_2 (pages_, pbookpart->pages ()));
     }
-  else
+  else if (scm_is_pair (scores_))
     {
       SCM proc = paper_->c_variable ("page-breaking-wrapper");
       pages_ = scm_apply_0 (proc, scm_list_1 (self_scm ()));