]> git.donarmstrong.com Git - lilypond.git/commitdiff
Add ly:grob-array->list; use in live-elements-list for InstrumentName.
authorNeil Puttock <n.puttock@gmail.com>
Tue, 23 Nov 2010 22:12:46 +0000 (22:12 +0000)
committerNeil Puttock <n.puttock@gmail.com>
Tue, 23 Nov 2010 22:21:00 +0000 (22:21 +0000)
* lily/grob-array-scheme.cc (ly_grob_array_2_list):

  new exported function

* lily/grob-array.cc (grob_array_to_list):

  new function: convert Grob_array to Scheme list

* scm/output-lib.scm (system-start-text::calc-y-offset):

  simplify live-elements-list using filter! and ly:grob-array->list

lily/grob-array-scheme.cc
lily/grob-array.cc
lily/include/grob-array.hh
scm/output-lib.scm

index d99cb58a900b1e9fb1cb513530ffe32fef45a135..7518d2e2f5bc56c87c123f272c8dd2cbddd7ac52 100644 (file)
@@ -49,3 +49,13 @@ LY_DEFINE (ly_grob_array_ref, "ly:grob-array-ref",
   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);
+}
index 1cebe0e458357ca6245be157d7694c969cde032d..4084e0fa7502be8228136f73342cf12dc22406db 100644 (file)
@@ -129,3 +129,16 @@ grob_list_to_grob_array (SCM lst)
   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;
+}
index cb2d2f56c1ff682a375bc82a32def1e0ae8bf6e7..6e49dabb56f71481c368c146883e853331013b76 100644 (file)
@@ -53,6 +53,7 @@ DECLARE_UNSMOB (Grob_array, grob_array);
 
 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 */
 
index 716f36a735071a4061787646bbfb743fd51e6041..6c10913d388718bfb91414107c41b132f0eb2885 100644 (file)
@@ -859,18 +859,10 @@ between the two text elements."
 (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))