/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2006--2012 Joe Neeman <joeneeman@gmail.com>
+ Copyright (C) 2006--2015 Joe Neeman <joeneeman@gmail.com>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
for (SCM s = systems; scm_is_pair (s); s = scm_cdr (s))
{
SCM paper_system = scm_car (s);
- if (Grob *g = unsmob_grob (scm_car (s)))
+ if (Grob *g = unsmob<Grob> (scm_car (s)))
{
System *sys = dynamic_cast<System *> (g);
paper_system = sys->get_paper_system ();
// Create the page and draw it.
SCM page = make_page (page_num, last);
- Prob *p = unsmob_prob (page);
+ Prob *p = unsmob<Prob> (page);
p->set_property ("lines", paper_systems);
p->set_property ("configuration", configuration);
- Stencil *foot_p = unsmob_stencil (p->get_property ("foot-stencil"));
+ Stencil *foot_p = unsmob<Stencil> (p->get_property ("foot-stencil"));
Stencil foot = foot_p ? *foot_p : Stencil ();
SCM footnotes = Page_layout_problem::get_footnotes_from_lines (systems);
SCM ret = SCM_EOL;
bool reset_footnotes_on_new_page = to_boolean (book_->top_paper ()->c_variable ("reset-footnotes-on-new-page"));
SCM label_page_table = book_->top_paper ()->c_variable ("label-page-table");
- if (label_page_table == SCM_UNDEFINED)
+ if (SCM_UNBNDP (label_page_table))
label_page_table = SCM_EOL;
// Build a list of (systems configuration . footnote-count) triples.
SCM lines = scm_caar (s);
SCM config = scm_cdar (s);
- bool bookpart_last_page = (s == systems_configs_fncounts);
+ bool bookpart_last_page = scm_is_eq (s, systems_configs_fncounts);
SCM page = draw_page (lines, config, page_num, bookpart_last_page);
/* collect labels */
SCM page_num_scm = scm_from_int (page_num);
for (SCM l = lines; scm_is_pair (l); l = scm_cdr (l))
{
SCM labels = SCM_EOL;
- if (Grob *line = unsmob_grob (scm_car (l)))
+ if (Grob *line = unsmob<Grob> (scm_car (l)))
{
System *system = dynamic_cast<System *> (line);
labels = system->get_property ("labels");
}
- else if (Prob *prob = unsmob_prob (scm_car (l)))
+ else if (Prob *prob = unsmob<Prob> (scm_car (l)))
labels = prob->get_property ("labels");
for (SCM lbls = labels; scm_is_pair (lbls); lbls = scm_cdr (lbls))
SCM specs = book_->get_system_specs ();
for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s))
{
- if (Paper_score *ps = dynamic_cast<Paper_score *> (unsmob_music_output (scm_car (s))))
+ if (Paper_score *ps = unsmob<Paper_score> (scm_car (s)))
{
system_specs_.push_back (System_spec (ps));
}
else
{
- Prob *pb = unsmob_prob (scm_car (s));
+ Prob *pb = unsmob<Prob> (scm_car (s));
assert (pb);
pb->protect ();
vector<vsize> line_breaker_columns;
line_breaker_columns.push_back (0);
- for (vsize j = 1; j < cols.size (); j++)
+ for (vsize j = 0; j < cols.size (); j++)
{
if (forced_line_break_cols.size ())
{
bool last = (j == cols.size () - 1);
bool break_point = is_break && is_break (cols[j]);
- bool chunk_end = cols[j]->get_property ("page-break-permission") == force_sym;
+ bool chunk_end = scm_is_eq (cols[j]->get_property ("page-break-permission"), force_sym);
Break_position cur_pos = Break_position (i,
line_breaker_columns.size (),
cols[j],
if ((!too_few_lines (line_count) && (next_height > cur_page_height && cur_rod_height > 0))
|| too_many_lines (next_line_count)
- || (prev && prev->page_permission_ == ly_symbol2scm ("force")))
+ || (prev && scm_is_eq (prev->page_permission_, ly_symbol2scm ("force"))))
{
line_count = cur.compressed_nontitle_lines_count_;
cur_rod_height = cur.full_height ();
system_count_on_this_page += cur_line.compressed_nontitle_lines_count_;
line++;
- if (cur_line.page_permission_ == ly_symbol2scm ("force"))
+ if (scm_is_eq (cur_line.page_permission_, ly_symbol2scm ("force")))
break;
}
if ((line > page_first_line)
&& (isinf (space.force_)
|| ((line > 0)
- && (cached_line_details_[line - 1].page_permission_ == ly_symbol2scm ("force")))))
+ && scm_is_eq (cached_line_details_[line - 1].page_permission_,
+ ly_symbol2scm ("force")))))
{
res.systems_per_page_.push_back (line - page_first_line);
res.force_.push_back (prev_force);
}
for (vsize i = ragged () ? res.force_.size () - 1 : 0;
- i < res.force_.size () - ragged_last ();
+ i < res.force_.size () - (is_last () && ragged_last ());
i++)
{
Real f = res.force_[i];
/* if there is a forced break, this reduces to 2 1-page problems */
cache_line_details (configuration);
for (vsize i = 0; i + 1 < cached_line_details_.size (); i++)
- if (cached_line_details_[i].page_permission_ == ly_symbol2scm ("force"))
+ if (scm_is_eq (cached_line_details_[i].page_permission_,
+ ly_symbol2scm ("force")))
{
vector<Line_details> lines1 (cached_line_details_.begin (), cached_line_details_.begin () + i + 1);
vector<Line_details> lines2 (cached_line_details_.begin () + i + 1, cached_line_details_.end ());