From 582186f60e5103f11a0cc54cc5dfb3319b9ea114 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sun, 18 Jun 2006 12:57:37 +0000 Subject: [PATCH] * lily/spacing-spanner.cc (musical_column_spacing): set compound_fixed_note_space to 0.0. Document why. * lily/simple-spacer.cc (is_sane): also have a kludge for numeric range of inverse_hooke_ (Simple_spacer): init completely. (fits): const (get_line_configuration): don't use cols.resize(); it introduces initialized data. * scm/framework-ps.scm (dump-page): add setstrokeadjust. Backportme. * ps/music-drawing-routines.ps: remove selectfont L1 hack. --- ChangeLog | 16 +++++++++++- THANKS | 1 + lily/gourlay-breaking.cc | 1 + lily/include/simple-spacer.hh | 6 ++--- lily/sequential-iterator.cc | 2 +- lily/simple-spacer.cc | 46 +++++++++++++++++++++------------- lily/spacing-spanner.cc | 15 ++++++++++- lily/tie-formatting-problem.cc | 1 - ps/music-drawing-routines.ps | 23 ----------------- scm/framework-ps.scm | 3 ++- 10 files changed, 66 insertions(+), 48 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4d1a0d9dfc..6322fde1b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,19 @@ 2006-06-18 Han-Wen Nienhuys + * lily/spacing-spanner.cc (musical_column_spacing): set + compound_fixed_note_space to 0.0. Document why. + + * lily/simple-spacer.cc (is_sane): also have a kludge for numeric + range of inverse_hooke_ + (Simple_spacer): init completely. + (fits): const + (get_line_configuration): don't use cols.resize(); it introduces + initialized data. + + * scm/framework-ps.scm (dump-page): add setstrokeadjust. Backportme. + + * ps/music-drawing-routines.ps: remove selectfont L1 hack. + * lily/beaming-pattern.cc (best_splitpoint_index): urg, 2nd try. Divide by beatlength. @@ -27,7 +41,7 @@ * lily/align-interface.cc (align_to_fixed_distance): remove hungarian suffix. - * lily/beaming-pattern.cc (count_factor_twos): oops. We want to + * lily/beaming-pattern.cc (count_factor_twos): oops. We want x%2==0. 2006-06-15 Han-Wen Nienhuys diff --git a/THANKS b/THANKS index 6ca6bc7963..84143c9024 100644 --- a/THANKS +++ b/THANKS @@ -65,6 +65,7 @@ Rick Hansen Ruud van Silfhout Sietse Brouwer Stephen Carter +Stephen Kress Thies Albrecht Trent Johnston Vaclav Smilauer diff --git a/lily/gourlay-breaking.cc b/lily/gourlay-breaking.cc index 8599a6a57c..8e4b357232 100644 --- a/lily/gourlay-breaking.cc +++ b/lily/gourlay-breaking.cc @@ -114,6 +114,7 @@ Gourlay_breaking::solve () Column_x_positions cp = get_line_configuration (line, line_dims[RIGHT] - line_dims[LEFT], line_dims[LEFT], ragged); + if (ragged && last_line) cp.force_ = 0.0; diff --git a/lily/include/simple-spacer.hh b/lily/include/simple-spacer.hh index 47e8080ced..39d9a3f853 100644 --- a/lily/include/simple-spacer.hh +++ b/lily/include/simple-spacer.hh @@ -45,11 +45,11 @@ public: void add_spring (Real, Real); Real range_ideal_len (int l, int r) const; Real range_stiffness (int l, int r) const; - Real configuration_length () const; + Real configuration_length (Real) const; vector spring_positions () const; - Real force (); - bool fits (); + Real force () const; + bool fits () const; DECLARE_SIMPLE_SMOBS (Simple_spacer,); diff --git a/lily/sequential-iterator.cc b/lily/sequential-iterator.cc index 86bacecf48..214d1c2e67 100644 --- a/lily/sequential-iterator.cc +++ b/lily/sequential-iterator.cc @@ -171,7 +171,7 @@ Sequential_iterator::next_element (bool) in that chunk should be in len.grace_part_ */ - last_mom_ = here_mom_;; + last_mom_ = here_mom_; here_mom_ += len; } diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index e027b5e26a..3532c03606 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -59,18 +59,20 @@ Simple_spacer::Simple_spacer () { - force_ = 0.; + line_len_ = 0.0; + force_ = 0.0; fits_ = true; + ragged_ = true; } Real -Simple_spacer::force () +Simple_spacer::force () const { return force_; } bool -Simple_spacer::fits () +Simple_spacer::fits () const { return fits_; } @@ -129,11 +131,11 @@ Simple_spacer::range_stiffness (int l, int r) const } Real -Simple_spacer::configuration_length () const +Simple_spacer::configuration_length (Real force) const { Real l = 0.; for (vsize i = 0; i < springs_.size (); i++) - l += springs_[i].length (force_); + l += springs_[i].length (force); return l; } @@ -141,14 +143,14 @@ Simple_spacer::configuration_length () const void Simple_spacer::solve (Real line_len, bool ragged) { - Real conf = configuration_length (); + Real conf = configuration_length (force_); ragged_ = ragged; line_len_ = line_len; if (ragged) { force_ = 0; - fits_ = configuration_length () <= line_len_; + fits_ = configuration_length (force_) <= line_len_; /* we need to calculate a force here to prevent a bunch of short lines */ if (fits_) force_ = expand_line (); @@ -163,7 +165,7 @@ Real Simple_spacer::expand_line () { double inv_hooke = 0; - double cur_len = configuration_length (); + double cur_len = configuration_length (force_); fits_ = true; for (vsize i=0; i < springs_.size (); i++) @@ -177,7 +179,7 @@ Real Simple_spacer::compress_line () { double inv_hooke = 0; - double cur_len = configuration_length (); + double cur_len = configuration_length (force_); double cur_force = force_; fits_ = true; @@ -197,8 +199,18 @@ Simple_spacer::compress_line () break; double block_dist = (cur_force - sp.block_force_) * inv_hooke; - if (cur_len - block_dist <= line_len_) - return cur_force + (line_len_ - cur_len) / inv_hooke; + if (cur_len - block_dist < line_len_) + { + cur_force += (line_len_ - cur_len) / inv_hooke; + cur_len = line_len_; + + /* + Paranoia check. + */ + assert (fabs (configuration_length (cur_force) - cur_len) < 1e-6); + return cur_force; + } + cur_len -= block_dist; inv_hooke -= sp.inverse_hooke_; cur_force = sp.block_force_; @@ -254,7 +266,9 @@ Spring_description::is_sane () const { return (inverse_hooke_ >= 0) && ideal_ > 0 - && !isinf (ideal_) && !isnan (ideal_); + && !isinf (ideal_) && !isnan (ideal_) + && (inverse_hooke_ == 0.0 || fabs (inverse_hooke_) > 1e-8) + ; } Real @@ -489,7 +503,7 @@ get_line_forces (vector const &icols, vector breaks, } Column_x_positions -get_line_configuration (vectorconst &columns, +get_line_configuration (vector const &columns, Real line_len, Real indent, bool ragged) @@ -508,13 +522,11 @@ get_line_configuration (vectorconst &columns, } ret.cols_.push_back (dynamic_cast (columns.back ())->find_prebroken_piece (LEFT)); - cols.resize (ret.cols_.size () - 1); - /* since we've already put our line-ending column in the column list, we can ignore the end_XXX_ fields of our column_description */ - for (vsize i = 0; i < cols.size (); i++) + for (vsize i = 0; i < ret.cols_.size () - 1; i++) { - cols[i] = get_column_description (ret.cols_, i, i == 0); + cols.push_back (get_column_description (ret.cols_, i, i == 0)); spacer.add_spring (cols[i].ideal_, cols[i].inverse_hooke_); } for (vsize i = 0; i < cols.size (); i++) diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index 5aca100961..9c48aaec0a 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -332,8 +332,21 @@ Spacing_spanner::musical_column_spacing (Grob *me, if (compound_note_space < 0 || wish_count == 0) { + /* + Fixed should be 0.0. If there are no spacing wishes, we're + likely dealing with polyphonic spacing of hemiolas. + + We used to have compound_fixed_note_space = options->increment_ + + but this can lead to numeric instability problems when we + do + + inverse_strength = (compound_note_space - compound_fixed_note_space) + + */ + compound_note_space = base_note_space; - compound_fixed_note_space = options->increment_; + compound_fixed_note_space = 0.0; } else if (to_boolean (me->get_property ("average-spacing-wishes"))) { diff --git a/lily/tie-formatting-problem.cc b/lily/tie-formatting-problem.cc index 1d42902a4f..dada24694c 100644 --- a/lily/tie-formatting-problem.cc +++ b/lily/tie-formatting-problem.cc @@ -885,7 +885,6 @@ Tie_formatting_problem::find_best_variation (Ties_configuration const &base, Ties_configuration Tie_formatting_problem::generate_optimal_chord_configuration () { - Ties_configuration base = generate_base_chord_configuration (); vector vars = generate_collision_variations (base); diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps index e0f28e82a6..8864569af1 100644 --- a/ps/music-drawing-routines.ps +++ b/ps/music-drawing-routines.ps @@ -7,29 +7,6 @@ % TODO: use dicts or prefixes to prevent namespace pollution. -% Emulation code from Postscript Language Reference. - -/*SF -{ - exch findfont exch - dup type /arraytype eq - {makefont} - {scalefont} - ifelse - setfont -} bind def - -/languagelevel where - {pop languagelevel} - {1} -ifelse - -2 lt - { /selectfont /*SF load def } -if - -% end emulation code - /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm index ea450708de..a32979b529 100644 --- a/scm/framework-ps.scm +++ b/scm/framework-ps.scm @@ -115,7 +115,8 @@ "page-width output-scale lily-output-units mul mul 0 translate 90 rotate\n" "") "%%EndPageSetup\n" - + + "true setstrokeadjust\n" "gsave 0 paper-height translate " "set-ps-scale-to-lily-scale " "\n")) -- 2.39.2