From: Masamichi Hosoda Date: Mon, 4 Jul 2016 14:22:54 +0000 (+0900) Subject: Issue 4918: Fix CFF flavored font embedding for multiple output X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=4164bfb62950c46517a21ad1d80131ce27868aa1;p=lilypond.git Issue 4918: Fix CFF flavored font embedding for multiple output For multiple output (e.g. `-dbackend=eps`), conflict checking needs to be done within each output. Otherwise, the font which is embedded in the prior output is not embedded in the subsequent output. --- diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm index 8221e5eab3..bc6599c70b 100644 --- a/scm/framework-ps.scm +++ b/scm/framework-ps.scm @@ -248,27 +248,32 @@ (define check-conflict-and-embed-cff (let ((font-list '())) (lambda (name file-name font-index) - (let* ((name-symbol (string->symbol name)) - (args-filename-offset - (cons file-name (ly:get-cff-offset file-name font-index))) - (found-filename-offset (assq name-symbol font-list))) - (if found-filename-offset - (begin - (if (equal? args-filename-offset (cdr found-filename-offset)) - (ly:debug - (_ "CFF font `~a' already embedded, skipping.") - name) - (ly:warning - (_ "Different CFF fonts which have the same name `~a' has been detected. The font cannot be embedded.") - name)) - "") - (begin - (ly:debug - (_ "Embedding CFF font `~a'") - name) - (set! font-list - (acons name-symbol args-filename-offset font-list)) - (ps-embed-cff (ly:otf->cff file-name font-index) name 0))))))) + (if name + (let* ((name-symbol (string->symbol name)) + (args-filename-offset + (cons file-name (ly:get-cff-offset file-name font-index))) + (found-filename-offset (assq name-symbol font-list))) + (if found-filename-offset + (begin + (if (equal? args-filename-offset (cdr found-filename-offset)) + (ly:debug + (_ "CFF font `~a' already embedded, skipping.") + name) + (ly:warning + (_ "Different CFF fonts which have the same name `~a' has been detected. The font cannot be embedded.") + name)) + "") + (begin + (ly:debug (_ "Embedding CFF font `~a'.") name) + (set! font-list + (acons name-symbol args-filename-offset font-list)) + (ps-embed-cff (ly:otf->cff file-name font-index) name 0)))) + (begin + (ly:debug (_ "Initializing embedded CFF font list.")) + (set! font-list '())))))) + +(define (initialize-font-embedding) + (check-conflict-and-embed-cff #f #f #f)) (define (write-preamble paper load-fonts? port) (define (internal-font? font-name-filename) @@ -575,6 +580,7 @@ mark {ly~a_stream} /CLOSE pdfmark (page-number (1- (ly:output-def-lookup paper 'first-page-number))) (page-count (length page-stencils)) (port (ly:outputter-port outputter))) + (initialize-font-embedding) (if (ly:get-option 'clip-systems) (clip-system-EPSes basename book)) (if (ly:get-option 'dump-signatures) @@ -655,6 +661,7 @@ mark {ly~a_stream} /CLOSE pdfmark (rounded-bbox (to-rounded-bp-box bbox)) (port (ly:outputter-port outputter)) (header (eps-header paper rounded-bbox load-fonts))) + (initialize-font-embedding) (display header port) (write-preamble paper load-fonts port) (display "/mark_page_link { pop pop pop pop pop } bind def\n" port)