]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/page-layout.scm
remove dir-re function.
[lilypond.git] / scm / page-layout.scm
index c2f554bb84bfb9a75790c96b422776dfac757b0a..98044b870ddbaef42965d03c6a57f652eb9f07ac 100644 (file)
  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
@@ -180,6 +194,7 @@ of lines. "
   (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)))
@@ -204,14 +219,14 @@ is what have collected so far, and has ascending page numbers."
                             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?)
@@ -321,6 +336,7 @@ corresponding to DONE-LINES.
 
 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)))))
@@ -368,6 +384,7 @@ CURRENT-BEST is the best result sofar, or #f."
                           #:penalty total-penalty)
                          current-best)))
 
+;;      (display total-penalty) (newline)
       (if #f ;; debug
           (display
            (list
@@ -413,7 +430,9 @@ DONE."
   (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 '()))
@@ -421,7 +440,7 @@ DONE."
 
     (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)
@@ -432,9 +451,9 @@ DONE."
              (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)
@@ -446,5 +465,5 @@ DONE."
                   "\nconfigs " (map node-configuration break-nodes))))
 
     (let ((stencils (map node->page-stencil break-nodes)))
-      (newline (current-error-port))
+      (ly:progress "\n")
       stencils)))