(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)
(pfas (map font-loader font-names)))
pfas))
+
(display "%%BeginProlog\n" port)
(format
port
(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 (metadata-encode (markup->string val))))))
+ (display "[ " port)
+ (metadata-lookup-output 'pdfcomposer 'composer "Author")
+ (format port "/Creator (LilyPond ~a)\n" (lilypond-version))
+ (metadata-lookup-output 'pdftitle 'title "Title")
+ (metadata-lookup-output 'pdfsubject 'subject "Subject")
+ (metadata-lookup-output 'pdfkeywords 'keywords "Keywords")
+ (metadata-lookup-output 'pdfmodDate 'modDate "ModDate")
+ (metadata-lookup-output 'pdfsubtitle 'subtitle "Subtitle")
+ (metadata-lookup-output 'pdfcomposer 'composer "Composer")
+ (metadata-lookup-output 'pdfarranger 'arranger "Arranger")
+ (metadata-lookup-output 'pdfpoet 'poet "Poet")
+ (metadata-lookup-output 'pdfcopyright 'copyright "Copyright")
+ (display "/DOCINFO pdfmark\n\n" port))
+
+
(define-public (output-framework basename book scopes fields)
(let* ((filename (format "~a.ps" basename))
(outputter (ly:make-paper-outputter
(open-file filename "wb")
'ps))
(paper (ly:paper-book-paper book))
+ (header (ly:paper-book-header book))
(systems (ly:paper-book-systems book))
(page-stencils (map page-stencil (ly:paper-book-pages book)))
(landscape? (eq? (ly:output-def-lookup paper 'landscape) #t))
;; don't do BeginDefaults PageMedia: A4
;; not necessary and wrong
(write-preamble paper #t port)
+ (if (module? header)
+ (handle-metadata header port))
(for-each
(lambda (page)
(set! page-number (1+ page-number))