]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/main.cc (setup_paths): Add svg to search path.
authorjanneke <janneke>
Sat, 18 Dec 2004 16:13:45 +0000 (16:13 +0000)
committerjanneke <janneke>
Sat, 18 Dec 2004 16:13:45 +0000 (16:13 +0000)
* scm/output-svg.scm:
* scm/framework-svg.scm: Add pageSet.  Update.
(dump-fonts): New function.
(output-framework): Use it.

ChangeLog
lily/main.cc
scm/framework-ps.scm
scm/framework-svg.scm

index 2d52dbfcafaf5db2f3b9f9e945890ca781da1542..7b7bc00882a3d5ccb99d138082774e7f1aa60408 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,11 @@
 2004-12-18  Jan Nieuwenhuizen  <janneke@gnu.org>
 
+       * lily/main.cc (setup_paths): Add svg to search path.
+
        * scm/output-svg.scm:
        * scm/framework-svg.scm: Add pageSet.  Update.
+       (dump-fonts): New function.
+       (output-framework): Use it.
 
        * mf/GNUmakefile: 
        * buildscripts/gen-bigcheese-scripts.py: Also generate SVG font.
index ba2ba61a6e91969d39c9e9159a1b172d82b36464..fd1ed22fa9da363bb24a18814d1285072017b066 100644 (file)
@@ -226,7 +226,7 @@ setup_paths ()
 
   /* Adding mf/out make lilypond unchanged source directory, when setting
      LILYPONDPREFIX to lilypond-x.y.z */
-  char *suffixes[] = {"ly", "otf", "mf/out", "scm", "tfm", "ps", 0};
+  char *suffixes[] = {"ly", "otf", "mf/out", "scm", "tfm", "ps", "svg", 0};
 
   for (unsigned i = 0; prefix_directory[i]; i++)
     for (char **s = suffixes; *s; s++)
index fb779b2645228546649376859830463ef394500a..a7a61125b816378cf3b6c23f73adb19db256deb4 100644 (file)
                  (let* ((cffname (string-append x ".cff"))
                         (aname (string-append x ".pfa"))
                         (bname (string-append x ".pfb"))
-                        (cffpath (ly:find-file cffname))
-                        (apath (ly:kpathsea-find-file aname))
-                        (bpath (ly:kpathsea-find-file bname)))
+                        (cff-file-name (ly:find-file cffname))
+                        (a-file-name (ly:kpathsea-find-file aname))
+                        (b-file-name (ly:kpathsea-find-file bname)))
                    (cond
-                    (cffpath (ps-embed-cff (ly:gulp-file cffpath) x 0))
-                    (apath (ly:gulp-file apath))
-                    (bpath (ly:pfb->pfa bpath))
+                    (cff-file-name (ps-embed-cff (ly:gulp-file cff-file-name) x 0))
+                    (a-file-name (ly:gulp-file a-file-name))
+                    (b-file-name (ly:pfb->pfa b-file-name))
                     (else
                      (ly:warn "cannot find T42/PFA/PFB font ~S" x)
                      ""))))
index 83af347a709c61df3f09e373080434e547b06ad6..af2ffd8a1a211fff970459e476f546d75ef3d1b5 100644 (file)
@@ -7,7 +7,7 @@
 (define-module (scm framework-svg))
 
 (use-modules (guile) (lily) (scm output-svg))
-(use-modules (srfi srfi-2) (ice-9 regex))
+(use-modules (srfi srfi-1) (srfi srfi-2) (srfi srfi-13) (ice-9 regex))
 
 ;; FIXME: 0.62 to get paper size right
 (define output-scale (* 0.62 scale-to-unit))
     
    (ly:outputter-dump-string
     outputter
-    (string-append
      (eo 'svg
         '(xmlns . "http://www.w3.org/2000/svg")
         '(version . "1.2")
         `(width . ,(format #f "~smm" page-width))
-        `(height . ,(format #f "~smm" page-height)))
+        `(height . ,(format #f "~smm" page-height))))
+   
+   (ly:outputter-dump-string outputter (dump-fonts outputter paper))
+   (ly:outputter-dump-string
+    outputter
+    (string-append
      ;; FIXME: only use pages if there are more than one, pageSet is
      ;; not supported by all SVG applications yet.
      (if page-set? (eo 'pageSet) "")
   (ly:outputter-dump-stencil outputter page)
   (ly:outputter-dump-string outputter (string-append (ec 'g)))
   (if page-set? (ly:outputter-dump-string outputter (ec 'page))))
+
+(define (embed-font string)
+  (let ((start (string-contains string "<defs>"))
+       (end (string-contains string "</defs>")))
+    (substring string (+ start 7) (- end 1))))
+
+(define (dump-fonts outputter paper)
+  (let* ((fonts (ly:paper-fonts paper))
+        (font-names (uniq-list (sort (map ly:font-file-name fonts) string<?)))
+        (svgs (map
+               (lambda (x)
+                 (let ((file-name (ly:find-file (string-append x ".svg"))))
+                   (if file-name (embed-font (ly:gulp-file file-name))
+                       (begin (ly:warn "cannot find SVG font ~S" x) ""))))
+               (filter string? font-names))))
+    (entity 'defs (string-join svgs "\n"))))
+