]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/paper-book.cc
Changes.tely updated - 2.19.x up to June 2014
[lilypond.git] / lily / paper-book.cc
index fc61386328b2ee43e1f335a114fa6091f0d45dd0..9035d355a2adea0535b9e873887535f1b7871efd 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2004--2011 Jan Nieuwenhuizen <janneke@gnu.org>
+  Copyright (C) 2004--2014 Jan Nieuwenhuizen <janneke@gnu.org>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -120,13 +120,13 @@ Paper_book::add_performance (SCM s)
   performances_ = scm_cons (s, performances_);
 }
 
-int
+long
 Paper_book::output_aux (SCM output_channel,
                         bool is_last,
-                        int *first_page_number,
-                        int *first_performance_number)
+                        long *first_page_number,
+                        long *first_performance_number)
 {
-  int page_nb = 0;
+  long page_nb = 0;
   if (scm_is_pair (performances_))
     {
       SCM proc = ly_lily_module_constant ("write-performances-midis");
@@ -168,9 +168,9 @@ Paper_book::output_aux (SCM output_channel,
 void
 Paper_book::output (SCM output_channel)
 {
-  int first_page_number
+  long first_page_number
     = robust_scm2int (paper_->c_variable ("first-page-number"), 1);
-  int first_performance_number = 0;
+  long first_performance_number = 0;
 
   /* FIXME: We need a line-width for ps output (framework-ps.scm:92).
      If we don't have any, we take the paper-width unless we know
@@ -237,7 +237,7 @@ Paper_book::output (SCM output_channel)
 
 void
 Paper_book::classic_output_aux (SCM output,
-                                int *first_performance_number)
+                                long *first_performance_number)
 {
   if (scm_is_pair (performances_))
     {
@@ -256,7 +256,7 @@ Paper_book::classic_output_aux (SCM output,
 void
 Paper_book::classic_output (SCM output)
 {
-  int first_performance_number = 0;
+  long first_performance_number = 0;
   classic_output_aux (output, &first_performance_number);
 
   SCM scopes = SCM_EOL;
@@ -580,10 +580,11 @@ Paper_book::systems ()
   systems_ = SCM_EOL;
   if (scm_is_pair (bookparts_))
     {
+      SCM system_list = SCM_EOL;
       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 ()));
+          system_list = scm_cons (pbookpart->systems (), system_list);
+      systems_ = scm_append (scm_reverse_x (system_list, SCM_EOL));
     }
   else
     {
@@ -596,15 +597,14 @@ Paper_book::systems ()
               SCM system_list
                 = scm_vector_to_list (pscore->get_paper_systems ());
 
-              system_list = scm_reverse (system_list);
-              systems_ = scm_append (scm_list_2 (system_list, systems_));
+              systems_ = scm_reverse_x (system_list, systems_);
             }
           else
             {
               systems_ = scm_cons (scm_car (s), systems_);
             }
         }
-      systems_ = scm_reverse (systems_);
+      systems_ = scm_reverse_x (systems_, SCM_EOL);
 
       /* backwards compatibility for the old page breaker */
       int i = 0;
@@ -652,6 +652,15 @@ Paper_book::pages ()
     {
       SCM page_breaking = paper_->c_variable ("page-breaking");
       pages_ = scm_apply_0 (page_breaking, scm_list_1 (self_scm ()));
+
+      // Create all the page stencils.
+      SCM page_module = scm_c_resolve_module ("scm page");
+      SCM page_stencil = scm_c_module_lookup (page_module, "page-stencil");
+      page_stencil = scm_variable_ref (page_stencil);
+      for (SCM pages = pages_; scm_is_pair (pages); pages = scm_cdr (pages))
+        scm_apply_1 (page_stencil, scm_car (pages), SCM_EOL);
+
+      // Perform any user-supplied post-processing.
       SCM post_process = paper_->c_variable ("page-post-process");
       if (ly_is_procedure (post_process))
         scm_apply_2 (post_process, paper_->self_scm (), pages_, SCM_EOL);