return me->grob (i)->self_scm ();
}
+LY_DEFINE (ly_grob_array_2_list, "ly:grob-array->list",
+ 1, 0, 0,
+ (SCM grob_arr),
+ "Return the elements of @var{grob-arr} as a Scheme list.")
+{
+ Grob_array *me = unsmob_grob_array (grob_arr);
+ LY_ASSERT_SMOB (Grob_array, grob_arr, 1);
+
+ return grob_array_to_list (me);
+}
return arr_scm;
}
+SCM
+grob_array_to_list (Grob_array *array)
+{
+ SCM list = SCM_EOL;
+ SCM *tail = &list;
+
+ for (vsize i = 0; i < array->size (); i++)
+ {
+ *tail = scm_cons (array->grob (i)->self_scm (), SCM_EOL);
+ tail = SCM_CDRLOC (*tail);
+ }
+ return list;
+}
vector<Grob*> const &ly_scm2link_array (SCM x);
SCM grob_list_to_grob_array (SCM lst);
+SCM grob_array_to_list (Grob_array *array);
#endif /* GROB_ARRAY_HH */
(define-public (system-start-text::calc-y-offset grob)
(define (live-elements-list me)
- (let* ((elements (ly:grob-object me 'elements))
- (elts-length (ly:grob-array-length elements))
- (live-elements '()))
-
- (let get-live ((len elts-length))
- (if (> len 0)
- (let ((elt (ly:grob-array-ref elements (1- len))))
-
- (if (grob::is-live? elt)
- (set! live-elements (cons elt live-elements)))
- (get-live (1- len)))))
- live-elements))
+ (let ((elements (ly:grob-object me 'elements)))
+
+ (filter! grob::is-live?
+ (ly:grob-array->list elements))))
(let* ((left-bound (ly:spanner-bound grob LEFT))
(live-elts (live-elements-list grob))