2 ;; paper-system.scm -- implement paper-system objects.
4 ;; source file of the GNU LilyPond music typesetter
6 ;; (c) 2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
9 (define-module (scm paper-system))
13 (define-public (paper-system-title? system)
14 (equal? #t (ly:prob-property system 'is-title)
17 (define-public (paper-system-stencil system)
18 (ly:prob-property system 'stencil))
20 (define-public (paper-system-layout system)
22 ((g (paper-system-system-grob system)))
28 (define-public (paper-system-system-grob paper-system)
29 (ly:prob-property paper-system 'system-grob))
31 (define-public (paper-system-extent system axis)
32 (ly:stencil-extent (paper-system-stencil system) axis))
34 (define-public (paper-system-staff-extents ps)
35 (ly:prob-property ps 'staff-refpoint-extent '(0 . 0)))
37 (define-public (paper-system-annotate-last system layout)
39 ((bottomspace (ly:prob-property system 'bottom-space))
40 (y-extent (paper-system-extent system Y))
41 (x-extent (paper-system-extent system X))
42 (stencil (ly:prob-property system 'stencil))
44 (arrow (if (number? bottomspace)
45 (annotate-y-interval layout
47 (cons (- (car y-extent) bottomspace)
54 (ly:stencil-add stencil arrow)))
56 (set! (ly:prob-property system 'stencil)
60 ; TODO: annotate the spacing for every spaceable staff within the system.
61 (define-public (paper-system-annotate system next-system layout)
62 "Add arrows and texts to indicate which lengths are set."
63 (let* ((annotations (list))
64 (grob (ly:prob-property system 'system-grob))
65 (estimate-extent (if (ly:grob? grob)
66 (annotate-y-interval layout
68 (ly:grob-property grob 'pure-Y-extent)
71 (let* ((spacing-spec (cond ((and next-system
72 (paper-system-title? system)
73 (paper-system-title? next-system))
74 (ly:output-def-lookup layout 'between-title-spacing))
75 ((paper-system-title? system)
76 (ly:output-def-lookup layout 'after-title-spacing))
78 (paper-system-title? next-system))
79 (ly:output-def-lookup layout 'before-title-spacing))
81 (ly:output-def-lookup layout 'between-system-spacing))))
82 (last-staff-Y (car (paper-system-staff-extents system))))
85 (annotate-spacing-spec layout spacing-spec last-staff-Y (car (paper-system-extent system Y)))))
88 (stack-stencils X RIGHT 0.5
92 (if (not (null? annotations))
93 (set! (ly:prob-property system 'stencil)
95 (ly:prob-property system 'stencil)
97 (ly:stencil-expr annotations)
98 (ly:stencil-extent empty-stencil X)
99 (ly:stencil-extent empty-stencil Y)))))
100 (ly:prob-property system 'stencil)))