]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/lily-library.scm
Add a new kind of object, Page_marker, at the same level as scores and
[lilypond.git] / scm / lily-library.scm
index e6215b98235349e4f95f50b6799cd212869d0eee..2758825016cae1ed73b0aafeee287991754e32a8 100644 (file)
    (cons score (ly:parser-lookup parser 'toplevel-scores))))
 
 (define-public (collect-music-for-book parser music)
-  ;; discard music if its 'void property is true.
-  (let ((void-music (ly:music-property music 'void)))
-    (if (or (null? void-music) (not void-music))
-        (collect-scores-for-book parser (scorify-music music parser)))))
+  (define (music-property symbol)
+    (let ((value (ly:music-property music symbol)))
+      (if (not (null? value))
+         value
+         #f)))
+  (cond ((music-property 'page-marker)
+        ;; a page marker: set page break/turn permissions
+        (for-each (lambda (symbol)
+                    (let ((permission (music-property symbol)))
+                      (if (symbol? permission)
+                          (collect-scores-for-book
+                           parser
+                           (ly:make-page-marker symbol
+                                                (if (eqv? 'forbid permission)
+                                                    '()
+                                                    permission))))))
+                  (list 'line-break-permission 'page-break-permission
+                         'page-turn-permission)))
+       ((not (music-property 'void))
+        ;; a regular music expression: make a score with this music
+        ;; void music is discarded
+        (collect-scores-for-book parser (scorify-music music parser)))))
 
 (define-public (scorify-music music parser)
   "Preprocess MUSIC."