CVSROOT: /cvsroot/lilypond
Module name: lilypond
Branch:
Changes by: Han-Wen Nienhuys <[EMAIL PROTECTED]> 05/10/02 01:16:08
Modified files:
. : ChangeLog
Documentation/user: global.itely
input/mutopia/J.S.Bach: baerenreiter-sarabande.ly
input/regression: page-spacing.ly
lily : line-interface.cc paper-system-scheme.cc
scm : define-markup-commands.scm framework-eps.scm
framework-ps.scm framework-socket.scm
framework-tex.scm framework-texstr.scm
lily-library.scm music-functions.scm
page-layout.scm safe-lily.scm stencil.scm
Log message:
* scm/lily-library.scm (interval-translate): new function
(interval-center): new function.
* scm/page-layout.scm (paper-system-annotate): new function. Add
arrows for dimensions.
* scm/stencil.scm (dimension-arrows): new function.
* Documentation/user/global.itely (Vertical spacing): mention
annotatespacing
* input/regression/page-spacing.ly: add annotatespacing
* lily/paper-system-scheme.cc (LY_DEFINE): remove
ly:paper-system-{extent,stencil}
(LY_DEFINE): new function ly:paper-system-set-property!
* Documentation/user/global.itely (Paper size): explain how to add
sizes.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ChangeLog.diff?tr1=1.4148&tr2=1.4149&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/Documentation/user/global.itely.diff?tr1=1.36&tr2=1.37&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/input/mutopia/J.S.Bach/baerenreiter-sarabande.ly.diff?tr1=1.58&tr2=1.59&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/input/regression/page-spacing.ly.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/line-interface.cc.diff?tr1=1.26&tr2=1.27&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/paper-system-scheme.cc.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/define-markup-commands.scm.diff?tr1=1.115&tr2=1.116&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/framework-eps.scm.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/framework-ps.scm.diff?tr1=1.135&tr2=1.136&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/framework-socket.scm.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/framework-tex.scm.diff?tr1=1.87&tr2=1.88&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/framework-texstr.scm.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/lily-library.scm.diff?tr1=1.50&tr2=1.51&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/music-functions.scm.diff?tr1=1.150&tr2=1.151&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/page-layout.scm.diff?tr1=1.84&tr2=1.85&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/safe-lily.scm.diff?tr1=1.38&tr2=1.39&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/stencil.scm.diff?tr1=1.21&tr2=1.22&r1=text&r2=text
Patches:
Index: lilypond/ChangeLog
diff -u lilypond/ChangeLog:1.4148 lilypond/ChangeLog:1.4149
--- lilypond/ChangeLog:1.4148 Sat Oct 1 23:31:34 2005
+++ lilypond/ChangeLog Sun Oct 2 01:16:07 2005
@@ -1,6 +1,19 @@
2005-10-02 Han-Wen Nienhuys <[EMAIL PROTECTED]>
+ * scm/lily-library.scm (interval-translate): new function
+ (interval-center): new function.
+
+ * scm/page-layout.scm (paper-system-annotate): new function. Add
+ arrows for dimensions.
+
+ * scm/stencil.scm (dimension-arrows): new function.
+
+ * Documentation/user/global.itely (Vertical spacing): mention
annotatespacing
+
+ * input/regression/page-spacing.ly: add annotatespacing
+
* lily/paper-system-scheme.cc (LY_DEFINE): remove
ly:paper-system-{extent,stencil}
+ (LY_DEFINE): new function ly:paper-system-set-property!
* Documentation/user/global.itely (Paper size): explain how to add
sizes.
Index: lilypond/Documentation/user/global.itely
diff -u lilypond/Documentation/user/global.itely:1.36
lilypond/Documentation/user/global.itely:1.37
--- lilypond/Documentation/user/global.itely:1.36 Sat Oct 1 23:06:53 2005
+++ lilypond/Documentation/user/global.itely Sun Oct 2 01:16:08 2005
@@ -340,6 +340,7 @@
Increasing this will put systems whose bounding boxes almost touch
farther apart.
+
@cindex @code{horizontalshift}
@item horizontalshift
All systems (including titles and system separators) are shifted by
@@ -528,6 +529,16 @@
The vertical spacing on a page can also be changed for each system
individually.
Some examples are found in the example file
@inputfileref{input/regression/,page-spacing.ly}.
+
+When setting @code{annotatespacing} in the @code{\paper} block LilyPond
+will graphically indicate the dimensions of properties that may be set
+for page spacing,
+
[EMAIL PROTECTED]
+\paper { annotatespacing = ##t }
+{ c4 }
[EMAIL PROTECTED] lilypond
+
@seealso
Index: lilypond/input/mutopia/J.S.Bach/baerenreiter-sarabande.ly
diff -u lilypond/input/mutopia/J.S.Bach/baerenreiter-sarabande.ly:1.58
lilypond/input/mutopia/J.S.Bach/baerenreiter-sarabande.ly:1.59
--- lilypond/input/mutopia/J.S.Bach/baerenreiter-sarabande.ly:1.58 Wed Jul
20 10:13:46 2005
+++ lilypond/input/mutopia/J.S.Bach/baerenreiter-sarabande.ly Sun Oct 2
01:16:08 2005
@@ -174,6 +174,8 @@
linewidth =183.5 \mm
betweensystemspace = 25\mm
betweensystempadding = 0\mm
+
+%% annotatespacing = ##t
}
\book {
Index: lilypond/input/regression/page-spacing.ly
diff -u lilypond/input/regression/page-spacing.ly:1.2
lilypond/input/regression/page-spacing.ly:1.3
--- lilypond/input/regression/page-spacing.ly:1.2 Tue Sep 27 11:33:27 2005
+++ lilypond/input/regression/page-spacing.ly Sun Oct 2 01:16:08 2005
@@ -8,6 +8,7 @@
setting properties on individual object. @code{\override} may still be
used for global overrides.
+By setting @code{annotatespacing}, we can see the effect of each property.
"
}
@@ -66,6 +67,7 @@
}
\paper {
raggedlastbottom = ##f
+ annotatespacing = ##t
betweensystemspace = 1.0
#(set! text-font-defaults
(acons
Index: lilypond/lily/line-interface.cc
diff -u lilypond/lily/line-interface.cc:1.26
lilypond/lily/line-interface.cc:1.27
--- lilypond/lily/line-interface.cc:1.26 Fri Aug 12 00:04:45 2005
+++ lilypond/lily/line-interface.cc Sun Oct 2 01:16:08 2005
@@ -146,4 +146,10 @@
"produced. If @code{dash-fraction} is negative, the line is made
"
"transparent.",
- "dash-period dash-fraction thickness style arrow-length
arrow-width")
+ /* properties */
+ "dash-period "
+ "dash-fraction "
+ "thickness "
+ "style "
+ "arrow-length "
+ "arrow-width")
Index: lilypond/lily/paper-system-scheme.cc
diff -u lilypond/lily/paper-system-scheme.cc:1.9
lilypond/lily/paper-system-scheme.cc:1.10
--- lilypond/lily/paper-system-scheme.cc:1.9 Sat Oct 1 23:31:34 2005
+++ lilypond/lily/paper-system-scheme.cc Sun Oct 2 01:16:08 2005
@@ -8,7 +8,16 @@
#include "paper-system.hh"
+LY_DEFINE (ly_paper_system_set_property_x, "ly:paper-system-set-property!",
+ 2, 1, 0, (SCM system, SCM sym, SCM value),
+ "Set property @var{sym} of @var{system} to @var{value}")
+{
+ Paper_system *ps = unsmob_paper_system (system);
+ SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
+ ps->internal_set_property (sym, value);
+ return SCM_UNSPECIFIED;
+}
LY_DEFINE (ly_paper_system_property, "ly:paper-system-property",
2, 1, 0, (SCM system, SCM sym, SCM dfault),
Index: lilypond/scm/define-markup-commands.scm
diff -u lilypond/scm/define-markup-commands.scm:1.115
lilypond/scm/define-markup-commands.scm:1.116
--- lilypond/scm/define-markup-commands.scm:1.115 Sun Sep 4 11:36:40 2005
+++ lilypond/scm/define-markup-commands.scm Sun Oct 2 01:16:08 2005
@@ -267,7 +267,7 @@
(let* ((output (ly:score-embedded-format score layout)))
(if (ly:music-output? output)
- (ly:paper-system-stencil
+ (paper-system-stencil
(vector-ref (ly:paper-score-paper-systems output) 0))
(begin
(ly:warning (_"no systems found in \\score markup, does it have a
\\layout block?"))
@@ -1224,3 +1224,9 @@
(apply ly:stencil-add
(append stacked brackets))))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; size indications arrow
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
Index: lilypond/scm/framework-eps.scm
diff -u lilypond/scm/framework-eps.scm:1.14 lilypond/scm/framework-eps.scm:1.15
--- lilypond/scm/framework-eps.scm:1.14 Mon Sep 5 13:52:40 2005
+++ lilypond/scm/framework-eps.scm Sun Oct 2 01:16:08 2005
@@ -98,7 +98,7 @@
(output-scopes scopes fields basename)
(dump-stencils-as-EPSes
- (map ly:paper-system-stencil (ly:paper-book-systems book))
+ (map paper-system-stencil (ly:paper-book-systems book))
book
basename))
Index: lilypond/scm/framework-ps.scm
diff -u lilypond/scm/framework-ps.scm:1.135 lilypond/scm/framework-ps.scm:1.136
--- lilypond/scm/framework-ps.scm:1.135 Tue Sep 27 10:50:17 2005
+++ lilypond/scm/framework-ps.scm Sun Oct 2 01:16:08 2005
@@ -514,7 +514,7 @@
(dump-stencil-as-EPS
paper
(stack-stencils Y DOWN 0.0
- (map ly:paper-system-stencil (reverse to-dump-systems)))
+ (map paper-system-stencil (reverse to-dump-systems)))
(format "~a.preview" basename)
#t)
@@ -532,7 +532,7 @@
(not (paper-system-title? x))) systems))
(dump-me
(stack-stencils Y DOWN 0.0
- (map ly:paper-system-stencil
+ (map paper-system-stencil
(append titles (list non-title))))))
(output-scopes scopes fields basename)
(dump-stencil-as-EPS paper dump-me
Index: lilypond/scm/framework-socket.scm
diff -u lilypond/scm/framework-socket.scm:1.2
lilypond/scm/framework-socket.scm:1.3
--- lilypond/scm/framework-socket.scm:1.2 Tue Jul 12 20:46:24 2005
+++ lilypond/scm/framework-socket.scm Sun Oct 2 01:16:08 2005
@@ -23,7 +23,7 @@
(if (pair? systems)
(ly:outputter-dump-stencil outputter
- (ly:paper-system-stencil (car systems))))
+ (paper-system-stencil (car systems))))
))
(define-public output-classic-framework output-framework)
Index: lilypond/scm/framework-tex.scm
diff -u lilypond/scm/framework-tex.scm:1.87 lilypond/scm/framework-tex.scm:1.88
--- lilypond/scm/framework-tex.scm:1.87 Sat Oct 1 23:31:34 2005
+++ lilypond/scm/framework-tex.scm Sun Oct 2 01:16:08 2005
@@ -222,7 +222,7 @@
(ly:number->string
(interval-length (paper-system-extent line Y)))))
- (ly:outputter-dump-stencil putter (ly:paper-system-stencil line))
+ (ly:outputter-dump-stencil putter (paper-system-stencil line))
(ly:outputter-dump-string
putter
(if last?
Index: lilypond/scm/framework-texstr.scm
diff -u lilypond/scm/framework-texstr.scm:1.10
lilypond/scm/framework-texstr.scm:1.11
--- lilypond/scm/framework-texstr.scm:1.10 Mon Jul 11 11:51:43 2005
+++ lilypond/scm/framework-texstr.scm Sun Oct 2 01:16:08 2005
@@ -40,7 +40,7 @@
(ly:outputter-dump-string outputter (header basename))
(for-each
(lambda (system)
- (ly:outputter-dump-stencil outputter (ly:paper-system-stencil system)))
+ (ly:outputter-dump-stencil outputter (paper-system-stencil system)))
lines)
(ly:outputter-dump-string outputter (footer))))
Index: lilypond/scm/lily-library.scm
diff -u lilypond/scm/lily-library.scm:1.50 lilypond/scm/lily-library.scm:1.51
--- lilypond/scm/lily-library.scm:1.50 Sat Oct 1 23:31:34 2005
+++ lilypond/scm/lily-library.scm Sun Oct 2 01:16:08 2005
@@ -120,8 +120,11 @@
(equal? #t (ly:paper-system-property system 'is-title)
))
+(define-public (paper-system-stencil system)
+ (ly:paper-system-property system 'stencil))
+
(define-public (paper-system-extent system axis)
- (ly:stencil-extent (ly:paper-system-property system 'stencil) axis))
+ (ly:stencil-extent (paper-system-stencil system) axis))
;;;;;;;;;;;;;;;;
;; alist
@@ -322,6 +325,16 @@
(define-public interval-start car)
(define-public interval-end cdr)
+
+(define-public (interval-center x)
+ "Center the number-pair X, when an interval"
+ (/ (+ (car x) (cdr x)) 2))
+
+(define-public interval-start car)
+(define-public interval-end cdr)
+(define-public (interval-translate iv amount)
+ (cons (+ amount (car iv))
+ (+ amount (cdr iv))))
(define (other-axis a)
(remainder (+ a 1) 2))
Index: lilypond/scm/music-functions.scm
diff -u lilypond/scm/music-functions.scm:1.150
lilypond/scm/music-functions.scm:1.151
--- lilypond/scm/music-functions.scm:1.150 Thu Jul 21 14:45:55 2005
+++ lilypond/scm/music-functions.scm Sun Oct 2 01:16:08 2005
@@ -16,9 +16,15 @@
(make-procedure-with-setter ly:music-property
ly:music-set-property!))
+
+;; TODO move this
(define-public ly:grob-property
(make-procedure-with-setter ly:grob-property
ly:grob-set-property!))
+
+(define-public ly:paper-system-property
+ (make-procedure-with-setter ly:paper-system-property
+ ly:paper-system-set-property!))
(define-public (music-map function music)
"Apply @var{function} to @var{music} and all of the music it contains.
Index: lilypond/scm/page-layout.scm
diff -u lilypond/scm/page-layout.scm:1.84 lilypond/scm/page-layout.scm:1.85
--- lilypond/scm/page-layout.scm:1.84 Sat Oct 1 23:31:34 2005
+++ lilypond/scm/page-layout.scm Sun Oct 2 01:16:08 2005
@@ -37,6 +37,99 @@
(ly:paper-system-property ps 'refpoint-Y-extent '(0 . 0)))
+
+(define (paper-system-annotate system layout)
+ "Add arrows and texts to indicate which lengths are set."
+ (let*
+ ((annotations (ly:make-stencil '() (cons 0 2) (cons 0 0)))
+ (text-props (cons
+ '((font-size . -3)
+ (font-family . typewriter)
+ )
+ (layout-extract-page-properties layout)))
+ (append-stencil
+ (lambda (a b)
+ (ly:stencil-combine-at-edge a X RIGHT b 0.5 0)))
+
+ (annotate-property
+ (lambda (name extent is-length?)
+
+ ;; do something sensible for 0,0 intervals.
+ (set! extent (interval-widen extent 0.001))
+ (let*
+ ((annotation (interpret-markup
+ layout text-props
+ (make-column-markup
+ (list
+ (make-whiteout-markup (make-simple-markup name))
+ (make-whiteout-markup
+ (make-simple-markup
+ (if is-length?
+ (format "~$" (interval-length extent))
+ (format "(~$,~$)" (car extent) (cdr
extent)))))))))
+
+
+ (arrows
+ (ly:stencil-translate-axis
+ (dimension-arrows (cons 0 (interval-length extent)))
+ (interval-start extent) Y))
+ )
+
+ (set! annotation
+ (ly:stencil-aligned-to annotation Y CENTER))
+ (set! annotation
+ (ly:stencil-translate annotation (cons 0 (interval-center
extent))))
+
+
+ (set! annotations
+ (append-stencil annotations
+ (append-stencil arrows annotation))))))
+
+
+ (bbox-extent (paper-system-extent system Y))
+ (refp-extent (ly:paper-system-property system 'refpoint-Y-extent))
+ (next-space (ly:paper-system-property system 'next-space
+ (ly:output-def-lookup layout
'betweensystemspace)
+ ))
+ (next-padding (ly:paper-system-property system 'next-padding
+ (ly:output-def-lookup layout
'betweensystempadding)
+ ))
+
+ )
+
+ (if (number-pair? bbox-extent)
+ (annotate-property "Y-extent"
+ bbox-extent #f))
+
+ ;; titles don't have a refpoint-Y-extent.
+ (if (number-pair? refp-extent)
+ (begin
+ (annotate-property "refpoint-Y-extent"
+ refp-extent #f)
+
+ (annotate-property "next-space"
+ (interval-translate (cons (- next-space) 0) (car
refp-extent))
+ #t)))
+
+
+ (annotate-property "next-padding"
+ (interval-translate (cons (- next-padding) 0) (car
bbox-extent))
+ #t)
+
+
+ (set! (ly:paper-system-property system 'stencil)
+ (ly:stencil-add
+ (ly:paper-system-property system 'stencil)
+ (ly:make-stencil
+ (ly:stencil-expr annotations)
+ (ly:stencil-extent empty-stencil X)
+ (ly:stencil-extent empty-stencil Y)
+ )))
+
+ ))
+
+
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (page-headfoot layout scopes number sym sepsym dir last?)
@@ -85,6 +178,9 @@
create offsets.
"
+ (if (eq? #t (ly:output-def-lookup layout 'annotatespacing))
+ (for-each (lambda (sys) (paper-system-annotate sys layout))
+ lines))
(let* ((topmargin (ly:output-def-lookup layout 'topmargin))
;; TODO: naming vsize/hsize not analogous to TeX.
@@ -135,7 +231,7 @@
(add-system
(lambda (stencil-position)
(let* ((system (car stencil-position))
- (stencil (ly:paper-system-stencil system))
+ (stencil (paper-system-stencil system))
(y (cadr stencil-position))
(is-title (paper-system-title?
(car stencil-position))))
Index: lilypond/scm/safe-lily.scm
diff -u lilypond/scm/safe-lily.scm:1.38 lilypond/scm/safe-lily.scm:1.39
--- lilypond/scm/safe-lily.scm:1.38 Sat Oct 1 23:31:34 2005
+++ lilypond/scm/safe-lily.scm Sun Oct 2 01:16:08 2005
@@ -100,7 +100,6 @@
ly:layout-def?
ly:paper-get-font
ly:paper-get-number
- ly:paper-system-stencil
ly:paper-system?
ly:output-def-lookup
ly:parse-string
Index: lilypond/scm/stencil.scm
diff -u lilypond/scm/stencil.scm:1.21 lilypond/scm/stencil.scm:1.22
--- lilypond/scm/stencil.scm:1.21 Mon Jul 11 20:41:04 2005
+++ lilypond/scm/stencil.scm Sun Oct 2 01:16:08 2005
@@ -115,3 +115,50 @@
(c `(white-text ,(* 2 scale) ,text)))
;;urg -- extent is not from ps font, but we hope it's close
(ly:make-stencil c (car b) (cdr b))))
+
+(define-public (dimension-arrows destination)
+ "Draw twosided arrow from here to @var{destination}"
+
+ (let*
+ ((e_x 1+0i)
+ (e_y 0+1i)
+ (rotate (lambda (z ang)
+ (* (make-polar 1 ang)
+ z)))
+ (complex-to-offset (lambda (z)
+ (list (real-part z) (imag-part z))))
+
+ (z-dest (+ (* e_x (car destination)) (* e_y (cdr destination))))
+ (triangle-points '(-1+0.25i
+ 0
+ -1-0.25i))
+ (p1s (map (lambda (z)
+ (+ z-dest (rotate z (angle z-dest))))
+ triangle-points))
+ (p2s (map (lambda (z)
+ (rotate z (angle (- z-dest))))
+ triangle-points))
+ (null (cons 0 0))
+ (arrow-1
+ (ly:make-stencil
+ `(polygon (quote ,(concatenate (map complex-to-offset p1s)))
+ 0.0
+ #t) null null))
+ (arrow-2
+ (ly:make-stencil
+ `(polygon (quote ,(concatenate (map complex-to-offset p2s)))
+ 0.0
+ #t) null null ) )
+ (line (ly:make-stencil
+ `(draw-line 0.1 0 0
+ ,(car destination)
+ ,(cdr destination))
+ (cons (min 0 (car destination))
+ (min 0 (cdr destination)))
+ (cons (max 0 (car destination))
+ (max 0 (cdr destination)))))
+
+ (result (ly:stencil-add arrow-2 arrow-1 line)))
+
+
+ result))
_______________________________________________
Lilypond-cvs mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-cvs