#include <math.h>
#include <cstdio>
+
using namespace std;
+#include "spacing-options.hh"
#include "international.hh"
#include "main.hh"
#include "moment.hh"
{
vector<Grob*> all (get_root_system (me)->columns ());
vsize start = binary_search (all, (Grob*)me->get_bound (LEFT),
- &Paper_column::compare);
+ &Paper_column::less_than);
vsize end = binary_search (all, (Grob*) me->get_bound (RIGHT),
- &Paper_column::compare);
+ &Paper_column::less_than);
all = vector<Grob*>::vector<Grob*> (all.begin () + start,
all.begin () + end + 1);
Spacing_options options;
options.init_from_grob (me);
- options.global_shortest_ = robust_scm2moment (me->get_property ("common-shortest-duration"),
- Moment (Rational (1,8))).main_part_;
prune_loose_columns (me, &all, &options);
set_implicit_neighbor_columns (all);
if (!lext.is_empty ())
compound_note_space += -lext[LEFT];
}
-
}
else
{
int wish_count = 0;
-
+
extract_grob_set (left_col, "right-neighbors", neighbors);
/*
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.
+
+ if (!Paper_column::is_musical (right_col))
+ {
+ Real left_col_stick_out = robust_relative_extent (left_col, left_col, X_AXIS)[RIGHT];
+ compound_fixed_note_space = max (left_col_stick_out, options->increment_);
+
+ compound_note_space = max (base_note_space,
+ base_note_space - options->increment_ + left_col_stick_out);
+ }
+ else
+ {
+ /*
+ 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_
+ We used to have compound_fixed_note_space = options->increment_
- but this can lead to numeric instability problems when we
- do
+ but this can lead to numeric instability problems when we
+ do
- inverse_strength = (compound_note_space - compound_fixed_note_space)
+ inverse_strength = (compound_note_space - compound_fixed_note_space)
- */
-
- compound_note_space = base_note_space;
- compound_fixed_note_space = 0.0;
+ */
+
+ compound_note_space = base_note_space;
+ compound_fixed_note_space = 0.0;
+ }
}
else if (to_boolean (me->get_property ("average-spacing-wishes")))
{
Spaceable_grob::add_spring (l, r, distance, inverse_strength);
}
-ADD_INTERFACE (Spacing_spanner, "spacing-spanner-interface",
+ADD_INTERFACE (Spacing_spanner,
"The space taken by a note is dependent on its duration. Doubling a\n"
"duration adds spacing-increment to the space. The most common shortest\n"
"note gets @code{shortest-duration-space}. Notes that are even shorter are\n"
"average-spacing-wishes "
"base-shortest-duration "
"common-shortest-duration "
- "grace-space-factor "
"packed-spacing "
"shortest-duration-space "
"spacing-increment "
+ "strict-grace-spacing "
"strict-note-spacing "
"uniform-stretching "
);
-ADD_INTERFACE (Spacing_interface, "spacing-interface",
+ADD_INTERFACE (Spacing_interface,
"Something to do with line breaking and spacing. "
"Kill this one after determining line breaks.",
+
"");