]> git.donarmstrong.com Git - lilypond.git/commitdiff
* scm/page.scm (make-page): add footer/header.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 25 Jan 2006 01:20:59 +0000 (01:20 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 25 Jan 2006 01:20:59 +0000 (01:20 +0000)
(annotate-space-left): revise: only take page argument.
(layout->page-init): new function.

* scm/layout-page-layout.scm (write-page-breaks): preliminary
version of the system/spacing/linebreak hack writing to the output

* lily/prob-scheme.cc (LY_DEFINE): take optional 'key val args in ly:make-prob.

* lily/grob-scheme.cc (LY_DEFINE): ly:spanner-get-bound -> ly:spanner-bound

17 files changed:
ChangeLog
lily/grob-scheme.cc
lily/paper-book.cc
lily/prob-scheme.cc
lily/system.cc
ly/paper-defaults.ly
python/convertrules.py
scm/framework-eps.scm
scm/framework-gnome.scm
scm/framework-ps.scm
scm/framework-scm.scm
scm/framework-svg.scm
scm/framework-tex.scm
scm/layout-page-layout.scm
scm/lily.scm
scm/page.scm
scm/safe-lily.scm

index e54e951f21d253630c4b8abc05d94ae78f2c1874..8c77c2976b3eebac1c0c6d1a7ac4b029cab3deea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,25 @@
+2006-01-25  Han-Wen Nienhuys  <hanwen@xs4all.nl>
+
+       * scm/page.scm (make-page): add footer/header.
+       (annotate-space-left): revise: only take page argument.
+       (layout->page-init): new function.
+
+       * scm/layout-page-layout.scm (write-page-breaks): preliminary
+       version of the system/spacing/linebreak hack writing to the output
+
+       * lily/prob-scheme.cc (LY_DEFINE): take optional 'key val args in ly:make-prob.
+
+       * lily/grob-scheme.cc (LY_DEFINE): ly:spanner-get-bound -> ly:spanner-bound
+
 2006-01-24  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+       * scm/stencil.scm (annotate-y-interval): move from layout-page-layout.scm
+
+       * scm/paper-system.scm (paper-system-annotate): new file. Handle paper-system.
+
+       * scm/layout-page-layout.scm (optimal-page-breaks): move all page
+       handling to page.scm
+
        * lily/prob-scheme.cc (LY_DEFINE): new file.
        (LY_DEFINE): functions ly:make-prob , ly:prob-type? , ly:prob-(set-)property(!)
 
index f31c5fdbb4b14fc43b1e09497366e5423f00f25c..15cf075a2531051ac6bcc1569a3506127342b499 100644 (file)
@@ -85,7 +85,7 @@ LY_DEFINE (ly_grob_object, "ly:grob-object",
   return sc->internal_get_object (sym);
 }
 
-LY_DEFINE (ly_spanner_get_bound, "ly:spanner-get-bound",
+LY_DEFINE (ly_spanner_get_bound, "ly:spanner-bound",
           2, 0, 0, (SCM slur, SCM dir),
           "Get one of the bounds of @var{spanner}. @var{dir} is @code{-1} "
           "for left, and @code{1} for right.")
index cd295de778e3dff9393c688827ac6f15bf00a670..48b0fe34f77ebc62d156c00d9da67e1a18db09b2 100644 (file)
@@ -288,7 +288,6 @@ Paper_book::systems ()
            header_0_ = header;
        }
       else if (Music_output *mop = unsmob_music_output (scm_car (s)))
-
        {
          if (Paper_score *pscore = dynamic_cast<Paper_score *> (mop))
            {
index 3d847543e73957c4e9d951c92b00062d9df07dc0..ceadabdd69241283b98549d2c269a3e89e302aec 100644 (file)
@@ -9,23 +9,33 @@
 #include "prob.hh"
 
 LY_DEFINE (ly_prob_set_property_x, "ly:prob-set-property!",
-          2, 1, 0, (SCM system, SCM sym, SCM value),
-          "Set property @var{sym} of @var{system} to @var{value}")
+          2, 1, 0, (SCM obj, SCM sym, SCM value),
+          "Set property @var{sym} of @var{obj} to @var{value}")
 {
-  Prob *ps = unsmob_prob (system);
-  SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "Prob");
+  Prob *ps = unsmob_prob (obj);
+  SCM_ASSERT_TYPE (ps, obj, SCM_ARG1, __FUNCTION__, "Prob");
   SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
 
   ps->internal_set_property (sym, value);
   return SCM_UNSPECIFIED;
 }
 
+/*
+  Hmm, this is not orthogonal.
+ */
+LY_DEFINE (ly_prob_property_p, "ly:prob-property?",
+          2, 1, 0, (SCM obj, SCM sym),
+          "Is boolean prop @var{sym} set?")
+{
+  return scm_equal_p (SCM_BOOL_T, ly_prob_property (obj, sym, SCM_BOOL_F));
+}
+
 LY_DEFINE (ly_prob_property, "ly:prob-property",
-          2, 1, 0, (SCM system, SCM sym, SCM dfault),
+          2, 1, 0, (SCM obj, SCM sym, SCM dfault),
           "Return the value for @var{sym}.")
 {
-  Prob *ps = unsmob_prob (system);
-  SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "Prob");
+  Prob *ps = unsmob_prob (obj);
+  SCM_ASSERT_TYPE (ps, obj, SCM_ARG1, __FUNCTION__, "Prob");
   SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
 
   if (dfault == SCM_UNDEFINED)
@@ -39,7 +49,7 @@ LY_DEFINE (ly_prob_property, "ly:prob-property",
 }
 
 LY_DEFINE (ly_prob_type_p, "ly:prob-type?",
-          1, 0, 0,
+          2, 0, 0,
           (SCM obj, SCM type),
           "If obj the specified prob-type?")
 {
@@ -48,13 +58,22 @@ LY_DEFINE (ly_prob_type_p, "ly:prob-type?",
 }
 
 LY_DEFINE (ly_make_prob, "ly:make-prob",
-          2, 0, 0,
-          (SCM type, SCM init),
+          2, 0, 1,
+          (SCM type, SCM init, SCM rest),
           "Create a Prob.")
 {
   Prob *pr = new Prob (type, init);
-  SCM x = pr->self_scm () ;
-  return scm_gc_unprotect_object (x);
+
+  for (SCM s = rest;
+       scm_is_pair (s) && scm_is_pair (scm_cdr (s)); s = scm_cddr (s))
+    {
+      SCM sym = scm_car (s);
+      SCM val = scm_cadr (s);
+
+      pr->internal_set_property (sym, val);
+    }
+  
+  return pr->unprotect ();
 }
 
   
index a1636c8a1a26c513d202f86059e95784ca9675a1..07d156a65bd92ad74568f1c012e792c5ae7d04a2 100644 (file)
@@ -190,7 +190,8 @@ System::get_paper_systems ()
 
       System *system = dynamic_cast<System *> (broken_intos_[i]);
       system->post_processing ();
-      scm_vector_set_x (lines, scm_from_int (i), system->get_paper_system ());
+      scm_vector_set_x (lines, scm_from_int (i),
+                       system->get_paper_system ());
 
       if (be_verbose_global)
        progress_indication (to_string (i) + "]");
@@ -394,7 +395,9 @@ System::get_paper_system ()
        }
       pl->set_property ("refpoint-Y-extent", ly_interval2scm (staff_refpoints));
     }
