- (if (pair? entry)
- (begin
- (set! entry (eval (cdr entry) m))
- (set-paper-dimensions m (car entry) (cdr entry))
- (module-define! m 'papersize name)
- (module-define! m 'papersizename name)
- (set-paper-dimensions m (car entry) (cdr entry))
- (module-define! (current-module) '$defaultpaper new-paper))
- (ly:warning (string-append "Unknown papersize: " name)))))
+ (cond
+ ((not is-bookpaper?)
+ (ly:warning "This is not a \\paper {} object, ~S"
+ module))
+ ((pair? entry)
+ (set! entry (eval (cdr entry) module))
+ (set-paper-dimensions module (car entry) (cdr entry))
+ (module-define! module 'papersize name)
+ (module-define! module 'papersizename name)
+ (set-paper-dimensions module (car entry) (cdr entry)))
+ (else
+ (ly:warn (string-append "Unknown papersize: " name))))
+
+ ))
+
+(define-public (set-default-paper-size name)
+ (internal-set-paper-size (ly:output-def-scope (eval '$defaultbookpaper (current-module)))
+ name))
+
+(define-public (set-paper-size name)
+ (if (module-defined? (current-module) 'is-paper)
+ (internal-set-paper-size (current-module) name)
+
+ ;;; TODO: should raise (generic) exception with throw, and catch
+ ;;; that in parse-scm.cc
+ (ly:warn "Must use #(set-paper-size .. ) within \\paper { ... }")))
+
+(define-public (scale-paper pap scale)
+ (let*
+ ((new-pap (ly:output-def-clone pap))
+ (dim-vars (ly:output-def-lookup pap 'dimension-variables))
+ (scope (ly:output-def-scope new-pap)))
+
+ (for-each
+ (lambda (v)
+ (define val (ly:output-def-lookup pap v))
+ (if (number? val)
+ (module-define! scope v
+ (/ val scale))
+
+ ;; spurious warnings, eg. for hsize, vsize.
+; (ly:warn "not a number, ~S = ~S " v val)
+ ))
+
+ dim-vars)
+
+ new-pap
+ ))