X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-book.cc;h=9035d355a2adea0535b9e873887535f1b7871efd;hb=9e781b7dc83b60a543ce218aa1a5f139f74c760f;hp=fc61386328b2ee43e1f335a114fa6091f0d45dd0;hpb=4a401ca1c60f428daa242dbdd102fdb3f327ebfb;p=lilypond.git diff --git a/lily/paper-book.cc b/lily/paper-book.cc index fc61386328..9035d355a2 100644 --- a/lily/paper-book.cc +++ b/lily/paper-book.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2011 Jan Nieuwenhuizen + Copyright (C) 2004--2014 Jan Nieuwenhuizen 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);