]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/framework-ps.scm
Doc: Contributor -- fix formatting and add info on fontforge
[lilypond.git] / scm / framework-ps.scm
index 9cae54ffa851810152b4b886010b5f1ac7c1e261..7c44920d67ef05e33cd35d1720036a5bc7777a97 100644 (file)
            (dir-helper dir (cons e lst)))))
     (reverse (dir-helper (opendir dir-name) '())))
 
-  (define (handle-mac-font name filename)
+  (define (handle-mac-font name file-name)
     (let* ((dir-name (tmpnam))
           (files '())
           (status 0)
          (begin
            (set! embed "% failed\n")
            (ly:warning (_ "cannot extract file matching ~a from ~a")
-                       name filename)))
+                       name file-name)))
       embed))
 
   (define (font-file-as-ps-string name file-name font-index)
   (display "%%EndProlog\n" port)
   (display "%%BeginSetup\ninit-lilypond-parameters\n%%EndSetup\n\n" port))
 
+(define (ps-quote str)
+        (fold
+          (lambda (replacement-list result)
+                  (string-join
+                    (string-split
+                      result
+                      (car replacement-list))
+                    (cadr replacement-list)))
+          str
+          '((#\\ "\\\\") (#\( "\\(") (#\) "\\)"))))
+
 ;;; Create DOCINFO pdfmark containing metadata
 ;;; header fields with pdf prefix override those without the prefix
 (define (handle-metadata header port)
+  (define (metadata-encode val)
+    ;; First, call ly:encode-string-for-pdf to encode the string (latin1 or
+    ;; utf-16be), then escape all parentheses and backslashes
+    ;; FIXME guile-2.0: use (string->utf16 str 'big) instead
+
+    (ps-quote (ly:encode-string-for-pdf val)))
   (define (metadata-lookup-output overridevar fallbackvar field)
     (let* ((overrideval (ly:modules-lookup (list header) overridevar))
           (fallbackval (ly:modules-lookup (list header) fallbackvar))
           (val (if overrideval overrideval fallbackval)))
       (if val
-         (format port "/~a (~a)\n" field (markup->string val)))))
+         (format port "/~a (~a)\n" field (metadata-encode (markup->string val))))))
   (display "[ " port)
   (metadata-lookup-output 'pdfcomposer 'composer "Author")
   (format port "/Creator (LilyPond ~a)\n" (lilypond-version))
     ;; don't do BeginDefaults PageMedia: A4
     ;; not necessary and wrong
     (write-preamble paper #t port)
-    (handle-metadata header port)
+    (if (module? header)
+       (handle-metadata header port))
     (for-each
      (lambda (page)
        (set! page-number (1+ page-number))