2005-03-09 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * lily/include/group-interface.hh (extract_grob_array): rename
+ from Pointer_group_interface__extract_grobs
+
* input/regression/ledger-line-minimum.ly (texidoc): new file.
* lily/ledger-line-spanner.cc (set_spacing_rods): new
if (Note_collision_interface::has_interface (c))
{
Link_array<Grob> gs =
- Pointer_group_interface__extract_grobs (c, (Grob*)0, "elements");
+ extract_grob_array (c, ly_symbol2scm ("elements"));
note_cols.concat (gs);
}
for (int i = note_cols.size () ; i--;)
{
- heads.concat (Pointer_group_interface__extract_grobs (note_cols[i],
- (Grob*)0,
- "note-heads"));
-
+ heads.concat (extract_grob_array (note_cols[i], ly_symbol2scm ("note-heads")));
}
heads.default_sort ();
heads.uniq ();
Real dy = robust_scm2double (me->get_property ("forced-distance"), 0.0);
Link_array<Grob> elems
- = Pointer_group_interface__extract_grobs (me, (Grob*) 0, "elements");
+ = extract_grob_array (me, ly_symbol2scm ("elements"));
Real where_f = 0;
Link_array<Grob> elems;
Link_array<Grob> all_grobs
- = Pointer_group_interface__extract_grobs (me, (Grob*) 0, "elements");
+ = extract_grob_array (me, ly_symbol2scm ("elements"));
for (int i = 0; i < all_grobs.size (); i++)
{
Interval y = all_grobs[i]->extent (me, a);
Stencil stencil;
// join heads
- Link_array<Grob> heads (Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-heads"));
+ Link_array<Grob> heads (extract_grob_array (me, ly_symbol2scm ("note-heads")));
if (to_boolean (me->get_property ("join-heads"))
&& heads.size() > 1)
{
Grob *me = unsmob_grob (smob);
Link_array<Grob> stems =
- Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
if (is_knee (me))
return SCM_UNSPECIFIED;
precompute for every stem 2 factors.
*/
Link_array<Grob> stems =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
Array<Stem_info> stem_infos;
Array<Real> base_lengths;
Array<Real> stem_xposns;
Beam::connect_beams (Grob *me)
{
Link_array<Grob> stems =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
Slice last_int;
last_int.set_empty ();
position_beam (me);
Link_array<Grob> stems =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
Grob* xcommon = common_refpoint_of_array (stems, me, X_AXIS);
xcommon = me->get_bound (LEFT)->common_refpoint (xcommon, X_AXIS);
Direction d = DOWN;
Link_array<Grob> stems =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
for (int i = 0; i < stems.size (); i++)
do {
Beam::set_stem_directions (Grob *me, Direction d)
{
Link_array<Grob> stems
- = Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+ = extract_grob_array (me, ly_symbol2scm ("stems"));
for (int i = 0; i <stems.size (); i++)
{
gaps.set_full ();
Link_array<Grob> stems =
- Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
Grob *common = common_refpoint_of_array (stems, me, Y_AXIS);
Real staff_space = Staff_symbol_referencer::staff_space (me);
Array<Real> x_posns ;
Link_array<Grob> stems =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
Grob *commonx = common_refpoint_of_array (stems, me, X_AXIS);
Grob *commony = common_refpoint_of_array (stems, me, Y_AXIS);
*/
Array<Real> x_posns ;
Link_array<Grob> stems =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
Grob *commonx = common_refpoint_of_array (stems, me, X_AXIS);
Grob *commony = common_refpoint_of_array (stems, me, Y_AXIS);
Beam::set_stem_lengths (Grob *me)
{
Link_array<Grob> stems =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
if (!stems.size ())
return;
Beam::set_beaming (Grob *me, Beaming_info_list *beaming)
{
Link_array<Grob> stems =
- Pointer_group_interface__extract_grobs (me, (Grob *)0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
Direction d = LEFT;
for (int i = 0; i < stems.size (); i++)
Beam::forced_stem_count (Grob *me)
{
Link_array<Grob>stems =
- Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
int f = 0;
for (int i = 0; i < stems.size (); i++)
{
Beam::visible_stem_count (Grob *me)
{
Link_array<Grob>stems =
- Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
int c = 0;
for (int i = stems.size (); i--;)
{
Beam::first_visible_stem (Grob *me)
{
Link_array<Grob>stems =
- Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
for (int i = 0; i < stems.size (); i++)
{
Beam::last_visible_stem (Grob *me)
{
Link_array<Grob>stems =
- Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
for (int i = stems.size (); i--;)
{
if (!Stem::is_invisible (stems[i]))
Beam::get_direction_beam_count (Grob *me, Direction d )
{
Link_array<Grob>stems =
- Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+ extract_grob_array (me, ly_symbol2scm ("stems"));
int bc = 0;
for (int i = stems.size (); i--;)
SCM order_vec = me->get_property ("break-align-orders");
if (!scm_is_vector (order_vec)
|| scm_c_vector_length (order_vec) < 3)
- return Pointer_group_interface__extract_grobs (me, (Grob*)0,
- "elements");
+ return extract_grob_array (me, ly_symbol2scm ("elements"));
SCM order = scm_vector_ref (order_vec,
scm_int2num (me->break_status_dir () + 1));
Dot_column::do_shifts (Grob*me)
{
Link_array<Grob> dots =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "dots");
+ extract_grob_array (me, ly_symbol2scm ("dots"));
{ /*
Trigger note collision resolution first, since that may kill off
*/
#include "group-interface.hh"
+#include "item.hh"
void
Group_interface::add_thing (Grob*me, SCM sym, SCM thing)
{
Group_interface::add_thing (me, name, p->self_scm ());
}
+
+
+
+Link_array<Grob>
+extract_grob_array (Grob const *elt, SCM symbol)
+{
+ Link_array<Grob> arr;
+
+ for (SCM s = elt->internal_get_property (symbol); scm_is_pair (s); s = scm_cdr (s))
+ {
+ SCM e = scm_car (s);
+ arr.push (unsmob_grob (e));
+ }
+
+ arr.reverse ();
+ return arr;
+}
+
+
+Link_array<Item>
+extract_item_array (Grob const *elt, SCM symbol)
+{
+ Link_array<Item> arr;
+ for (SCM s = elt->internal_get_property (symbol); scm_is_pair (s); s = scm_cdr (s))
+ {
+ SCM e = scm_car (s);
+ arr.push (dynamic_cast<Item*> (unsmob_grob (e)));
+ }
+
+ arr.reverse ();
+ return arr;
+}
{
Grob * me = unsmob_grob (smob);
Spanner *sp = dynamic_cast<Spanner*> (me);
- Link_array<Grob> gs = Pointer_group_interface__extract_grobs (me, (Grob*)0, "columns");
+ Link_array<Grob> gs = extract_grob_array (me, ly_symbol2scm ("columns"));
if (!gs.size ())
{
static void add_grob (Grob*, SCM nm, Grob*e);
};
-template<class T>
-Link_array<T>
-Pointer_group_interface__extract_grobs (Grob const *elt, T *, const char* name)
-{
- Link_array<T> arr;
-
- for (SCM s = elt->get_property (name); scm_is_pair (s); s = scm_cdr (s))
- {
- SCM e = scm_car (s);
- arr.push (dynamic_cast<T*> (unsmob_grob (e)));
- }
-
- arr.reverse ();
- return arr;
-}
+Link_array<Grob> extract_grob_array (Grob const *elt, SCM symbol);
+Link_array<Item> extract_item_array (Grob const *elt, SCM symbol);
if (!staff)
return SCM_EOL;
- Link_array<Grob> heads (Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-heads"));
+ Link_array<Grob> heads (extract_grob_array (me, ly_symbol2scm ("note-heads")));
if (heads.is_empty ())
return SCM_EOL;
Ledger_line_spanner::print (SCM smob)
{
Spanner *me = dynamic_cast<Spanner*> (unsmob_grob (smob));
- Link_array<Grob> heads (Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-heads"));
+ Link_array<Grob> heads (extract_grob_array (me, ly_symbol2scm ("note-heads")));
if (heads.is_empty ())
return SCM_EOL;
common = common->common_refpoint (me->get_bound (RIGHT), X_AXIS);
Real sl = me->get_layout ()->get_dimension (ly_symbol2scm ("linethickness"));
- Link_array<Grob> heads (Pointer_group_interface__extract_grobs (me, (Grob*)0,
- "heads"));
+ Link_array<Grob> heads (extract_grob_array (me, ly_symbol2scm ("heads")));
if (!heads.size ())
return SCM_EOL;
}
Link_array<Grob> extra_encompasses
- = Pointer_group_interface__extract_grobs (state.slur_, (Grob *)0, "encompass-objects");
+ = extract_grob_array (state.slur_, ly_symbol2scm ("encompass-objects"));
for (int i = 0; i < extra_encompasses.size (); i++)
if (Slur::has_interface (extra_encompasses[i]))
{
{
slur_ = dynamic_cast<Spanner*> (me);
columns_
- = Pointer_group_interface__extract_grobs (me, (Grob *) 0, "note-columns");
+ = extract_grob_array (me, ly_symbol2scm ("note-columns"));
if (columns_.is_empty ())
{
Slur_score_state::get_extra_encompass_infos () const
{
Link_array<Grob> encompasses
- = Pointer_group_interface__extract_grobs (slur_, (Grob *)0,
- "encompass-objects");
+ = extract_grob_array (slur_, ly_symbol2scm ("encompass-objects"));
Array<Extra_collision_info> collision_infos;
for (int i = encompasses.size (); i--; )
{
get_default_dir (Grob*me)
{
Link_array<Grob> encompasses
- = Pointer_group_interface__extract_grobs (me, (Grob*) 0, "note-columns");
+ = extract_grob_array (me, ly_symbol2scm ("note-columns"));
Direction d = DOWN;
for (int i = 0; i < encompasses.size (); i ++)
return;
Link_array<Grob> heads =
- Pointer_group_interface__extract_grobs (me, (Grob*) 0, "note-heads");
+ extract_grob_array (me, ly_symbol2scm ("note-heads"));
heads.sort (compare_position);
Direction dir = get_direction (me);
System::columns () const
{
Link_array<Grob> acs
- = Pointer_group_interface__extract_grobs (this, (Grob*) 0, "columns");
+ = extract_grob_array (this, ly_symbol2scm ("columns"));
bool found = false;
for (int i = acs.size (); i--;)
{
Tie_column::werner_directions (Grob *me)
{
Link_array<Grob> ties =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "ties");
+ extract_grob_array (me, ly_symbol2scm ("ties"));
if (!ties.size ())
return ;
if (! (b1 && (b1 == b2) && !sp->is_broken ()))
return 0;
- Link_array<Grob> beam_stems = Pointer_group_interface__extract_grobs
- (b1, (Grob*)0, "stems");
-
+ Link_array<Grob> beam_stems = extract_grob_array (b1, ly_symbol2scm ("stems"));
if (beam_stems.size () == 0)
{
programming_error ("Beam under tuplet bracket has no stems!");
Grob *me = unsmob_grob (smob);
Stencil mol;
Link_array<Grob> columns =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-columns");
+ extract_grob_array (me, ly_symbol2scm ("note-columns"));
if (!columns.size ())
return mol.smobbed_copy ();
-
-
{
SCM lp = me->get_property ("left-position");
SCM rp = me->get_property ("right-position");
Tuplet_bracket::calc_position_and_height (Grob*me, Real *offset, Real * dy)
{
Link_array<Grob> columns =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-columns");
+ extract_grob_array (me, ly_symbol2scm ("note-columns"));
SCM cols = me->get_property ("note-columns");
Grob * commony = common_refpoint_of_list (cols, me, Y_AXIS);
{
Grob *me = unsmob_grob (smob);
Link_array<Grob> columns =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-columns");
+ extract_grob_array (me, ly_symbol2scm ("note-columns"));
for (int i = columns.size (); i--;)
{
Grob * me = unsmob_grob (smob);
Link_array<Grob> columns =
- Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-columns");
+ extract_grob_array (me, ly_symbol2scm ("note-columns"));
if (!columns.size ())
{