-  
+
+  pl->set_property ("system-grob", this->self_scm ()); 
+
   return pl->unprotect ();
 }
 
index 14340cc50bc14a9a27f7c2372a107f97856f9b03..c8116b55c15de5c741ac3ef2988d7274a4530447 100644 (file)
@@ -91,8 +91,8 @@
        (word-space . 0.6)))
 
     #(define page-breaking optimal-page-breaks)
-    #(define page-music-height default-page-music-height )
-    #(define page-make-stencil default-page-make-stencil )
+%    #(define page-music-height default-page-music-height )
+%    #(define page-make-stencil default-page-make-stencil )
 
     #(define make-header (marked-up-headfoot 'oddHeaderMarkup 'evenHeaderMarkup))
     #(define make-footer (marked-up-headfoot 'oddFooterMarkup 'evenFooterMarkup))
index 3710cf04220573e40ff6a06b24d181f3f74e8534..1a65a7281e3dfa09a0da7a1eb49105a46bed6259 100644 (file)
@@ -2673,3 +2673,10 @@ def conv (str):
 
 conversions.append (((2, 7, 24), conv,
                     """deprecate number-visibility""")) 
+
+def conv (str):
+       str = re.sub (r"ly:spanner-get-bound", "ly:spanner-bound", str)
+       return str
+
+conversions.append (((2, 7, 28), conv,
+                    """ly:spanner-get-bound -> ly:spanner-bound"""))
index 78de309b8f47097f4d5ca0245a572133e8fd5bf2..44d9adab459a75026fab74820a8b0de2b8c55a17 100644 (file)
@@ -103,7 +103,8 @@ stencil, so LaTeX includegraphics doesn't fuck up the alignment."
 
 (define-public (output-framework basename book scopes fields)
   (output-scopes scopes fields basename)
-  (dump-stencils-as-EPSes (ly:paper-book-pages book) book basename))
+  (dump-stencils-as-EPSes
+   (map page-stencil (ly:paper-book-pages book)) book basename))
   
 
 ; redefine to imports from framework-ps
