Offsets is a list of increasing numbers. They must be negated to
create offsets.
"
+
(let* ((topmargin (ly:output-def-lookup layout 'topmargin))
;; TODO: naming vsize/hsize not analogous to TeX.
(vsize (ly:output-def-lookup layout 'vsize))
(hsize (ly:output-def-lookup layout 'hsize))
-
+
+ (system-xoffset (ly:output-def-lookup layout 'horizontalshift 0.0))
(system-separator-markup (ly:output-def-lookup layout 'systemSeparatorMarkup))
(system-separator-stencil (if (markup? system-separator-markup)
(interpret-markup layout
- (page-properties layout)
+ (layout-extract-page-properties layout)
system-separator-markup)
#f))
(lmargin (ly:output-def-lookup layout 'leftmargin))
(leftmargin (if lmargin
- lmargin
- (/ (- hsize
- (ly:output-def-lookup layout 'linewidth)) 2)))
-
- (rightmargin (ly:output-def-lookup layout 'rightmargin))
- (bottom-edge (- vsize
- (ly:output-def-lookup layout 'bottommargin)))
-
- (head (page-headfoot layout scopes number 'make-header 'headsep UP last?))
- (foot (page-headfoot layout scopes number 'make-footer 'footsep DOWN last?))
-
- (head-height (if (ly:stencil? head)
- (interval-length (ly:stencil-extent head Y))
- 0.0))
-
- (height-proc (ly:output-def-lookup layout 'page-music-height))
-
- (page-stencil (ly:make-stencil '()
- (cons leftmargin hsize)
- (cons (- topmargin) 0)))
- (last-system #f)
- (last-y 0.0)
- (add-to-page (lambda (stencil y)
- (set! page-stencil
- (ly:stencil-add page-stencil
- (ly:stencil-translate-axis stencil
- (- 0 head-height y topmargin) Y)))))
- (add-system
- (lambda (stencil-position)
- (let* ((system (car stencil-position))
- (stencil (ly:paper-system-stencil system))
- (y (cadr stencil-position))
- (is-title (ly:paper-system-title?
- (car stencil-position))))
- (add-to-page stencil y)
- (if (and (ly:stencil? system-separator-stencil)
- last-system
- (not (ly:paper-system-title? system))
- (not (ly:paper-system-title? last-system)))
- (add-to-page
- system-separator-stencil
- (average (- last-y
- (car (ly:paper-system-staff-extents last-system)))
- (- y
- (cdr (ly:paper-system-staff-extents system))))))
- (set! last-system system)
- (set! last-y y)))))
+ lmargin
+ (/ (- hsize
+ (ly:output-def-lookup layout 'linewidth)) 2)))
+
+ (rightmargin (ly:output-def-lookup layout 'rightmargin))
+ (bottom-edge (- vsize
+ (ly:output-def-lookup layout 'bottommargin)))
+
+ (head (page-headfoot layout scopes number 'make-header 'headsep UP last?))
+ (foot (page-headfoot layout scopes number 'make-footer 'footsep DOWN last?))
+
+ (head-height (if (ly:stencil? head)
+ (interval-length (ly:stencil-extent head Y))
+ 0.0))
+
+ (height-proc (ly:output-def-lookup layout 'page-music-height))
+
+ (page-stencil (ly:make-stencil '()
+ (cons leftmargin hsize)
+ (cons (- topmargin) 0)))
+ (last-system #f)
+ (last-y 0.0)
+ (add-to-page (lambda (stencil y)
+ (set! page-stencil
+ (ly:stencil-add page-stencil
+ (ly:stencil-translate stencil
+ (cons
+ system-xoffset
+ (- 0 head-height y topmargin))
+
+ )))))
+ (add-system
+ (lambda (stencil-position)
+ (let* ((system (car stencil-position))
+ (stencil (ly:paper-system-stencil system))
+ (y (cadr stencil-position))
+ (is-title (ly:paper-system-title?
+ (car stencil-position))))
+ (add-to-page stencil y)
+ (if (and (ly:stencil? system-separator-stencil)
+ last-system
+ (not (ly:paper-system-title? system))
+ (not (ly:paper-system-title? last-system)))
+ (add-to-page
+ system-separator-stencil
+ (average (- last-y
+ (car (ly:paper-system-staff-extents last-system)))
+ (- y
+ (cdr (ly:paper-system-staff-extents system))))))
+ (set! last-system system)
+ (set! last-y y)))))
(if #f
(display (list
- "leftmargin" leftmargin "rightmargin" rightmargin)))
+ "leftmargin " leftmargin "rightmargin " rightmargin
+ )))
(set! page-stencil (ly:stencil-combine-at-edge
- page-stencil Y DOWN head 0. 0.))
+ page-stencil Y DOWN
+ (if (and
+ (ly:stencil? head)
+ (not (ly:stencil-empty? head)))
+ head
+ (ly:make-stencil "" (cons 0 0) (cons 0 0)))
+ 0. 0.))
(map add-system (zip lines offsets))
- (if (ly:stencil? foot)
+ (if (and (ly:stencil? foot)
+ (not (ly:stencil-empty? foot)))
(set! page-stencil
(ly:stencil-add
page-stencil
(define MAXPENALTY 1e9)
(define paper (ly:paper-book-paper paper-book))
(define scopes (ly:paper-book-scopes paper-book))
+ (define force-equalization-factor #f)
(define (page-height page-number last?)
(let ((p (ly:output-def-lookup paper 'page-music-height)))
0.0
(node-penalty (car best-paths))))
(inter-system-space (ly:output-def-lookup paper 'betweensystemspace))
- (force-equalization-factor 0.3)
(relative-force (/ force inter-system-space))
(abs-relative-force (abs relative-force)))
(+ (* abs-relative-force (+ abs-relative-force 1))
prev-penalty
- (* force-equalization-factor (/ (abs (- prev-force force)) inter-system-space))
+ (* force-equalization-factor (/ (abs (- prev-force force))
+ inter-system-space))
user)))
(define (space-systems page-height lines ragged?)
CURRENT-BEST is the best result sofar, or #f."
+
(let* ((this-page-num (if (null? best-paths)
(ly:output-def-lookup paper 'firstpagenumber)
(1+ (node-page-number (car best-paths)))))
#:penalty total-penalty)
current-best)))
+;; (display total-penalty) (newline)
(if #f ;; debug
(display
(list
(define (line-number node)
(ly:paper-system-number (car (node-lines node))))
- (display (_ "Calculating page breaks...") (current-error-port))
+ (ly:message (_ "Calculating page breaks..."))
+ (set! force-equalization-factor
+ (ly:output-def-lookup paper 'verticalequalizationfactor 0.3))
(let* ((best-break-node (walk-lines '() '() lines))
(break-nodes (get-path best-break-node '()))
(define (node->page-stencil node)
(if (not (eq? node last-node))
- (display "[" (current-error-port)))
+ (ly:progress "["))
(let ((stencil
((ly:output-def-lookup paper 'page-make-stencil)
(node-lines node)
(eq? node best-break-node))))
(if (not (eq? node last-node))
(begin
- (display (car (last-pair (node-system-numbers node)))
- (current-error-port))
- (display "]" (current-error-port))))
+ (ly:progress (number->string
+ (car (last-pair (node-system-numbers node)))))
+ (ly:progress "]")))
stencil))
(if #f; (ly:get-option 'verbose)
"\nconfigs " (map node-configuration break-nodes))))
(let ((stencils (map node->page-stencil break-nodes)))
- (newline (current-error-port))
+ (ly:progress "\n")
stencils)))