]> git.donarmstrong.com Git - lilypond.git/commitdiff
* ttftool/parse.c (readNamingTable): handle Apple/8bit encoding too.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 7 Jun 2005 13:34:02 +0000 (13:34 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 7 Jun 2005 13:34:02 +0000 (13:34 +0000)
* scm/framework-ps.scm (font-file-as-ps-string): new function.
(handle-macfont): new function. Call fondu for Native mac fonts.

ChangeLog
scm/framework-ps.scm
scm/lily.scm
ttftool/parse.c

index f71c4bf79592494f6c7cf2e291d9e8019c9c9710..6d719d18aae11cedea434a9b65184adb94e77e2e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2005-06-07  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+       * ttftool/parse.c (readNamingTable): handle Apple/8bit encoding too.
+
+       * scm/framework-ps.scm (font-file-as-ps-string): new function.
+       (handle-macfont): new function. Call fondu for Native mac fonts.
+
        * scm/define-markup-commands.scm (fill-line): handle text-widths =
        '() case.
 
index 358eecfa6a023b0295c616dd69c75c510e66e9d8..6251246559664c2c2e497c3c204ab5b6a94c9e76 100644 (file)
         (ly:warning (_ "don't know how to embed ~S=~S") name file-name)
          "")))))
 
+  ;; ugh.  posix /windows/mingw? 
+  (define (path-join a b)
+    (if (equal? a "")
+       b
+       (string-append a "/" b)))
+    
+  (define (dir-listing dir-name)
+    (define (dir-helper dir lst)
+      (let ((e (readdir dir)))
+       (if (eof-object? e) lst (dir-helper dir (cons e lst)))))
+    (reverse (dir-helper (opendir dir-name) '())))
+      
+  (define (handle-mac-font name filename)
+    (let*
+       ((dir-name  (tmpnam))
+        (files '())
+        (status 0)
+        (embed ""))
+
+
+      (display (list filename name))
+      (mkdir dir-name #o700)
+
+      (set! status (system
+                   (format "cd ~a && fondu -force ~a" dir-name filename)))
+
+      (if (!= status 0)
+         (ly:error "Fondu failed."))
+      
+      (set! files (dir-listing dir-name))
+
+      (for-each
+       (lambda (f)
+        (if (string-match (string-append name "\\.") f)
+            (set! embed
+                  (font-file-as-ps-string name (path-join dir-name f))))
+            
+        (if (or (equal? "." f) 
+                (equal? ".." f))
+            #t
+            (delete-file (path-join dir-name f))))
+       files)
+      (rmdir dir-name)
+      embed))
+
+    (define (font-file-as-ps-string name file-name)
+      (cond
+       ((and file-name (string-match "\\.pfa" file-name))
+       (cached-file-contents file-name))
+       ((and file-name (string-match "\\.pfb" file-name))
+       (ly:pfb->pfa file-name))
+       ((and file-name (string-match "\\.ttf" file-name))
+       (ly:ttf->pfa file-name))
+       ((and file-name (string-match "\\.otf" file-name))
+       (ps-embed-cff (ly:otf->cff file-name) name 0))
+       ((and file-name (string-match "\\.ttf" file-name))
+       (ly:ttf->pfa file-name))
+       (else
+       (ly:warning (_ "don't know how to embed ~S=~S") name file-name)
+       "")
+       ))
+      
   (define (load-font font-name-filename)
     (let* ((font (car font-name-filename))
           (name (cadr font-name-filename))
       (cons
        (munge-lily-font-name name)
        (cond
-       ((and bare-file-name (string-match "\\.pfa" bare-file-name))
-        (cached-file-contents bare-file-name))
-       ((and bare-file-name (string-match "\\.pfb" bare-file-name))
-        (ly:pfb->pfa bare-file-name))
-       ((and bare-file-name (string-match "\\.ttf" bare-file-name))
-        (ly:ttf->pfa bare-file-name))
-
        ((string-match "([eE]mmentaler|[Aa]ybabtu)" file-name)
         (cached-file-contents
          (format "~a.pfa" (munge-lily-font-name file-name))))
-
-       ((and bare-file-name (string-match "\\.otf" bare-file-name))
-        (ps-embed-cff (ly:otf->cff bare-file-name) name 0))
-
-       ((and bare-file-name (string-match "\\.ttf" bare-file-name))
-        (ly:ttf->pfa bare-file-name))
+       ((and
+;        (eq? PLATFORM 'darwin)
+         bare-file-name (string-match "\\.dfont" bare-file-name))
+        (handle-mac-font name bare-file-name))
+       
+       ((and
+;        (eq? PLATFORM 'darwin)
+         bare-file-name (= (stat:size (stat bare-file-name)) 0))
+        (handle-mac-font name bare-file-name))
 
        ((and font (cff-font? font))
         (ps-embed-cff (ly:otf-font-table-data font "CFF ")
                       name
                       0))
+
+       (bare-file-name (font-file-as-ps-string name bare-file-name))
        (else
-        (ly:warning (_ "don't know how to embed ~S=~S") name file-name)
-         "")))))
+        (ly:warning (_ "don't know how to embed font ~s ~s ~s")
+                    name file-name font))))))
+       
 
   (define (load-fonts paper)
     (let* ((fonts (ly:paper-fonts paper))
index 2ed241a645272f00c747d942b7d30d10b5aaec7b..66b64cbe53ca5ea4a96c04160083bae1808a2f92 100644 (file)
@@ -86,6 +86,8 @@
 ;; Mingw
 ;; #(Windows XP HOSTNAME build 2600 5.01 Service Pack 1 i686)
 ;;
+
+;; ugh, code dup.
 (define-public PLATFORM
   (string->symbol
    (string-downcase
index 13e1a13b7530657ebc719278262db8e0eb62e9f8..b233910b58918237db2c98df4778e42fd8feab05 100644 (file)
@@ -67,10 +67,11 @@ readNamingTable (int fd)
 
   for (i = 0; i < nrecords; i++)
     {
-      if (records[i].platformID == 3 &&        /* Microsoft */
+      if
+       ((records[i].platformID == 3 && /* Microsoft */
          records[i].encodingID == 1 && /* UGL */
          records[i].languageID == 0x0409 &&    /* US English */
-         records[i].nameID <= 7)
+         records[i].nameID <= 7))
        {
          strings[records[i].nameID] = mymalloc (records[i].length / 2 + 1);
          unistrncpy (strings[records[i].nameID],
@@ -80,6 +81,27 @@ readNamingTable (int fd)
                     strings[records[i].nameID]);
        }
     }
+
+
+  for (i = 0; i < nrecords; i++)
+    {
+      int id = records[i].nameID;
+      if (records[i].platformID == 1 &&        /* Apple */
+         records[i].encodingID == 0 && /* 8bit */
+         id <= 7 &&
+         !strings[id]
+        )
+       {
+         strings[id] = mymalloc (records[i].length + 1);
+         strncpy (strings[id],
+                  data + records[i].offset, records[i].length);
+         strings[id][records[i].length] = 0;
+         if (verbosity >= 2)
+           fprintf (stderr, "%d: %s\n", records[i].nameID,
+                    strings[records[i].nameID]);
+       }
+    }
+
   free (records);
   free (data);
   return strings;