From 13de3b850e7ba63c41f927d49bd60611fde6b024 Mon Sep 17 00:00:00 2001 From: Joe Neeman Date: Tue, 6 Jun 2006 12:24:02 +0000 Subject: [PATCH] * lily/simple-spacer.cc (get_line_configuration): add keep-inside-line rods (struct Column_desc): add constructor (struct Rod_desc): add constructor (get_line_forces): check for forced page breaks here too * lily/instrument-name-engraver.cc (acknowledge_axis_group): prevent support/elements cycles between InstrumentNames and AxisGroups --- ChangeLog | 11 ++++++++++ lily/instrument-name-engraver.cc | 1 - lily/simple-spacer.cc | 36 ++++++++++++++++++++++++++++---- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8682b2ceaa..9c9ec15857 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2006-06-06 Joe Neeman + + * lily/simple-spacer.cc (get_line_configuration): add + keep-inside-line rods + (struct Column_desc): add constructor + (struct Rod_desc): add constructor + (get_line_forces): check for forced page breaks here too + + * lily/instrument-name-engraver.cc (acknowledge_axis_group): prevent + support/elements cycles between InstrumentNames and AxisGroups + 2006-06-06 Han-Wen Nienhuys * stepmake/stepmake/topdocs-targets.make (make-txt-files): define diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index a2bf75a777..2f361f0fe5 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -73,7 +73,6 @@ Instrument_name_engraver::acknowledge_axis_group (Grob_info info) { Grob *staff = info.grob(); Pointer_group_interface::add_grob (text_spanner_, ly_symbol2scm ("elements"), staff); - Side_position_interface::add_support (text_spanner_, staff); } } diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 0c595f1d94..fe10a90a5b 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -289,7 +289,12 @@ struct Rod_desc return r_ < r.r_; } - Rod_desc () {} + Rod_desc () + { + r_ = 0; + dist_ = 0; + } + Rod_desc (vsize r, Real d) { r_ = r; @@ -305,7 +310,17 @@ struct Column_desc Real inverse_hooke_; Real end_ideal_; Real end_inverse_hooke_; + SCM break_permission_; Interval keep_inside_line_; + + Column_desc () + { + ideal_ = 0; + inverse_hooke_ = 0; + end_ideal_ = 0; + end_inverse_hooke_ = 0; + break_permission_ = SCM_EOL; + } }; static int compare_paper_column_rank (Grob *const &a, Grob *const &b); @@ -401,6 +416,7 @@ get_column_desc (vector const &cols, vsize col_index, bool line_starter) } if (!line_starter && to_boolean (col->get_property ("keep-inside-line"))) desc.keep_inside_line_ = col->extent (col, X_AXIS); + desc.break_permission_ = col->get_property ("line-break-permission"); return desc; } @@ -409,10 +425,12 @@ get_line_forces (vector const &icols, vector breaks, Real line_len, Real indent, bool ragged) { vector force; - force.resize (breaks.size () * breaks.size ()); + force.resize (breaks.size () * breaks.size (), infinity_f); vector cols; vsize b = 1; + SCM force_break = ly_symbol2scm ("force"); + cols.push_back (Column_desc ()); for (vsize i = 1; i < icols.size () - 1; i++) { @@ -457,6 +475,9 @@ get_line_forces (vector const &icols, vector breaks, } spacer.solve ((b == 0) ? line_len - indent : line_len, ragged); force[b * breaks.size () + c] = spacer.force (); + + if (cols[end].break_permission_ == force_break) + break; if (!spacer.fits ()) { force[b * breaks.size () + c] = infinity_f; @@ -497,8 +518,15 @@ get_line_configuration (vectorconst &columns, spacer.add_spring (cols[i].ideal_, cols[i].inverse_hooke_); } for (vsize i = 0; i < cols.size (); i++) - for (vsize r = 0; r < cols[i].rods_.size (); r++) - spacer.add_rod (i, cols[i].rods_[r].r_, cols[i].rods_[r].dist_); + { + for (vsize r = 0; r < cols[i].rods_.size (); r++) + spacer.add_rod (i, cols[i].rods_[r].r_, cols[i].rods_[r].dist_); + if (!cols[i].keep_inside_line_.is_empty ()) + { + spacer.add_rod (i, cols.size (), cols[i].keep_inside_line_[RIGHT]); + spacer.add_rod (0, i, cols[i].keep_inside_line_[LEFT]); + } + } spacer.solve (line_len, ragged); ret.force_ = spacer.force (); -- 2.39.5