more margins

main
Matthew Butterick 5 years ago committed by Matthew Butterick
parent ea04c245cd
commit ef4d2d36a4

@ -71,7 +71,9 @@
(define (hash2-proc h recur) (equal-secondary-hash-code h))]) (define (hash2-proc h recur) (equal-secondary-hash-code h))])
(define (quad-ref q key [default-val #f]) (define (quad-ref q key [default-val #f])
(hash-ref (quad-attrs q) key default-val)) (hash-ref (quad-attrs q) key (match default-val
[(? procedure? proc) (proc)]
[val val])))
(define (quad-set! q key val) (define (quad-set! q key val)
(hash-set! (quad-attrs q) key val) (hash-set! (quad-attrs q) key val)

@ -86,10 +86,10 @@
[size (make-size-promise q)])])) [size (make-size-promise q)])]))
(define (draw-debug q doc [fill-color "#f99"] [stroke-color "#fcc"]) (define (draw-debug q doc [fill-color "#f99"] [stroke-color "#fcc"] [the-width 0.5])
(when (draw-debug?) (when (draw-debug?)
(save doc) (save doc)
(line-width doc 0.5) (line-width doc the-width)
(apply rect doc (append (quad-origin q) (size q))) (apply rect doc (append (quad-origin q) (size q)))
(stroke doc stroke-color) (stroke doc stroke-color)
(circle doc (pt-x (in-point q)) (pt-y (in-point q)) 2) (circle doc (pt-x (in-point q)) (pt-y (in-point q)) 2)
@ -370,18 +370,10 @@
(define zoom-mode? #f) (define zoom-mode? #f)
(define zoom-scale 2) (define zoom-scale 2)
(define top-margin (/ 60 (if zoom-mode? zoom-scale 1)))
(define bottom-margin (/ 120 (if zoom-mode? zoom-scale 1)))
(define side-margin (/ 120 (if zoom-mode? zoom-scale 1)))
(define page-offset (pt (/ side-margin (if zoom-mode? 3 1))
(/ top-margin (if zoom-mode? 3 1))))
(define (page-draw-start q doc) (define (page-draw-start q doc)
(add-page doc) (add-page doc)
#R (quad-origin q) (draw-debug q doc "green" "green" 6)
#R (quad-offset q)
#R (quad-size q)
(draw-debug q doc "green" "green")
(scale doc (if zoom-mode? zoom-scale 1) (if zoom-mode? zoom-scale 1))) (scale doc (if zoom-mode? zoom-scale 1) (if zoom-mode? zoom-scale 1)))
(define (page-draw-end q doc) (define (page-draw-end q doc)
@ -391,10 +383,10 @@
(text doc (format "~a · ~a at ~a" (hash-ref (quad-attrs q) 'page-number) (text doc (format "~a · ~a at ~a" (hash-ref (quad-attrs q) 'page-number)
(hash-ref (quad-attrs q) 'doc-title) (hash-ref (quad-attrs q) 'doc-title)
(date->string (current-date) #t)) (date->string (current-date) #t))
side-margin (pt-x (quad-offset q))
(+ (- (pdf-height doc) bottom-margin) 20))) (- (pdf-height doc) 80)))
(define q:page (q #:offset page-offset (define q:page (q #:offset '(0 0)
#:draw-start page-draw-start #:draw-start page-draw-start
#:draw-end page-draw-end)) #:draw-end page-draw-end))
@ -579,23 +571,27 @@
#:height page-height #:height page-height
#:size (quad-ref (car qx) 'page-size default-page-size) #:size (quad-ref (car qx) 'page-size default-page-size)
#:orientation (quad-ref (car qx) 'page-orientation default-page-orientation)))) #:orientation (quad-ref (car qx) 'page-orientation default-page-orientation))))
(define default-x-margin (min 72 (floor (* .10 (pdf-width pdf)))))
(define default-y-margin (min 72 (floor (* .10 (pdf-width pdf)))))
(parameterize ([current-pdf pdf] (parameterize ([current-pdf pdf]
[verbose-quad-printing? #false]) [verbose-quad-printing? #false])
(let* ([qx (time-name hyphenate (handle-hyphenate qx))] (let* ([qx (time-name hyphenate (handle-hyphenate qx))]
[qx (map ->string-quad qx)] [qx (map ->string-quad qx)]
[qx (insert-first-line-indents qx)] [qx (insert-first-line-indents qx)]
[left-margin (quad-ref (car qx) 'page-margin-left side-margin)] ;; if only left or right margin is provided, copy other value in preference to default margin
[right-margin (quad-ref (car qx) 'page-margin-right side-margin)] [left-margin (quad-ref (car qx) 'page-margin-left (λ () (quad-ref (car qx) 'page-margin-right default-x-margin)))]
[right-margin (quad-ref (car qx) 'page-margin-right (λ () (quad-ref (car qx) 'page-margin-left default-y-margin)))]
[line-wrap-size (- (pdf-width pdf) left-margin right-margin)] [line-wrap-size (- (pdf-width pdf) left-margin right-margin)]
[qx (time-name line-wrap (line-wrap qx line-wrap-size))] [qx (time-name line-wrap (line-wrap qx line-wrap-size))]
[qx (apply-keeps qx)] [qx (apply-keeps qx)]
[top-margin (quad-ref (car qx) 'page-margin-top top-margin)] ;; if only top or bottom margin is provided, copy other value in preference to default margin
[bottom-margin (quad-ref (car qx) 'page-margin-bottom bottom-margin)] [top-margin (quad-ref (car qx) 'page-margin-top (λ () (quad-ref (car qx) 'page-margin-bottom default-y-margin)))]
[bottom-margin (quad-ref (car qx) 'page-margin-bottom (λ () (quad-ref (car qx) 'page-margin-top default-y-margin)))]
[page-wrap-size (- (pdf-height pdf) top-margin bottom-margin)] [page-wrap-size (- (pdf-height pdf) top-margin bottom-margin)]
[page-quad (struct-copy quad q:page [page-quad (struct-copy quad q:page
[offset #R (pt left-margin top-margin)] [offset (pt left-margin top-margin)]
[size #R (pt (pdf-width (current-pdf)) (pdf-height (current-pdf)))])] [size (pt (pdf-width pdf) (pdf-height pdf))])]
[qx (time-name page-wrap (page-wrap qx page-wrap-size page-quad))] [qx (time-name page-wrap (page-wrap qx page-wrap-size page-quad))]
[qx (time-name position (position (struct-copy quad q:doc [elems qx])))]) [qx (time-name position (position (struct-copy quad q:doc [elems qx])))])
(time-name draw (draw qx pdf)) (time-name draw (draw qx pdf))

@ -4,7 +4,7 @@
(define current-pdf (make-parameter #f)) (define current-pdf (make-parameter #f))
(define current-locale (make-parameter 'us)) (define current-locale (make-parameter 'us))
(define draw-debug? (make-parameter #t)) (define draw-debug? (make-parameter #f))
(define draw-debug-line? (make-parameter #t)) (define draw-debug-line? (make-parameter #t))
(define draw-debug-block? (make-parameter #t)) (define draw-debug-block? (make-parameter #t))
(define draw-debug-string? (make-parameter #t)) (define draw-debug-string? (make-parameter #t))
Loading…
Cancel
Save