index f66c6bfd314eec1b4b7f3a6b052f7ef7341d7fbc..36dba09daa21c9a300e4f4c068bb35e53611cf49 100644 (file)
 
         (go (make <gnome-outputter>
               #:name name
-              #:page-stencils (list->vector (ly:paper-book-pages book))
+              #:page-stencils (list->vector (map page-stencil (ly:paper-book-pages book)))
               #:canvas-width page-width
               #:canvas-height page-height
               #:window-width
index 9bd77fa27099b72b1cb5acb9e042c75fdaa58b91..26ea51e0422214e34459faf109967d6537a2d6ec 100644 (file)
@@ -12,6 +12,7 @@
             (ice-9 string-fun)
             (ice-9 format)
             (guile)
+            (scm page)
             (srfi srfi-1)
             (srfi srfi-13)
             (lily))
                     (open-file filename "wb")
                     "ps"))
         (paper (ly:paper-book-paper book))
-        (pages (ly:paper-book-pages book))
+        (page-stencils (map page-stencil (ly:paper-book-pages book)))
+        
         (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t))
         (page-number (1- (ly:output-def-lookup paper 'firstpagenumber)))
-        (page-count (length pages))
+        (page-count (length page-stencils))
         (port (ly:outputter-port outputter)))
 
     (output-scopes scopes fields basename)
      (lambda (page)
        (set! page-number (1+ page-number))
        (dump-page outputter page page-number page-count landscape?))
-     pages)
+     page-stencils)
 
     (display "%%Trailer\n%%EOF\n" port)
     (ly:outputter-close outputter)
index 058217e0b329a35ccf1d0359a47d84b77d10800f..d20e5dea35f0d4ca0a10a952453673fd944e1b8b 100644 (file)
@@ -25,7 +25,7 @@
 ;     (pretty-print (ly:stencil-expr page) file)
      (write (ly:stencil-expr page) file)
      )
-   (ly:paper-book-pages book))))
+   (map page-stencil (ly:paper-book-pages book)))))
 
 (define-public output-classic-framework output-framework)
 
