;;(define pdebug stderr)
(define (pdebug . rest) #f)
-(define mm-to-bigpoint
- (/ 72 25.4))
-
(define-public (ps-font-command font)
(let* ((name (ly:font-file-name font))
(magnify (ly:font-magnification font)))
(define font-list (ly:paper-fonts paper))
(define (define-font command fontname scaling)
(string-append
- "/" command " { /" fontname " findfont "
- (ly:number->string scaling) " output-scale div scalefont } bind def\n"))
+ "/" command " { /" fontname " " (ly:number->string scaling) " output-scale div selectfont } bind def\n"))
(define (standard-tex-font? x)
(or (equal? (substring x 0 2) "ms")
(string-append
"/lily-output-units "
- (number->string mm-to-bigpoint)
+ (number->string (/ (ly:bp 1)))
" def %% millimeter\n"
(output-entry "staff-line-thickness" 'line-thickness)
(output-entry "line-width" 'line-width)
(ly:outputter-dump-string
outputter
(string-append
- "%%Page: "
- (number->string page-number) " " (number->string page-count) "\n"
-
+ (format "%%Page: ~a ~a\n" page-number page-number)
"%%BeginPageSetup\n"
(if landscape?
"page-width output-scale lily-output-units mul mul 0 translate 90 rotate\n"
(supplies-or-needs paper load-fonts?)
"%%EndComments\n"))
-(define (page-header paper page-count load-fonts?)
+(define (ps-document-media paper)
+ (let* ((w (/ (*
+ (ly:output-def-lookup paper 'output-scale)
+ (ly:output-def-lookup paper 'paper-width)) (ly:bp 1)))
+ (h (/ (*
+ (ly:output-def-lookup paper 'paper-height)
+ (ly:output-def-lookup paper 'output-scale))
+ (ly:bp 1)))
+ (landscape? (eq? (ly:output-def-lookup paper 'landscape) #t)))
+ (format "%%DocumentMedia: ~a ~$ ~$ ~a ~a ~a\n"
+ (ly:output-def-lookup paper 'papersizename)
+ (if landscape? h w)
+ (if landscape? w h)
+ 80 ;; weight
+ "()" ;; color
+ "()" ;; type
+ )))
+
+
+(define (file-header paper page-count load-fonts?)
(string-append "%!PS-Adobe-3.0\n"
"%%Creator: LilyPond "
(lilypond-version)
(if (eq? (ly:output-def-lookup paper 'landscape) #t)
"Landscape\n"
"Portrait\n")
- "%%DocumentPaperSizes: "
- (ly:output-def-lookup paper 'papersizename) "\n"
+ (ps-document-media paper)
(supplies-or-needs paper load-fonts?)
"%%EndComments\n"))
(define (procset file-name)
- (string-append
- (format
+ (format
"%%BeginResource: procset (~a) 1 0
~a
%%EndResource
"
- file-name (cached-file-contents file-name))))
+ file-name (cached-file-contents file-name)))
-(define (setup paper)
+(define (embed-document file-name)
+ (format "%%BeginDocument: ~a
+~a
+%%EndDocument
+"
+ file-name (cached-file-contents file-name)))
+
+(define (setup-variables paper)
(string-append
"\n"
- "%%BeginSetup\n"
(define-fonts paper)
(output-variables paper)
- "%%EndSetup\n"))
+ ))
(define (cff-font? font)
(let*
(string-length binary-data)))
(footer "\n%%EndData
%%EndResource
-%%EOF
%%EndResource\n"))
(string-append
(cons
name
- (cond
- ((string-match "^([eE]mmentaler|[Aa]ybabtu)" file-name)
- (ps-load-file (ly:find-file
- (format "~a.otf" file-name))))
- ((string? bare-file-name)
- (ps-load-file file-name))
- (else
- (ly:warning (_ "can't embed ~S=~S") name file-name)
- "")))))
+
+ (if (mac-font? bare-file-name)
+ (handle-mac-font name bare-file-name)
+ (cond
+ ((string-match "^([eE]mmentaler|[Aa]ybabtu)" file-name)
+ (ps-load-file (ly:find-file
+ (format "~a.otf" file-name))))
+ ((string? bare-file-name)
+ (ps-load-file file-name))
+ (else
+ (ly:warning (_ "can't embed ~S=~S") name file-name)
+ "")))
+
+ )))
(define (dir-join a b)
(if (equal? a "")
(cond
((and file-name (string-match "\\.pfa" downcase-file-name))
- (cached-file-contents file-name))
+ (embed-document file-name))
((and file-name (string-match "\\.pfb" downcase-file-name))
(ly:pfb->pfa file-name))
((and file-name (string-match "\\.ttf" downcase-file-name))
(else
(ly:warning (_ "don't know how to embed ~S=~S") name file-name)
""))))
-
+
+ (define (mac-font? bare-file-name)
+ (and
+ (eq? PLATFORM 'darwin)
+ bare-file-name
+ (or
+ (string-match "\\.dfont" bare-file-name)
+ (= (stat:size (stat bare-file-name)) 0))))
+
(define (load-font font-name-filename)
(let* ((font (car font-name-filename))
(name (cadr font-name-filename))
name
(cond
- ((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))
+ ((mac-font? bare-file-name)
(handle-mac-font name bare-file-name))
((and font (cff-font? font))
(pfas (map font-loader font-names)))
pfas))
+ (display "%%BeginProlog\n" port)
(if load-fonts?
(for-each
(lambda (f)
(display "\n%%EndFont\n" port))
(load-fonts paper)))
- (display (setup paper) port)
+ (display (setup-variables paper) port)
;; adobe note 5002: should initialize variables before loading routines.
(display (procset "music-drawing-routines.ps") port)
(display (procset "lilyponddefs.ps") port)
- (display "init-lilypond-parameters\n" port))
+
+ (if (not (ly:get-option 'point-and-click))
+ (display "/mark_URI { pop pop pop pop pop } bind def\n" port))
+
+ (display "%%EndProlog\n" port)
+
+ (display "%%BeginSetup\ninit-lilypond-parameters\n%%EndSetup\n\n" port))
(define-public (output-framework basename book scopes fields)
(let* ((filename (format "~a.ps" basename))
(open-file filename "wb")
"ps"))
(paper (ly:paper-book-paper 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))
(page-count (length page-stencils))
(port (ly:outputter-port outputter)))
+ (if (ly:get-option 'dump-signatures)
+ (write-system-signatures basename (ly:paper-book-systems book) 0))
+
(output-scopes scopes fields basename)
- (display (page-header paper page-count #t) port)
+ (display (file-header paper page-count #t) port)
+
+
+ ;; don't do BeginDefaults PageMedia: A4
+ ;; not necessary and wrong
+
+
(write-preamble paper #t port)
(for-each
(postprocess-output book framework-ps-module filename
(ly:output-formats))))
-(if (not (defined? 'nan?))
- (define (nan? x) #f))
-
-(if (not (defined? 'inf?))
- (define (inf? x) #f))
-
(define-public (dump-stencil-as-EPS paper dump-me filename load-fonts?)
- (define (mm-to-bp-box mmbox)
+ (define (to-bp-box mmbox)
(let* ((scale (ly:output-def-lookup paper 'output-scale))
(box (map
(lambda (x)
- (inexact->exact
- (round (* x scale mm-to-bigpoint)))) mmbox)))
-
+ (if (or (nan? x) (inf? x))
+ 0
+ (inexact->exact
+ (round (/ (* x scale) (ly:bp 1)))))) mmbox)))
+
(list (car box)
(cadr box)
(max (1+ (car box)) (caddr box))
;;
(list (min left-overshoot (car xext))
(car yext) (cdr xext) (cdr yext))))
- (rounded-bbox (mm-to-bp-box bbox))
+ (rounded-bbox (to-bp-box bbox))
(port (ly:outputter-port outputter))
(header (eps-header paper rounded-bbox load-fonts?)))