From db46a35cd309f9abee86af6e5518c1367621c6bd Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 11 Jul 2002 10:48:44 +0000 Subject: [PATCH] * lily/spacing-spanner.cc (set_springs): add support for common-shortest-duration field. * lily/parser.yy (translator_spec_body): allow \set in \translator {} block. This is the same as \override, here. * lily/score-engraver.cc (one_time_step): don't warn about columns when skipTypesetting == #t. * lily/spacing-spanner.cc (musical_column_spacing): change ragged right function to produce natural spacing. --- ChangeLog | 14 +++++++++++++ lily/parser.yy | 4 ++++ lily/score-engraver.cc | 21 +++++++++++++------ lily/simple-spacer.cc | 3 +++ lily/spacing-spanner.cc | 34 +++++++++++++++++++++++++++---- mutopia/J.S.Bach/GNUmakefile | 2 +- scm/grob-property-description.scm | 3 +++ 7 files changed, 70 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index b78faea424..8e86b94f0d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2002-07-11 Han-Wen Nienhuys + + * lily/spacing-spanner.cc (set_springs): add support for + common-shortest-duration field. + + * lily/parser.yy (translator_spec_body): allow \set in \translator + {} block. This is the same as \override, here. + + * lily/score-engraver.cc (one_time_step): don't warn about columns + when skipTypesetting == #t. + + * lily/spacing-spanner.cc (musical_column_spacing): change + ragged right function to produce natural spacing. + 2002-07-10 Han-Wen Nienhuys * lily/paper-column.cc (before_line_breaking): update diff --git a/lily/parser.yy b/lily/parser.yy index 3019fe3982..d29412b1af 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -510,6 +510,10 @@ translator_spec_body: unsmob_translator_def ($$) ->add_push_property (scm_string_to_symbol ($2), $4, $6); } + | translator_spec_body STRING SET embedded_scm '=' embedded_scm { + unsmob_translator_def ($$) + ->add_push_property (scm_string_to_symbol ($2), $4, $6); + } | translator_spec_body STRING REVERT embedded_scm { unsmob_translator_def ($$)->add_pop_property ( scm_string_to_symbol ($2), $4); diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index d6b1747daa..efa97d2c9a 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -66,11 +66,15 @@ Score_engraver::prepare (Moment w) { Global_translator::prepare (w); + /* + TODO: don't make columns when skipTypesetting is true. + */ make_columns (); - + command_column_l_->set_grob_property ("when", now_mom_.smobbed_copy ()); musical_column_l_->set_grob_property ("when", now_mom_.smobbed_copy ()); + Translator_group::start_translation_timestep(); } @@ -140,10 +144,14 @@ Score_engraver::one_time_step () for (int i = announce_info_arr_.size(); i--;) { Grob *g = announce_info_arr_[i].grob_l_; - String msg= "Grob " - + g->name() - + " was created too late!"; - g->programming_error (msg); + if (!dynamic_cast (g)) // ugh. + { + + String msg= "Grob " + + g->name() + + " was created too late!"; + g->programming_error (msg); + } } announce_info_arr_.clear (); } @@ -301,7 +309,8 @@ Score_engraver::forbid_breaks () /* result is junked. */ - command_column_l_->remove_grob_property ("breakable"); + if (command_column_l_) + command_column_l_->remove_grob_property ("breakable"); } void diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 64caa59692..97d0c2f14d 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -365,6 +365,9 @@ Simple_spacer::solve (Column_x_positions *positions, bool ragged) const positions->satisfies_constraints_b_ = positions->satisfies_constraints_b_ && break_satisfy; + + if (ragged && force_f_ < 0) + positions->satisfies_constraints_b_ = false; } /****************************************************************/ diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index bd3d87e038..483f9715d2 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -366,7 +366,15 @@ Spacing_spanner::set_springs (SCM smob) set_explicit_neighbor_columns (all); - Rational global_shortest = find_shortest (me, all); + SCM preset_shortest = me->get_grob_property ("common-shortest-duration"); + Rational global_shortest; + if (unsmob_moment (preset_shortest)) + { + global_shortest = unsmob_moment (preset_shortest)->main_part_; + } + else + global_shortest = find_shortest (me, all); + prune_loose_colunms (me, &all, global_shortest); set_implicit_neighbor_columns (all); @@ -590,9 +598,25 @@ Spacing_spanner::musical_column_spacing (Grob *me, Item * lc, Item *rc, Real inc Maybe it should be continuous? */ max_fixed_note_space = max_fixed_note_space