/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2010 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 2004--2011 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
scm_call_3 (proc,
performances (),
output_channel,
- scm_long2num (*first_performance_number));
+ scm_from_long (*first_performance_number));
*first_performance_number += scm_ilength (performances_);
}
if (scores_ == SCM_EOL)
return 0;
paper_->set_variable (ly_symbol2scm ("first-page-number"),
- scm_long2num (*first_page_number));
+ scm_from_long (*first_page_number));
paper_->set_variable (ly_symbol2scm ("is-last-bookpart"),
ly_bool2scm (is_last));
/* Generate all stencils to trigger font loads. */
scm_call_3 (proc,
performances (),
output,
- scm_long2num (*first_performance_number));
+ scm_from_long (*first_performance_number));
*first_performance_number += scm_ilength (performances_);
}
paper_->self_scm (),
page_properties,
scm_car (s));
- Prob *ps;
- SCM list;
- for (list = texts ; scm_is_pair (list) ; list = scm_cdr (list))
+ Prob *first = 0;
+ Prob *last = 0;
+ for (SCM list = texts; scm_is_pair (list); list = scm_cdr (list))
{
SCM t = scm_car (list);
// TODO: init props
- ps = make_paper_system (SCM_EOL);
+ Prob *ps = make_paper_system (SCM_EOL);
ps->set_property ("page-break-permission",
ly_symbol2scm ("allow"));
ps->set_property ("page-turn-permission",
ly_symbol2scm ("allow"));
ps->set_property ("last-markup-line", SCM_BOOL_F);
- ps->set_property ("first-markup-line",
- list == texts? SCM_BOOL_T : SCM_BOOL_F);
+ ps->set_property ("first-markup-line", SCM_BOOL_F);
paper_system_set_stencil (ps, *unsmob_stencil (t));
+
+ SCM footnotes = get_footnotes (unsmob_stencil (t)->expr ());
+ ps->set_property ("footnotes", footnotes);
ps->set_property ("is-title", SCM_BOOL_T);
- if (list != texts)
- /* For each markup other than the first, place it as closely as
- possible to the previous markup and don't allow stretching. */
- ps->set_property ("tight-spacing", SCM_BOOL_T);
-
+ if (list == texts)
+ first = ps;
+ else
+ {
+ // last line so far, in a multi-line paragraph
+ last = ps;
+ //Place closely to previous line, no stretching.
+ ps->set_property ("tight-spacing", SCM_BOOL_T);
+ }
system_specs = scm_cons (ps->self_scm (), system_specs);
ps->unprotect ();
// FIXME: figure out penalty.
//set_system_penalty (ps, scores_[i].header_);
}
- // We may want to place a check here, for whether the line is too short
- if (list == texts)
- {
- // if there is only one line in the paragraph,
- // do not try to avoid orphans
- ps->set_property ("last-markup-line", SCM_BOOL_F);
- ps->set_property ("first-markup-line", SCM_BOOL_F);
- }
- else
- {
- ps->set_property ("last-markup-line", SCM_BOOL_T);
+ /* Set properties to avoid widowed/orphaned lines.
+ Single-line markup_lists are excluded, but in future
+ we may want to add the case of a very short, single line. */
+ if (first && last)
+ {
+ last->set_property ("last-markup-line", SCM_BOOL_T);
+ first->set_property ("first-markup-line", SCM_BOOL_T);
}
}
else