]> git.donarmstrong.com Git - lilypond.git/blob - scm/framework-svg.scm
* scm/output-svg.scm:
[lilypond.git] / scm / framework-svg.scm
1 ;;;; framework-svg.scm --
2 ;;;;
3 ;;;;  source file of the GNU LilyPond music typesetter
4 ;;;; 
5 ;;;; (c)  2004 Jan Nieuwenhuizen <janneke@gnu.org>
6
7 (define-module (scm framework-svg))
8
9 (use-modules (guile) (lily) (scm output-svg))
10 (use-modules (srfi srfi-2) (ice-9 regex))
11
12 ;; FIXME: 0.62 to get paper size right
13 (define output-scale (* 0.62 scale-to-unit))
14
15 (define-public (output-framework outputter book scopes fields basename)
16   (let* ((paper (ly:paper-book-paper book))
17          (pages (ly:paper-book-pages book))
18          (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t))
19          (page-number (1- (ly:output-def-lookup paper 'firstpagenumber)))
20          (page-count (length pages))
21          (hsize (ly:output-def-lookup paper 'hsize))
22          (vsize (ly:output-def-lookup paper 'vsize))
23          (page-width (inexact->exact (ceiling (* output-scale hsize))))
24          (page-height (inexact->exact (ceiling (* output-scale vsize))))
25          (page-set? (> page-count 1)))
26     
27    (ly:outputter-dump-string
28     outputter
29     (string-append
30      (eo 'svg
31          '(xmlns . "http://www.w3.org/2000/svg")
32          '(version . "1.2")
33          `(width . ,(format #f "~smm" page-width))
34          `(height . ,(format #f "~smm" page-height)))
35      ;; FIXME: only use pages if there are more than one, pageSet is
36      ;; not supported by all SVG applications yet.
37      (if page-set? (eo 'pageSet) "")
38      (eo 'g)))
39        
40   (for-each
41    (lambda (page)
42      (set! page-number (1+ page-number))
43      (dump-page outputter page page-number page-count landscape? page-set?))
44    pages)
45   
46   (if page-set? (eo 'pageSet) "")
47   (ly:outputter-dump-string
48    outputter
49    (string-append
50     (ec 'g)
51     (if page-set? (ec 'pageSet) "")
52     (ec 'svg)))))
53
54 (define (dump-page outputter page page-number page-count landscape? page-set?)
55   ;; FIXME:landscape
56   (ly:outputter-dump-string
57    outputter (comment (format #f "Page: ~S/~S" page-number page-count)))
58   (if page-set? (ly:outputter-dump-string outputter (eo 'page)))
59   (ly:outputter-dump-string outputter (string-append (eo 'g)))
60   (ly:outputter-dump-stencil outputter page)
61   (ly:outputter-dump-string outputter (string-append (ec 'g)))
62   (if page-set? (ly:outputter-dump-string outputter (ec 'page))))