From: Joe Neeman Date: Thu, 1 Feb 2007 20:55:48 +0000 (+0200) Subject: more robustness for {break,turn,page}-permission X-Git-Tag: release/2.11.16-1^2~5 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=8473fd293d7f2031e3c285ba731b52bb24e0a175;p=lilypond.git more robustness for {break,turn,page}-permission --- diff --git a/lily/constrained-breaking.cc b/lily/constrained-breaking.cc index 714f8ce6ee..c688be6a1b 100644 --- a/lily/constrained-breaking.cc +++ b/lily/constrained-breaking.cc @@ -301,6 +301,17 @@ Constrained_breaking::Constrained_breaking (Paper_score *ps, vector const initialize (); } +static SCM +min_permission (SCM perm1, SCM perm2) +{ + if (perm1 == ly_symbol2scm ("force")) + return perm2; + if (perm1 == ly_symbol2scm ("allow") + && perm2 != ly_symbol2scm ("force")) + return perm2; + return SCM_EOL; +} + /* find the forces for all possible lines and cache ragged_ and ragged_right_ */ void Constrained_breaking::initialize () @@ -354,6 +365,13 @@ Constrained_breaking::initialize () line.break_permission_ = c->get_property ("line-break-permission"); line.page_permission_ = c->get_property ("page-break-permission"); line.turn_permission_ = c->get_property ("page-turn-permission"); + + /* turn permission should always be stricter than page permission + and page permission should always be stricter than line permission */ + line.page_permission_ = min_permission (line.break_permission_, + line.page_permission_); + line.turn_permission_ = min_permission (line.page_permission_, + line.turn_permission_); max_ext = max (max_ext, extent.length ()); line.extent_ = extent;