- (let* ((format-str (format "~a" pixmap-format))
- (extension (cond
- ((string-contains format-str "png") "png")
- ((string-contains format-str "jpg") "jpeg")
- ((string-contains format-str "jpeg") "jpeg")
- (else
- (ly:error "Unknown pixmap format ~a" pixmap-format))))
- (base (dir-basename ps-name ".ps" ".eps"))
- (png1 (format "~a.~a" base extension))
- (pngn (format "~a-page%d.~a" base extension))
- (page-count (ps-page-count ps-name))
- (multi-page? (> page-count 1))
- (output-file (if multi-page? pngn png1))
-
- (gs-variable-options
- (if multi-page?
- (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f"
- page-width page-height)
- "-dEPSCrop"))
- (cmd (format #f "~a\
- ~a\
- ~a\
- -dGraphicsAlphaBits=4\
- -dTextAlphaBits=4\
- -dNOPAUSE\
- -sDEVICE=~a\
- -sOutputFile=~S\
- -r~S\
- ~S\
- -c quit"
- (search-gs)
- (if be-verbose "" "-q")
- gs-variable-options
- pixmap-format
- output-file
- (* anti-alias-factor resolution) ps-name))
- (status 0)
- (files '()))
-
- ;; The wrapper on windows cannot handle `=' signs,
- ;; gs has a workaround with #.
- (if (eq? PLATFORM 'windows)
- (begin
- (set! cmd (re-sub "=" "#" cmd))
- (set! cmd (re-sub "-dSAFER " "" cmd))))
-
- (set! status (my-system be-verbose #f cmd))
+ (let* ((format-str (format #f "~a" pixmap-format))
+ (extension (cond
+ ((string-contains format-str "png") "png")
+ ((string-contains format-str "jpg") "jpeg")
+ ((string-contains format-str "jpeg") "jpeg")
+ (else
+ (ly:error "Unknown pixmap format ~a" pixmap-format))))
+ (png1 (format #f "~a.~a" base-name extension))
+ (pngn (format #f "~a-page%d.~a" base-name extension))
+ (page-count (ps-page-count tmp-name))
+ (multi-page? (> page-count 1))
+
+ ;; Escape `%' (except `page%d') for ghostscript
+ (base-name-gs (string-join
+ (string-split base-name #\%)
+ "%%"))
+ (png1-gs (format #f "~a.~a" base-name-gs extension))
+ (pngn-gs (format #f "~a-page%d.~a" base-name-gs extension))
+ (output-file (if multi-page? pngn-gs png1-gs))
+
+ (*unspecified* (if #f #f))
+ (cmd
+ (remove (lambda (x) (eq? x *unspecified*))
+ (list
+ (search-gs)
+ (if (ly:get-option 'verbose) *unspecified* "-q")
+ (if (or (ly:get-option 'gs-load-fonts)
+ (ly:get-option 'gs-load-lily-fonts)
+ (eq? PLATFORM 'windows))
+ "-dNOSAFER"
+ "-dSAFER")
+
+ (if is-eps
+ "-dEPSCrop"
+ (ly:format "-dDEVICEWIDTHPOINTS=~$" page-width))
+ (if is-eps
+ *unspecified*
+ (ly:format "-dDEVICEHEIGHTPOINTS=~$" page-height))
+ "-dGraphicsAlphaBits=4"
+ "-dTextAlphaBits=4"
+ "-dNOPAUSE"
+ "-dBATCH"
+ (ly:format "-sDEVICE=~a" pixmap-format)
+ (string-append "-sOutputFile=" output-file)
+ (ly:format "-r~a" (* anti-alias-factor resolution))
+ (string-append "-f" tmp-name))))
+ (files '()))
+
+ (ly:system cmd)