Direction bsd = item->break_status_dir ();
if (bsd == LEFT)
{
- me->set_grob_property ("self-alignment-X", gh_int2scm (RIGHT));
+ me->set_grob_property ("self-alignment-X", scm_int2num (RIGHT));
}
/*
Force break alignment itself to be done first, in the case
*/
- return Side_position_interface::aligned_on_self (element_smob, axis);
+ return Self_alignment_interface::aligned_on_self (element_smob, axis);
}
void
Axis_group_interface::add_element (me, toadd);
}
-void
-Break_align_interface::set_interface (Grob*me)
-{
- Align_interface::set_interface (me);
- Align_interface::set_axis (me,X_AXIS);
-}
-
-
-
-
void
Break_align_interface::do_alignment (Grob *me)
{
Item * item = dynamic_cast<Item*> (me);
-
+ int rank = Paper_column::get_rank (item->get_column ());
Link_array<Grob> elems
= Pointer_group_interface__extract_grobs (me, (Grob*)0,
"elements");
int idx = 0;
- while (extents[idx].empty_b ())
+ while (idx < extents.size () && extents[idx].empty_b ())
idx++;
Array<Real> offsets;
int edge_idx = -1;
- while (idx < elems.size())
+ while (idx < elems.size() - 1)
{
int next_idx = idx+1;
- while ( next_idx < elems.size() && extents[next_idx].empty_b())
+ while (next_idx < elems.size() &&
+ extents[next_idx].empty_b()
+ && next_idx != elems.size() -1 )
next_idx++;
-
- if (next_idx == elems.size())
- break;
Grob *l = elems[idx];
Grob *r = elems[next_idx];
table, but that gets icky when that grob is suicided for some
reason.
*/
- for (SCM s = r->get_grob_property ("elements");
- gh_pair_p (s); s = gh_cdr (s))
- {
- Grob * elt =unsmob_grob(gh_car (s));
-
- SCM sym = elt->get_grob_property ("break-align-symbol");
- if (gh_symbol_p (sym))
- {
- rsym = sym;
- break;
- }
- }
+ for (SCM s = r->get_grob_property ("elements");
+ gh_pair_p (s); s = gh_cdr (s))
+ {
+ Grob * elt =unsmob_grob(gh_car (s));
+
+ SCM sym = elt->get_grob_property ("break-align-symbol");
+ if (gh_symbol_p (sym))
+ {
+ rsym = sym;
+ break;
+ }
+ }
if (rsym == ly_symbol2scm("left-edge"))
edge_idx = next_idx;
bool entry_found = gh_pair_p (entry);
if (!entry_found)
{
- String sym_str;
- if(gh_symbol_p(rsym))
- sym_str = ly_symbol2string (rsym);
+ String sym_string;
+ if(gh_symbol_p (rsym))
+ sym_string = ly_symbol2string (rsym);
- String orig_str ;
+ String orig_string ;
if (unsmob_grob (l->get_grob_property ("cause")))
- orig_str = unsmob_grob (l->get_grob_property ("cause"))->name ();
+ orig_string = unsmob_grob (l->get_grob_property ("cause"))->name ();
programming_error (_f("No spacing entry from %s to `%s'",
- orig_str.ch_C (),
- sym_str.ch_C()));
+ orig_string.to_str0 (),
+ sym_string.to_str0 ()));
}
Real distance = 1.0;
offsets[next_idx] = extents[idx][RIGHT] + distance;
else if (type == ly_symbol2scm("minimum-space"))
offsets[next_idx] = extents[idx][RIGHT] >? distance;
-
+
idx = next_idx;
}
}
}
+
+ADD_INTERFACE (Break_aligned_interface, "break-aligned-interface",
+ "Items that are aligned in prefatory matter.
+
+The spacing of these items is controlled by the space-alist
+property. It contains a list break-align-symbols with a specification
+of the associated space. The space definition is either (extra-space
+. @var{number}), which adds space after the symbol, (minimum-space
+. @var{ms}), which pads the space until it it is @var{ms}.
+
+
+Special keys for the alist are 'first-note and 'next-note, signifyign
+the first note on a line, and the next note halfway a line.
+
+Rules for this spacing are much more complicated than this.
+See [Wanske] page 126 -- 134, [Ross] pg 143 -- 147
+
+
+",
+ "break-align-symbol break-alignment-done space-alist");
+
+ADD_INTERFACE (Break_align_interface, "break-alignment-interface",
+ "See @ref{break-aligned-interface}.",
+ "break-alignment-done");
+
+
+