+(define (setup paper)
+ (string-append
+ "\n"
+ "%%BeginSetup\n"
+ (define-fonts paper)
+ (output-variables paper)
+ "init-lilypond-parameters\n"
+ "%%EndSetup\n"))
+
+(define (write-preamble paper load-fonts? port)
+ (define (load-fonts paper)
+ (let* ((fonts (ly:paper-fonts paper))
+ (all-font-names
+ (map
+ (lambda (font)
+ (cond
+ ((string? (ly:font-file-name font)) (list (ly:font-file-name font)))
+ ((ly:pango-font? font)
+ (map cdr (ly:pango-font-physical-fonts font)))
+ (else (ly:font-sub-fonts font))))
+
+ fonts))
+
+ (font-names
+ (uniq-list
+ (sort (apply append all-font-names) string<?)))
+ (pfas (map
+ (lambda (x)
+ (let* ((bare-file-name (ly:find-file x))
+ (cffname (string-append x ".cff.ps"))
+ (cff-file-name (ly:find-file cffname))
+ )
+ (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 "\\.(otf|cff)" bare-file-name))
+
+ (cached-file-contents (string-regexp-substitute "(otf|cff)" "cff.ps" bare-file-name)))
+ ((and bare-file-name (string-match "\\.ttf" bare-file-name))
+ (ly:ttf->pfa bare-file-name))
+ (bare-file-name (cached-file-contents bare-file-name))
+ (cff-file-name (cached-file-contents cff-file-name))
+ (else
+ (ly:warn "cannot find CFF/PFA/PFB font ~S" x)
+ ""))))
+ (filter string? font-names))))
+ pfas))
+
+ (display (procset "music-drawing-routines.ps") port)
+ (display (procset "lilyponddefs.ps") port)
+ (if load-fonts?
+ (for-each (lambda (f) (display f port)) (load-fonts paper)))
+ (display (setup paper) port))
+
+(define-public (output-framework basename book scopes fields)
+ (let* ((filename (format "~a.ps" basename))
+ (outputter (ly:make-paper-outputter filename "ps"))
+ (paper (ly:paper-book-paper book))