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.
/* 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++)
(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)
""))))
(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"))))
+