]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4918: Fix CFF flavored font embedding for multiple output
authorMasamichi Hosoda <trueroad@trueroad.jp>
Mon, 4 Jul 2016 14:22:54 +0000 (23:22 +0900)
committerMasamichi Hosoda <trueroad@trueroad.jp>
Mon, 11 Jul 2016 13:55:54 +0000 (22:55 +0900)
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.

scm/framework-ps.scm

index 8221e5eab35229e1e2f2e558ed1ca46e1ca3c152..bc6599c70bae1d3390c1e92195340c0e96b67753 100644 (file)
 (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)