From: Masamichi Hosoda <trueroad@trueroad.jp>
Date: Sun, 19 Jun 2016 02:59:45 +0000 (+0900)
Subject: Issue 4901: Improve `-dgs-load-fonts` option for OTC fonts
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=9b5a8ef057768b72d63e0e87667a953763e05272;p=lilypond.git

Issue 4901: Improve `-dgs-load-fonts` option for OTC fonts

`-dgs-load-fonts` loads fonts via Ghostscript.
However, Ghostscript could not load
OpenType/CFF Collection (OTC) fonts by this way.
http://bugs.ghostscript.com/show_bug.cgi?id=696808

This commit lets `-dgs-load-fonts` loads the OTC fonts
in a way that is not via Ghostscript.
---

diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm
index ae63cb91e9..42b60b4042 100644
--- a/scm/framework-ps.scm
+++ b/scm/framework-ps.scm
@@ -257,6 +257,18 @@
                             (ly:get-option 'datadir)))))
 
   (define (load-font-via-GS font-name-filename)
+    (define (is-collection-font? file-name)
+      (let ((port (open-file file-name "rb")))
+        (if (eq? (read-char port) #\t)
+            (if (eq? (read-char port) #\t)
+                (if (eq? (read-char port) #\c)
+                    (if (eq? (read-char port) #\f)
+                        #t
+                        #f)
+                    #f)
+                #f)
+            #f)))
+
     (define (ps-load-file file-name)
       (if (string? file-name)
           (if (string-contains file-name (ly:get-option 'datadir))
@@ -280,7 +292,12 @@
         (ly:warning (_ "Font ~a cannot be loaded via Ghostscript because its font-index (~a) is not zero.")
                     name font-index)
         (load-font font-name-filename))
-       ;; TODO: Check OTC fonts.
+       ((and (string? bare-file-name)
+             (eq? (ly:get-font-format bare-file-name font-index) 'CFF)
+             (is-collection-font? bare-file-name))
+        (ly:warning (_ "Font ~a cannot be loaded via Ghostscript because it is an OpenType/CFF (OTC) font.")
+                    name)
+        (load-font font-name-filename))
        ;; TODO: Check TrueType fonts that do not have glyph names.
        (else
         (cons name