]> git.donarmstrong.com Git - lilypond.git/blob - scm/framework-svg.scm
* scm/framework-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))
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
26     (ly:outputter-dump-string outputter xml-header)
27     (ly:outputter-dump-string
28      outputter
29      (comment "Created with GNU LilyPond (http://lilypond.org)"))
30     (ly:outputter-dump-string
31      outputter (format #f "<svg id='svg1' width='~smm' height='~smm'>\n"
32                        page-width page-height))
33     (ly:outputter-dump-string
34      outputter "<g transform='translate (10, 10) scale (1)'>\n")
35       
36 ;   (for-each
37 ;    (lambda (x)
38 ;      (ly:outputter-dump-string outputter x))
39 ;    (cons
40 ;     (page-header paper page-count)
41 ;     (preamble paper)))
42   
43   (for-each
44    (lambda (page)
45      (set! page-number (1+ page-number))
46      (dump-page outputter page page-number page-count landscape?))
47    pages)
48   (ly:outputter-dump-string outputter "\n</g>\n</svg>\n")))
49
50 (define (comment s)
51   (string-append "<!-- " s " !-->\n"))
52
53 ;; FIXME: gulp from file
54 (define xml-header
55   "<?xml version='1.0' encoding='UTF-8' standalone='no'?>
56 <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 20010904//EN'
57 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
58 ")
59
60 (define (dump-page outputter page page-number page-count landscape?) 
61   (ly:outputter-dump-string
62    outputter
63    (string-append
64     (comment (format #f "Page: ~S/~S" page-number page-count))
65     ;;(format #f "<g transform='translate (0, ~f)'>\n" (* output-scale y))))
66     "<g>\n"))
67
68   ;; FIXME:landscape
69   (ly:outputter-dump-stencil outputter page)
70
71   (ly:outputter-dump-string
72    outputter
73    (string-append
74     (comment (format #f "End Page ~S/~S" page-number page-count))
75     "</g>\n")))