else
{
ret.push_back (orig[i]);
- ret.back ().force_ = 0;
}
}
return ret;
// This means that we won't cache properly if page_num is negative or
// if calc_height returns a negative number. But that's likely to
// be rare, so it shouldn't affect performance.
- vector<Real>& cache = last ? last_page_height_cache_ : page_height_cache_;
+ vector<Real> &cache = last ? last_page_height_cache_ : page_height_cache_;
if (page_num >= 0 && (int) cache.size () > page_num && cache[page_num] >= 0)
return cache[page_num];
else
// Create the page and draw it.
SCM page = make_page (page_num, last);
- 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);
Prob *p = unsmob_prob (page);
p->set_property ("lines", paper_systems);
foot = Page_layout_problem::add_footnotes_to_footer (footnotes, foot, book_);
p->set_property ("foot-stencil", foot.smobbed_copy ());
- scm_apply_1 (page_stencil, page, SCM_EOL);
return page;
}
label_page_table = SCM_EOL;
// Build a list of (systems configuration . footnote-count) triples.
- // Note that we lay out
- // the staves and find the configurations before drawing anything. Some
+ // Note that we lay out the staves and find the configurations,
+ // but we do not draw anything in this function. It is important
+ // that all staves are laid out vertically before any are drawn; some
// grobs (like tuplet brackets) look at their neighbours while drawing
- // themselves. If this happens before the neighbouring staves have
+ // themselves. If this happens before the neighbouring staves have
// been laid out, bad side-effects could happen (in particular,
// Align_interface::align_to_ideal_distances might be called).
SCM systems_configs_fncounts = SCM_EOL;
systems = scm_list_tail (systems, line_count);
}
- // Now it's safe to make the pages.
+ // TODO: previously, the following loop caused the systems to be
+ // drawn. Now that we no longer draw anything in Page_breaking,
+ // it is safe to merge these two loops.
int page_num = first_page_number + lines_per_page.size () - 1;
for (SCM s = systems_configs_fncounts; scm_is_pair (s); s = scm_cdr (s))
{
return ret;
}
-/* The page-turn-page-breaker needs to have a line-breaker between any two
- columns with non-NULL page-turn-permission.
-
- The optimal-breaker needs to have a line-breaker between any two columns
- with page-break-permission = 'force.
-
- By using a grob predicate, we can accommodate both of these uses.
-*/
void
Page_breaking::create_system_list ()
{
system_specs_.push_back (System_spec ());
}
+/* The page-turn-page-breaker needs to have a line-breaker between any two
+ columns with non-NULL page-turn-permission.
+
+ The optimal-breaker needs to have a line-breaker between any two columns
+ with page-break-permission = 'force.
+
+ By using a grob predicate, we can accommodate both of these uses.
+*/
void
Page_breaking::find_chunks_and_breaks (Break_predicate is_break, Prob_break_predicate prob_is_break)
{
SCM penalty_sym;
if (is_last ())
- penalty_sym = ly_symbol2scm ("blank-last-page-force");
+ penalty_sym = ly_symbol2scm ("blank-last-page-penalty");
else if (ends_score ())
- penalty_sym = ly_symbol2scm ("blank-after-score-page-force");
+ penalty_sym = ly_symbol2scm ("blank-after-score-page-penalty");
else
- penalty_sym = ly_symbol2scm ("blank-page-force");
+ penalty_sym = ly_symbol2scm ("blank-page-penalty");
Break_position const &pos = breaks_[current_end_breakpoint_];
if (Paper_score *ps = system_specs_[pos.system_spec_index_].pscore_)
line_penalty += uncompressed_line_details_[i].break_penalty_;
}
- for (vsize i = 0; i < res.force_.size (); i++)
+ for (vsize i = ragged () ? res.force_.size () - 1 : 0;
+ i < res.force_.size () - ragged_last ();
+ i++)
{
Real f = res.force_[i];