index 49841f25c5cd57f5f64f14c97400c245bc2c1a9b..3a569c9bde3a7101e0de9f65d762b26ac9341ba1 100644 (file)
         (unit-length (ly:output-def-lookup paper 'outputscale))
         (output-scale (* lily-unit->mm-factor
                          unit-length))
-        (pages (ly:paper-book-pages book))
+        (page-stencils (map page-stencil (ly:paper-book-pages book)))
         (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t))
         (page-number (1- (ly:output-def-lookup paper 'firstpagenumber)))
-        (page-count (length pages))
+        (page-count (length page-stencils))
         (hsize (ly:output-def-lookup paper 'hsize))
         (vsize (ly:output-def-lookup paper 'vsize))
         (page-width (inexact->exact (ceiling (* output-scale hsize))))
@@ -59,7 +59,7 @@
      (lambda (page)
        (set! page-number (1+ page-number))
        (dump-page outputter page page-number page-count landscape? page-set?))
-     pages)
+     page-stencils)
     
     (if page-set? (eo 'pageSet) "")
     (dump
index 5c896d5859014bf1ebb25fc1bcbe36d9f464f546..09af77a74713ae007e784a7bcb77f893de810e1d 100644 (file)
   (let* ((filename (format "~a.tex" basename))
         (outputter  (ly:make-paper-outputter (open-file filename "wb") "tex"))
         (paper (ly:paper-book-paper book))
-        (pages (ly:paper-book-pages book))
+        (page-stencils (map page-stencil (ly:paper-book-pages book)))
         (last-page (car (last-pair pages)))
         (with-extents
          (eq? #t (ly:output-def-lookup paper 'dump-extents))))
      (lambda (x)
        (ly:outputter-dump-string outputter x))
      (list
-      (header paper (length pages) #f)
+      (header paper (length page-stencils) #f)
       (define-fonts paper)
       (header-end)))
     (ly:outputter-dump-string outputter "\\lilypondnopagebreak\n")
     (for-each
      (lambda (page)
        (dump-page outputter page (eq? last-page page) with-extents))
-     pages)
+     page-stencils)
     (ly:outputter-dump-string outputter "\\lilypondend\n")
     (ly:outputter-close outputter)
     (postprocess-output book framework-tex-module filename
index 9d7ab8288b49884671bfce00e4e2a96cd2a873a1..148ac1cc341f536e37e377f9fbbc68b71b06e04f 100644 (file)
             (scm page)
             )
 
+(define (write-page-breaks pages) 
+  "Dump page breaks"
 
+  
+  (define tweaks '())
+
+  (define (record when property-pairs)
+    (set! tweaks
+         (acons when property-pairs
+                tweaks)))
+
+  (define (moment->skip mom)
+    (format "s1*~a/~a"
+           (ly:moment-main-numerator mom)
+           (ly:moment-main-denominator mom)))
+  
+  (define (dump-tweaks out-port tweak-list last-moment)
+    (if (not (null? tweak-list))
+       (let*
+           ((now (caar tweak-list))
+            (diff (ly:moment-sub now last-moment))
+            (these-tweaks (cdar tweak-list))
+            (skip (moment->skip diff))
+
+            (base (format "\\overrideProperty
+       #\"Score.NonMusicalPaperColumn\"
+       #'line-break-system-details
+        #'~a" these-tweaks))
+            )
+
+         (format out-port "\\skip ~a\n~a\n" skip base)
+         (dump-tweaks out-port (cdr tweak-list) now)
+       )
+
+       ))
+  
+  (define (handle-page page)
+    (define (handle-system sys)
+      (let*
+         ((props '((line-break . #t))))
+
+       (if (equal? (car (page-lines page)) sys)
+           (set! props (cons '(page-break . #t)
+                             props)))
+
+       (if (not (ly:prob-property? sys 'is-title))
+           (record (ly:grob-property (ly:spanner-bound (ly:prob-property sys 'system-grob) LEFT) 'when)
+                 props))
+       ))
+    (for-each handle-system (page-lines page)))
+  
+  
+  (for-each handle-page pages)
+
+  (let*
+      ((out-port (open-output-file "breaks.ly")))
 
+    (display "{" out-port)
+    (dump-tweaks out-port (reverse tweaks) (ly:make-moment 0 1))
+    (display "}" out-port)
+  ))
+
+
+
+(define (post-process-pages pages)
+  (if (ly:get-option 'write-page-layout)
+      (write-page-breaks pages)))
 
 
 
 ;; - raggedbottom? raggedlastbottom?
 
 (define-public (optimal-page-breaks lines paper-book)
-  "Return pages as a list starting with 1st page. Each page is a 'page prob.
-
-"
+  "Return pages as a list starting with 1st page. Each page is a 'page Prob."
 
   (define MAXPENALTY 1e9)
   (define paper (ly:paper-book-paper paper-book))
+
+  ;; ugh.
+  (define page-alist (layout->page-init (ly:paper-book-paper paper-book))) 
   (define scopes (ly:paper-book-scopes paper-book))
   (define force-equalization-factor #f)
   (define (get-path node done)
@@ -55,7 +121,6 @@ is what have collected so far, and has ascending page numbers."
         (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))
@@ -206,16 +271,17 @@ CURRENT-BEST is the best result sofar, or #f."
                               (1+ (page-page-number (car best-paths)))))
 
           (this-page (make-page
+                      page-alist
                       'paper-book paper-book
-                      'is-last last? 
+                      'is-last last?
                       'page-number this-page-num))
-                      
+
           (ragged-all? (eq? #t (ly:output-def-lookup paper 'raggedbottom)))
           (ragged-last? (eq? #t (ly:output-def-lookup paper 'raggedlastbottom)))
           (ragged? (or ragged-all?
                        (and ragged-last?
                             last?)))
-           (height (page-height  this-page))
+           (height (page-printable-height this-page))
           (vertical-spacing (space-systems height current-lines ragged?))
           (satisfied-constraints (car vertical-spacing))
            (force (if satisfied-constraints
@@ -316,9 +382,7 @@ DONE."
         (break-nodes (get-path best-break-node '()))
         )
 
-
-    (set! (page-property (car (last-pair break-nodes)) 'is-last) #t)
-
+    (page-set-property! (car (last-pair break-nodes)) 'is-last #t)
     (if #f; (ly:get-option 'verbose)
        (begin
          (display (list
@@ -327,6 +391,8 @@ DONE."
                   "\npenalties " (map page-penalty break-nodes)
                   "\nconfigs " (map page-configuration break-nodes))))
 
-    (let ((stencils (map page-stencil break-nodes)))
-      (ly:progress "\n")
-      stencils)))
+    ;; construct page stencils.
+    (for-each page-stencil break-nodes)
+    (post-process-pages paper break-nodes)
+    
+    break-nodes))
index 1812ab74bd070250f9cce4f88494c79da4ecd571..7ef7c147d269798f5b4a45b3e6043aaa4cb19692 100644 (file)
@@ -34,6 +34,8 @@ similar to chord syntax")
              (verbose ,(ly:command-line-verbose?) "value for the --verbose flag")
              (ttf-verbosity 0
                           "how much verbosity for TTF font embedding?")
+             (write-page-layout #f
+                                "dump page layout settings.") 
              (debug-gc #f
                        "dump GC protection info"))))
 
index aff8dfa67efa6c219850cf6ea666402c98413760..7eb5cb69ae31a9370433f47d13c6d95171d3f845 100644 (file)
@@ -12,7 +12,8 @@
            page-property
            page-set-property!
            page-prev
-           page-height
+           page-printable-height
+           layout->page-init
            page-lines
            page-force 
            page-penalty
@@ -21,6 +22,7 @@
            page-page-number
            page-system-numbers
            page-stencil
+           page-free-height
            page? 
            ))
 
 
 (define page-module (current-module))
 
-(define (make-page . args)
-  (apply ly:make-prob (append
-                      (list 'page '())
-                      args)))
+(define (make-page init  . args)
+  (let*
+      ((p (apply ly:make-prob (append
+                              (list 'page init)
+                              args))))
 
+    (page-set-property! p 'head-stencil (page-header p))
+    (page-set-property! p 'foot-stencil (page-footer p))
+    
+    p))
+       
 (define page-property ly:prob-property)
+(define page-set-property! ly:prob-set-property!)
 (define (page-property? page sym)
   (eq? #t (page-property page sym)))
-
 (define (page? x)  (ly:prob-type? x 'page))
 
-(define page-set-property! ly:prob-set-property!)
 
 ;; define accessors. 
 (for-each
@@ -63,8 +70,6 @@
   (map (lambda (ps) (ly:prob-property ps 'number))
        (page-lines node)))
 
-
-
 (define (annotate-page stencil layout)
   (let*
       ((topmargin (ly:output-def-lookup layout 'topmargin))
     
     stencil))
 
-(define (annotate-space-left page-stencil layout bottom-edge)
+(define (annotate-space-left page)
   (let*
-      ((arrow (annotate-y-interval layout
-                               "space left"
-                               (cons (- bottom-edge)  (car (ly:stencil-extent page-stencil Y)))
-                               #t)))
-    
+      ((p-book (page-property page 'paper-book))
+       (layout (ly:paper-book-paper page))
+       (arrow (annotate-y-interval layout
+                                  "space left"
+                                  (cons (- (page-property page 'bottom-edge))
+                                        (page-property page  'bottom-system-edge))
+                                  #t)))
+
     (set! arrow (ly:stencil-translate-axis arrow 8 X))
-    (ly:stencil-add page-stencil arrow)))
+
+    arrow))
 
 \f
 
        (offsets (page-configuration page))
        (number (page-page-number page))
        (last? (page-property page 'is-last))
-
        )
        
       (page-headfoot layout scopes number
                    'footsep)
                dir last?)))
 
-(define (page-footer page)
+(define (page-header page)
   (page-header-or-footer page UP))
 
-(define (page-header page)
+(define (page-footer page)
   (page-header-or-footer page DOWN))
 
+(define (layout->page-init layout)
+  "Alist of settings for page layout"
+  (let*
+      ((vsize (ly:output-def-lookup layout 'vsize))
+       (hsize (ly:output-def-lookup layout 'hsize))
+
+       (lmargin (ly:output-def-lookup layout 'leftmargin))
+       (leftmargin (if lmargin
+                      lmargin
+                      (/ (- hsize
+                            (ly:output-def-lookup layout 'linewidth)) 2)))
+       
+       (bottom-edge (- vsize
+                      (ly:output-def-lookup layout 'bottommargin)))
+       (top-margin (ly:output-def-lookup layout 'topmargin))
+       )
+    
+    `((vsize . ,vsize)
+      (hsize . ,hsize)
+      (left-margin . ,leftmargin)
+      (top-margin . ,top-margin)
+      (bottom-edge . ,bottom-edge)
+      )))
+
 (define (make-page-stencil page)
   "Construct a stencil representing the page from LINES.
 
  Offsets is a list of increasing numbers. They must be negated to
 create offsets.
- "
+"
+
+  
 
   (let*
       ((p-book (page-property page 'paper-book))
+       (prop (lambda (sym) (page-property page sym)))
        (layout (ly:paper-book-paper p-book))
        (scopes (ly:paper-book-scopes p-book))
        (lines (page-lines page))
        (offsets (page-configuration page))
        (number (page-page-number page))
-       (last? (page-property page 'is-last))
-
-       (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))
@@ -224,29 +254,16 @@ create offsets.
                                                       (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-header page))
        
-       (foot (page-footer page))
-
-       (head-height (if (ly:stencil? head)
-                       (interval-length (ly:stencil-extent head Y))
+       (head-height (if (ly:stencil? (prop 'head-stencil))
+                       (interval-length (ly:stencil-extent (prop 'head-stencil) Y))
                        0.0))
 
-       (height-proc (ly:output-def-lookup layout 'page-music-height))
+       (page-stencil (ly:make-stencil
+                     '()
+                     (cons (prop 'left-margin) (prop 'hsize))
+                     (cons (- (prop 'top-margin)) 0)))
 
-       (page-stencil (ly:make-stencil '()
-                                     (cons leftmargin hsize)
-                                     (cons (- topmargin) 0)))
        (last-system #f)
        (last-y 0.0)
        (add-to-page (lambda (stencil y)
@@ -255,7 +272,7 @@ create offsets.
                                            (ly:stencil-translate stencil
                                                                  (cons
                                                                   system-xoffset
-                                                                  (- 0 head-height y topmargin))
+                                                                  (- 0 head-height y (prop 'top-margin)))
 
                                                                  )))))
        (add-system
@@ -278,21 +295,16 @@ create offsets.
                             (cdr (paper-system-staff-extents system))))))
            (set! last-system system)
            (set! last-y y))))
+       (head (prop 'head-stencil))
+       (foot (prop 'foot-stencil))
        )
 
-
     (if (annotate? layout)
        (begin
          (for-each (lambda (sys) (paper-system-annotate sys layout))
                    lines)
          (paper-system-annotate-last (car (last-pair lines)) layout)))
     
-    
-    (if #f
-       (display (list
-                 "leftmargin " leftmargin "rightmargin " rightmargin
-                 )))
-
     (set! page-stencil (ly:stencil-combine-at-edge
                        page-stencil Y DOWN
                        (if (and
@@ -304,16 +316,15 @@ create offsets.
 
     (map add-system (zip lines offsets))
 
-    (if (annotate? layout)
-       (set!
-        page-stencil
-        (annotate-space-left page-stencil layout
-                             (- bottom-edge
-                                (if (ly:stencil? foot)
-                                    (interval-length (ly:stencil-extent foot Y))
-                                    0)))
-        ))
+    (ly:prob-set-property! page 'bottom-system-edge
+                          (car (ly:stencil-extent page-stencil Y)))
+    (ly:prob-set-property! page 'space-left
+                          (car (ly:stencil-extent page-stencil Y)))
 
+    (if (annotate? layout)
+       (set! page-stencil
+             (ly:stencil-add page-stencil
+                             (annotate-space-left page))))
     
     (if (and (ly:stencil? foot)
             (not (ly:stencil-empty? foot)))
@@ -323,21 +334,19 @@ create offsets.
               (ly:stencil-translate
                foot
                (cons 0
-                     (+ (- bottom-edge)
+                     (+ (- (prop 'bottom-edge))
                         (- (car (ly:stencil-extent foot Y)))))))))
 
     (set! page-stencil
-         (ly:stencil-translate page-stencil (cons leftmargin 0)))
+         (ly:stencil-translate page-stencil (cons (prop 'left-margin) 0)))
 
     ;; annotation.
     (if (annotate? layout)
        (set! page-stencil (annotate-page layout page-stencil)))
-    
 
     page-stencil))
               
 
-
 (define (page-stencil page)
   (if (not (ly:stencil? (page-property page 'stencil)))
 
@@ -347,7 +356,7 @@ create offsets.
       (page-set-property! page 'stencil (make-page-stencil page)))
   (page-property page 'stencil))
 
-(define (page-height page)
+(define (calc-printable-height page)
   "Printable area for music and titles; matches default-page-make-stencil."
   (let*
       ((p-book (page-property page 'paper-book))
@@ -359,8 +368,8 @@ create offsets.
               (ly:output-def-lookup layout 'topmargin)
               (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 (page-property page 'head-stencil))
+       (foot (page-property page 'foot-stencil))
        (available
        (- h (if (ly:stencil? head)
                 (interval-length (ly:stencil-extent head Y))
@@ -371,3 +380,10 @@ create offsets.
     
     ;; (display (list "\n available" available head foot))
     available))
+
+(define (page-printable-height page)
+  (if (not (number? (page-property page 'printable-height)))
+      (page-set-property! page 'printable-height (calc-printable-height page)))
+  
+  (page-property page 'printable-height))
+
index f96a8b72432c4792a587f6f8a5f5b8ca98ea0e09..54bdeb032d8b2426c4f18c9c9952cc498fcea8e3 100644 (file)
    ly:set-option
    ly:set-point-and-click
    ly:spanner-broken-into
-   ly:spanner-get-bound
+   ly:spanner-bound
    ly:spanner?
    ly:stencil-add
    ly:stencil-aligned-to