diff options
author | Nicolas Sceaux <nicolas.sceaux@free.fr> | 2006-10-01 11:10:15 +0000 |
---|---|---|
committer | Nicolas Sceaux <nicolas.sceaux@free.fr> | 2006-10-01 11:10:15 +0000 |
commit | 28eb8b5ae1302d6cfba9d054d4d764f7d59cb195 (patch) | |
tree | 4386bd8cc2ebd3b80ddf925f1045367ed6df2aa2 /ly | |
parent | 0aa4202d3d301a4bfc59412be4665255e393d77f (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.ly | 42 | ||||
-rw-r--r-- | ly/paper-defaults.ly | 11 |
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 ) |