/*
- paper-book.cc -- implement Paper_book
+ This file is part of LilyPond, the GNU music typesetter.
- source file of the GNU LilyPond music typesetter
+ Copyright (C) 2004--2010 Jan Nieuwenhuizen <janneke@gnu.org>
- (c) 2004--2009 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
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
#include "paper-book.hh"
paper_->self_scm (),
page_properties,
scm_car (s));
- for (SCM list = texts ; scm_is_pair (list) ; list = scm_cdr (list))
+ Prob *ps;
+ SCM list;
+ for (list = texts ; scm_is_pair (list) ; list = scm_cdr (list))
{
SCM t = scm_car (list);
// TODO: init props
- Prob *ps = make_paper_system (SCM_EOL);
+ 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);
paper_system_set_stencil (ps, *unsmob_stencil (t));
- ps->set_property ("is-title", SCM_BOOL_T);
- if (scm_is_pair (scm_cdr (list)))
- {
- /* If an other markup is following, set this markup
- * next padding and next space to 0, so that baseline-skip
- * only should be taken into account for lines vertical
- * spacing. */
- ps->set_property ("next-padding", scm_double2num (0.0));
- ps->set_property ("next-space", scm_double2num (0.0));
- }
+ 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);
+
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);
+ }
}
else
assert (0);