source file of the GNU LilyPond music typesetter
- (c) 2004--2008 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 2004--2009 Jan Nieuwenhuizen <janneke@gnu.org>
*/
#include "paper-book.hh"
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");
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 ("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
{
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);
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 ()));
}
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 ()));