-struct Slur_score
-{
- Drul_array<Offset> attachment_;
- Real score_;
- Bezier curve_;
-
-#if DEBUG_SLUR_QUANTING
- String score_card_;
-#endif
-
- Slur_score()
- {
- score_ = 0.0;
- }
-};
-
-struct Slur_score_parameters
-{
- int region_size_;
- Real head_encompass_penalty_;
- Real stem_encompass_penalty_;
- Real closeness_factor_;
- Real edge_attraction_factor_;
- Real same_slope_penalty_;
- Real steeper_slope_factor_;
- Real non_horizontal_penalty_;
- Real max_slope_;
- Real max_slope_factor_;
- Real extra_object_collision_;
- Real accidental_collision_;
- Real free_slur_distance_;
- Real free_head_distance_;
- Real extra_encompass_free_distance_;
-
- Real head_slur_distance_max_ratio_;
- Real head_slur_distance_factor_;
-
-
-
- Slur_score_parameters (Grob*);
-};
-
-
-struct Encompass_info
-{
- Real x_;
- Real stem_;
- Real head_;
- Encompass_info ()
- {
- x_ = 0.0;
- stem_ = 0.0;
- head_ = 0.0;
- }
- Real get_point (Direction dir)
- {
- Interval y;
- y.add_point (stem_);
- y.add_point (head_);
- return y[dir];
- }
-};
-
-struct Bound_info
-{
- Box stem_extent_;
- Direction stem_dir_;
- Item *bound_;
- Grob *note_column_;
- Grob *slur_head_;
- Grob *staff_;
- Grob *stem_;
- Interval slur_head_extent_;
- Real neighbor_y_;
- Real staff_space_;
-
- Bound_info ()
- {
- stem_ = 0;
- neighbor_y_ = 0;
- staff_ = 0;
- slur_head_ = 0;
- stem_dir_ = CENTER;
- note_column_ = 0;
- }
-};
-
-/*
- TODO: create one object for passing all parameters.
- */
-
-
-static void
-score_extra_encompass (Grob *me, Grob *common[],
- Slur_score_parameters *score_param,
- Drul_array<Bound_info> ,
- Drul_array<Offset> ,
- Array<Slur_score> * scores);
-static void score_slopes (Grob *me, Grob *common[],
- Slur_score_parameters *score_param,
- Drul_array<Bound_info>,
- Drul_array<Offset> base_attach,
- Array<Slur_score> *scores);
-
-static void score_edges (Grob *me, Grob *common[],
- Slur_score_parameters *score_param,
- Drul_array<Bound_info> extremes,
- Drul_array<Offset> base_attach,
- Array<Slur_score> *scores);
-static void score_encompass (Grob *me, Grob *common[],
- Slur_score_parameters*,
- Drul_array<Bound_info>,
- Drul_array<Offset>, Array<Slur_score> *scores);
-static Bezier avoid_staff_line (Grob *me, Grob **common,
- Drul_array<Bound_info> extremes,
- Bezier bez);
-
-static Encompass_info get_encompass_info (Grob *me,
- Grob *col,
- Grob **common);
-static Bezier get_bezier (Grob *me,
- Grob **common,
- Slur_score_parameters*,
- Drul_array<Bound_info> extremes,
- Drul_array<Offset> attachments,
- Real r_0, Real h_inf);
-static Direction get_default_dir (Grob *me);
-
-static void set_end_points (Grob *);
-static Real broken_trend_y (Grob *me, Grob **, Direction dir);
-static Drul_array<Bound_info> get_bound_info (Spanner *me, Grob **common);
-
-static void generate_curves (Grob *me,
- Grob *common[],Slur_score_parameters*,
- Drul_array<Bound_info> extremes,
- Drul_array<Offset> base_attach,
- Array<Slur_score> *scores);
-static Array<Slur_score> enumerate_attachments
-(Grob *me, Grob *common[], Slur_score_parameters*,
- Drul_array<Bound_info> extremes,
- Drul_array<Offset> base_attachment, Drul_array<Real> end_ys);
-static Drul_array<Offset> get_base_attachments
-(Spanner *sp, Grob **common, Drul_array<Bound_info> extremes);
-static Drul_array<Real> get_y_attachment_range
-(Spanner *sp, Grob **common,
- Slur_score_parameters*,
- Drul_array<Bound_info> extremes,
- Drul_array<Offset> base_attachment);
-
-
-Real
-get_detail (SCM alist, SCM sym)
-{
- SCM entry = scm_assq (sym, alist);
- return robust_scm2double (ly_c_pair_p (entry)
- ? ly_cdr (entry)
- : SCM_EOL,
- 0.0);
-}
-
-void
-init_score_param (Grob *me,
- Slur_score_parameters *score_param)