summaryrefslogtreecommitdiff
path: root/ly
diff options
context:
space:
mode:
authorNicolas Sceaux <nicolas.sceaux@free.fr>2006-10-01 11:10:15 +0000
committerNicolas Sceaux <nicolas.sceaux@free.fr>2006-10-01 11:10:15 +0000
commit28eb8b5ae1302d6cfba9d054d4d764f7d59cb195 (patch)
tree4386bd8cc2ebd3b80ddf925f1045367ed6df2aa2 /ly
parent0aa4202d3d301a4bfc59412be4665255e393d77f (diff)
* scm/layout-page-layout.scm (page-breaking-wrapper): new
function. Call the page breaking function selected in the `page-breaking' \paper variable, then the post processing function chosen using the `page-post-process' \paper variable. (line-height): new function. Return the height of a system. (line-minimum-position-on-page): new function. Return the position of a system on page (using the previous line position), only considering between system padding. (stretchable-line?): new function. Says whether a line can be stretched (ie. is not a title nor a single staff system). (page-maximum-space-left): new function. Computes space left on a page, when all systems are separated by their padding. * lily/page-breaking.cc (breaking::make_pages): Move page post processing function call to page breaking wrapper (common to all page breakers). * lily/paper-book.cc (book::pages): call the page breaking wrapper, instead of the page breaker directly * ly/paper-defaults.ly: Add \paper variables for page breaking wrapper and page post processing function. Make `write-page-layout' value depend on the 'dump-tweaks option. Add a `system-maximum-stretch-procedure' variable for holding a function computing the maximum stretch a system allows. * scm/layout-page-dump.scm (write-page-breaks): computes the stretch to apply to systems on a page to minimize left space. Dump this stretch length. * ly/music-functions-init.ly (spacingTweaks): implement it. Read the system-stretch property of the tweak data to stretch the system. (includePageLayoutFile): Void function which includes the generated page-layout file if it exists and if the page layout dumping is not asked. (scoreTweak): if the score tweak named by the argument exists, return it.
Diffstat (limited to 'ly')
-rw-r--r--ly/music-functions-init.ly42
-rw-r--r--ly/paper-defaults.ly11
2 files changed, 50 insertions, 3 deletions
diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly
index 02519f5361..b910223f68 100644
--- a/ly/music-functions-init.ly
+++ b/ly/music-functions-init.ly
@@ -370,6 +370,9 @@ parenthesize =
(set! (ly:music-property arg 'parenthesize) #t)
arg)
+%% for lambda*
+#(use-modules (ice-9 optargs))
+
parallelMusic =
#(define-music-function (parser location voice-ids music) (list? ly:music?)
"Define parallel music sequences, separated by '|' (bar check signs),
@@ -439,7 +442,7 @@ Example:
voices)
;;
;; check sequence length
- (apply for-each (lambda (. seqs)
+ (apply for-each (lambda* (#:rest seqs)
(let ((moment-reference (ly:music-length (car seqs))))
(for-each (lambda (seq moment)
(if (not (equal? moment moment-reference))
@@ -500,12 +503,45 @@ shiftDurations =
(lambda (x)
(shift-one-duration-log x dur dots)) arg))
-
-%% this is a stub. Write your own to suit the spacing tweak output.
spacingTweaks =
#(define-music-function (parser location parameters) (list?)
+ "Set the system stretch, by reading the 'system-stretch property of
+ the `parameters' assoc list."
+ #{
+ \overrideProperty #"Score.NonMusicalPaperColumn"
+ #'line-break-system-details
+ #$(list (cons 'alignment-extra-space (cdr (assoc 'system-stretch parameters))))
+ #})
+
+%% Parser used to read page-layout file, and then retreive score tweaks.
+#(define page-layout-parser #f)
+
+includePageLayoutFile =
+#(define-music-function (parser location) ()
+ "If page breaks and tweak dump is not asked, and the file
+ <basename>-page-layout.ly exists, include it."
+ (if (not (ly:get-option 'dump-tweaks))
+ (let ((tweak-filename (format #f "~a-page-layout.ly"
+ (ly:parser-output-name parser))))
+ (if (access? tweak-filename R_OK)
+ (begin
+ (ly:message "Including tweak file ~a" tweak-filename)
+ (set! page-layout-parser (ly:clone-parser parser))
+ (ly:parser-parse-string page-layout-parser
+ (format #f "\\include \"~a\""
+ tweak-filename))))))
(make-music 'SequentialMusic 'void #t))
+scoreTweak =
+#(define-music-function (parser location name) (string?)
+ "Include the score tweak, if exists."
+ (if (and page-layout-parser (not (ly:get-option 'dump-tweaks)))
+ (let ((tweak-music (ly:parser-lookup page-layout-parser
+ (string->symbol name))))
+ (if (ly:music? tweak-music)
+ tweak-music
+ (make-music 'SequentialMusic)))
+ (make-music 'SequentialMusic)))
transposedCueDuring =
#(define-music-function
diff --git a/ly/paper-defaults.ly b/ly/paper-defaults.ly
index 2e265c7ab1..44ec0b961e 100644
--- a/ly/paper-defaults.ly
+++ b/ly/paper-defaults.ly
@@ -97,6 +97,17 @@
(word-space . 0.6)))
#(define page-breaking ly:optimal-breaking)
+ #(define page-breaking-wrapper page-breaking-wrapper)
+ #(define page-post-process post-process-pages)
+
+ #(define write-page-layout (ly:get-option 'dump-tweaks))
+ #(define system-maximum-stretch-procedure
+ (lambda (line)
+ (if (stretchable-line? line)
+ (let ((height (line-height line)))
+ (/ (* height height) 80.0))
+ 0.0)))
+
% #(define page-music-height default-page-music-height )
% #(define page-make-stencil default-page-make-stencil )