]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-markup-commands.scm
Issue 1334: A \score-lines markup list command for multi-lines embedded scores
[lilypond.git] / scm / define-markup-commands.scm
index d3ad150ff64a1e645bf20c52abd376f04bb3976a..251415d85b522a9cdaa7d78647be249c7290ebc4 100755 (executable)
@@ -961,6 +961,31 @@ samplePath =
       X-extent
       Y-extent)))
 
+(define-markup-list-command (score-lines layout props score)
+  (ly:score?)
+  "
+This is the same as the @code{\\score} markup but delivers its
+systems as a list of lines.  This is not usually called directly by
+the user.  Instead, it is called when the parser encounters
+@code{\\score} in a context where only markup lists are allowed.  When
+used as the argument of a toplevel @code{\\markuplist}, the result can
+be split across pages."
+  (let ((output (ly:score-embedded-format score layout)))
+
+    (if (ly:music-output? output)
+        (map
+         (lambda (paper-system)
+           ;; shift such that the refpoint of the bottom staff of
+           ;; the first system is the baseline of the score
+           (ly:stencil-translate-axis
+            (paper-system-stencil paper-system)
+            (- (car (paper-system-staff-extents paper-system)))
+            Y))
+         (vector->list (ly:paper-score-paper-systems output)))
+       (begin
+         (ly:warning (_"no systems found in \\score markup, does it have a \\layout block?"))
+          '()))))
+
 (define-markup-command (score layout props score)
   (ly:score?)
   #:category music
@@ -1013,24 +1038,8 @@ baseline.
   }
 }
 @end lilypond"
-  (let ((output (ly:score-embedded-format score layout)))
-
-    (if (ly:music-output? output)
-        (let ((paper-systems
-               (vector->list
-                (ly:paper-score-paper-systems output))))
-          (if (pair? paper-systems)
-              ;; shift such that the refpoint of the bottom staff of
-              ;; the first system is the baseline of the score
-              (ly:stencil-translate-axis
-               (stack-stencils Y DOWN baseline-skip
-                               (map paper-system-stencil paper-systems))
-               (- (car (paper-system-staff-extents (car paper-systems))))
-               Y)
-              empty-stencil))
-       (begin
-         (ly:warning (_"no systems found in \\score markup, does it have a \\layout block?"))
-         empty-stencil))))
+  (stack-stencils Y DOWN baseline-skip
+                  (score-lines-markup-list layout props score)))
 
 (define-markup-command (null layout props)
   ()