+
+;; FIXME: duplictates output-scopes, duplicated in other backends
+;; FIXME: silly interface name
+(define (output-paper-def pd)
+ (let ((prefix "lilypondpaper"))
+
+ (define (scope-entry->string key var)
+ (let ((val (variable-ref var)))
+ (cond
+ ((string? val) (ps-string-def prefix key val))
+ ((number? val) (ps-number-def prefix key val))
+ (else ""))))
+
+ (apply
+ string-append
+ (module-map scope-entry->string (ly:output-def-scope pd)))))
+
+;; FIXME: duplicated in other output backends
+;; FIXME: silly interface name
+(define (output-scopes paper scopes fields basename)
+ (let ((prefix "lilypond"))
+
+ ;; FIXME: duplicates output-paper's scope-entry->string, mostly
+ (define (scope-entry->string key var)
+ (if (variable-bound? var)
+ (let ((val (variable-ref var)))
+ (if (and (memq key fields) (string? val))
+ (header-to-file basename key val))
+ (cond
+ ((string? val) (ps-string-def prefix key val))
+ ((number? val) (ps-number-def prefix key val))
+ (else "")))
+ ""))
+
+ (define (output-scope scope)
+ (apply string-append (module-map scope-entry->string scope)))
+
+ (string-append (apply string-append (map output-scope scopes)))))
+
+;; hmm, looks like recursing call is always last statement, does guile
+;; think so too?
+(define (output-stencil port expr offset)
+ (if (pair? expr)
+ (let ((head (car expr)))
+ (cond
+ ((ly:input-location? head)
+ (display (apply define-origin (ly:input-location head)) port)
+ (output-stencil port (cadr expr) offset))
+ ((eq? head 'no-origin)
+ (display (expression->string head) port)
+ (output-stencil port (cadr expr) offset))
+ ((eq? head 'translate-stencil)
+ (output-stencil port (caddr expr) (offset-add offset (cadr expr))))
+ ((eq? head 'combine-stencil)
+ (output-stencil port (cadr expr) offset)
+ (output-stencil port (caddr expr) offset))
+ (else
+ (display (placebox (car offset) (cdr offset)
+ (expression->string expr)) port))))))
+