From 3b3d3fbc987c37f9f639c1e8720d07653894d318 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 8 Nov 2004 22:39:10 +0000 Subject: [PATCH] * lily/slur.cc: add 'positions to interface * lily/main.cc: reinstate PS as standard output format. * scm/framework-tex.scm (output-preview-framework): print systems up to first non title system. --- ChangeLog | 7 +++++ input/regression/slur-manual.ly | 16 ++++++++++ lily/include/slur-scoring.hh | 2 ++ lily/main.cc | 2 +- lily/slur-scoring.cc | 53 ++++++++++++++++++++++----------- lily/slur.cc | 2 +- scm/framework-tex.scm | 10 ++----- 7 files changed, 65 insertions(+), 27 deletions(-) create mode 100644 input/regression/slur-manual.ly diff --git a/ChangeLog b/ChangeLog index 452f8d5f0b..6c27b4f10d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2004-11-08 Han-Wen Nienhuys + * lily/slur.cc: add 'positions to interface + + * lily/main.cc: reinstate PS as standard output format. + + * scm/framework-tex.scm (output-preview-framework): print systems + up to first non title system. + * lily/grace-engraver.cc (start_translation_timestep): split scm_cadddr diff --git a/input/regression/slur-manual.ly b/input/regression/slur-manual.ly new file mode 100644 index 0000000000..cd3acfe840 --- /dev/null +++ b/input/regression/slur-manual.ly @@ -0,0 +1,16 @@ + +\header { + + texidoc = "Setting @code{positions} overrides the automatic +positioning of the slur. It selects the slur configuration closest to +the given pair. " + + } +\version "2.5.0" + +\paper { raggedright = ##T } +\relative { + \override Slur #'positions = #'(-4 . -5) + e( f g) +} + diff --git a/lily/include/slur-scoring.hh b/lily/include/slur-scoring.hh index 196387abd9..3d9049b217 100644 --- a/lily/include/slur-scoring.hh +++ b/lily/include/slur-scoring.hh @@ -13,6 +13,7 @@ #include "box.hh" #include "lily-proto.hh" #include "parray.hh" +#include "lily-guile.hh" struct Slur_score_parameters { @@ -144,6 +145,7 @@ struct Slur_score_state Encompass_info get_encompass_info (Grob *col) const; Array get_extra_encompass_infos () const; Real move_away_from_staffline (Real y, Grob *on_staff) const; + int get_closest_index (SCM inspect_quants) const; }; diff --git a/lily/main.cc b/lily/main.cc index 30f2c6c13b..25e7e68e9b 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -47,7 +47,7 @@ bool no_layout_global_b = false; /* Selected output format. One of tex, ps, scm, as. */ -String output_format_global = "tex"; +String output_format_global = "ps"; /* Current output name. */ String output_name_global; diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc index 48799e2e0f..6e9f05dff2 100644 --- a/lily/slur-scoring.cc +++ b/lily/slur-scoring.cc @@ -368,8 +368,18 @@ set_slur_control_points (Grob *me) return; state.generate_curves (); - Bezier best (state.get_best_curve()); + SCM end_ys = me->get_property ("positions"); + Bezier best; + + if (is_number_pair (end_ys)) + { + best = state.configurations_[state.get_closest_index (end_ys)]->curve_; + } + else + { + best = state.get_best_curve(); + } SCM controls = SCM_EOL; for (int i = 4; i--;) @@ -407,35 +417,42 @@ Slur_score_state::get_best_curve () if (to_boolean (slur_->get_layout () ->lookup_variable (ly_symbol2scm ("debug-slur-scoring"))) && scm_is_pair (inspect_quants)) - { - Drul_array ins = ly_scm2interval (inspect_quants); - Real mindist = 1e6; - for (int i = 0; i < configurations_.size (); i ++) - { - Real d =fabs (configurations_[i]->attachment_[LEFT][Y_AXIS] - ins[LEFT]) - + fabs (configurations_[i]->attachment_[RIGHT][Y_AXIS] - ins[RIGHT]); - if (d < mindist) - { - opt_idx = i; - mindist= d; - } - } - if (mindist > 1e5) - programming_error ("Could not find quant."); - } + opt_idx = get_closest_index (inspect_quants); configurations_[opt_idx]->score_card_ += to_string ("=%.2f", opt); configurations_[opt_idx]->score_card_ += to_string ("i%d", opt_idx); // debug quanting slur_->set_property ("quant-score", - scm_makfrom0str (configurations_[opt_idx]->score_card_.to_str0 ())); + scm_makfrom0str (configurations_[opt_idx]->score_card_.to_str0 ())); #endif return configurations_[opt_idx]->curve_; } +int +Slur_score_state::get_closest_index (SCM inspect_quants) const +{ + Drul_array ins = ly_scm2interval (inspect_quants); + + int opt_idx = -1; + Real mindist = 1e6; + for (int i = 0; i < configurations_.size (); i ++) + { + Real d =fabs (configurations_[i]->attachment_[LEFT][Y_AXIS] - ins[LEFT]) + + fabs (configurations_[i]->attachment_[RIGHT][Y_AXIS] - ins[RIGHT]); + if (d < mindist) + { + opt_idx = i; + mindist= d; + } + } + if (mindist > 1e5) + programming_error ("Could not find quant."); + return opt_idx; +} + /* TODO: should analyse encompasses to determine sensible region, and should limit slopes available. diff --git a/lily/slur.cc b/lily/slur.cc index cde2669578..fcf02f39ce 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -241,6 +241,6 @@ Slur::after_line_breaking (SCM smob) ADD_INTERFACE (Slur, "slur-interface", "A slur", - "quant-score excentricity encompass-objects control-points dashed slur-details direction height-limit note-columns ratio thickness"); + "positions quant-score excentricity encompass-objects control-points dashed slur-details direction height-limit note-columns ratio thickness"); diff --git a/scm/framework-tex.scm b/scm/framework-tex.scm index e48209d3b2..ade6b10099 100644 --- a/scm/framework-tex.scm +++ b/scm/framework-tex.scm @@ -279,16 +279,10 @@ (ly:get-option 'resolution)) (string-append (basename name ".tex") ".ps")))) - -;; -;; ugh - double check this. We are leaking -;; untrusted (user-settable) info to a command-line -;; - - (define-public (convert-to-ps book name) (let* ((paper (ly:paper-book-paper book)) (preview? (string-contains name ".preview")) + (papersizename (ly:output-def-lookup paper 'papersizename)) (landscape? (eq? #t (ly:output-def-lookup paper 'landscape))) (base (basename name ".tex")) @@ -297,6 +291,8 @@ " -E " (string-append " -t " + + ;; careful: papersizename is user-set. (sanitize-command-option papersizename))) (if landscape? -- 2.39.5