From 1ba417641fc89170bf12d4748d84e7c7d42cdd8d Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Fri, 16 Nov 2018 18:23:55 -0800 Subject: [PATCH] harder test --- quad/quad/typewriter-test.rkt | 2 +- quad/quad/typewriter.rkt | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/quad/quad/typewriter-test.rkt b/quad/quad/typewriter-test.rkt index 9ca14050..8d0e5a60 100644 --- a/quad/quad/typewriter-test.rkt +++ b/quad/quad/typewriter-test.rkt @@ -1,3 +1,3 @@ #lang quad/typewriter -◊quad[#:fontsize "11"]{Get Ready ◊quad[#:link "http://beautifulracket.com"]{An expression that} is not a value can ◊quad[#:fontsize "22"]{always} ◊quad[#:fontsize "7"]{be partitioned} into two parts: a redex, which is the part that changed in a single-step simplification (highlighted), and the continuation, which is the evaluation context surrounding an expression. In (- 4 (+ 1 1)), the redex is (+ 1 1), and the continuation is (- 4 []), where [] takes the place of the redex. That is, the continuation says how to "continue" after the redex is reduced to a value. ◊quad[#:link "http://beautifulracket.com"]{An expression that} is not a value can ◊quad[#:fontsize "22"]{always} ◊quad[#:fontsize "7"]{be partitioned} into two parts: a redex, which is the part that changed in a single-step simplification (highlighted), and the continuation, which is the evaluation context surrounding an expression. In (- 4 (+ 1 1)), the redex is (+ 1 1), and the continuation is (- 4 []), where [] takes the place of the redex. That is, the continuation says how to "continue" after the redex is reduced to a value. ◊quad[#:link "http://beautifulracket.com"]{An expression that} is not a value can ◊quad[#:fontsize "22"]{always} ◊quad[#:fontsize "7"]{be partitioned} into two parts: a redex, which is the part that changed in a single-step simplification (highlighted), and the continuation, which is the evaluation context surrounding an expression. In (- 4 (+ 1 1)), the redex is (+ 1 1), and the continuation is (- 4 []), where [] takes the place of the redex. That is, the continuation says how to "continue" after the redex is reduced to a value.} \ No newline at end of file +◊quad[#:fontsize "11"]{Get Ready ◊quad[#:link "http://beautifulracket.com"]{An expression that} is not a value can ◊quad[#:fontsize "22"]{always} ◊quad[#:fontsize "7"]{be partitioned} into two parts: a redex, which is the part that changed in a single-step simplification (highlighted), and the continuation, which is the evaluation context surrounding an expression. In (- 4 (+ 1 1)), the redex is (+ 1 1), and the continuation is (- 4 []), where [] takes the place of the redex. That is, the continuation says how to "continue" after the redex is reduced to a value. ◊quad[#:link "http://beautifulracket.com"]{An expression that} is not a value can ◊quad[#:fontsize "22"]{always} ◊quad[#:fontsize "7"]{be partitioned} into two parts: a redex, which is the part that changed in a single-step simplification (highlighted), and the continuation, which is the evaluation context surrounding an expression. In (- 4 (+ 1 1)), the redex is (+ 1 1), and the continuation is (- 4 []), where [] takes the place of the redex. That is, the continuation says how to "continue" after the redex is reduced to a value. ◊quad[#:link "http://beautifulracket.com"]{An expression that} is not a value can ◊quad[#:fontsize "22"]{always} ◊quad[#:fontsize "7"]{be partitioned} into two parts: a redex, which is the part that changed in a single-step simplification (highlighted), and the continuation, which is the evaluation context surrounding an expression. In (- 4 (+ 1 1)), the redex is (+ 1 1), and the continuation is (- 4 []), where [] takes the place of the redex. That is, the continuation says how to "continue" after the redex is reduced to a value.} diff --git a/quad/quad/typewriter.rkt b/quad/quad/typewriter.rkt index 96ced178..ab55b4fc 100644 --- a/quad/quad/typewriter.rkt +++ b/quad/quad/typewriter.rkt @@ -25,6 +25,7 @@ (define char-sizes (make-hash)) (define string-widths (make-hash)) +(define draw-counter 0) (define (charify q) ($char (hash-set* (attrs q) 'in 'bi @@ -45,6 +46,7 @@ [(#\space) (λ (sig) (not (memq sig '(start end))))] [else #t]) 'draw (λ (q doc) + (set! draw-counter (add1 draw-counter )) (draw-debug q doc) (send doc fontSize (string->number (hash-ref (attrs q) 'fontsize "12"))) (let ([str (car (elems q))]) @@ -123,9 +125,9 @@ #:finish-wrap-proc (λ (pcs) (list ($page (hasheq 'offset '(36 36)) (filter-not $break? pcs)))))) (define (typeset qarg) - (define chars 25) + (define chars 65) (define line-width (* 7.2 chars)) - (define lines-per-page (* 4 line-height)) + (define lines-per-page (* 40 line-height)) (let* ([x (time-name runify (runify qarg))] [x (time-name charify (map charify x))] [x (time-name line-wrap (line-wrap x line-width))] @@ -141,8 +143,7 @@ (define doc (time-name make-doc (make-object PDFDocument (hasheq 'compress #t - 'autoFirstPage #f - 'size '(300 200))))) + 'autoFirstPage #f)))) (parameterize ([current-doc doc]) (time-name config-doc (send* doc @@ -150,13 +151,17 @@ [font (path->string charter)] [fontSize 12])) (define q (typeset qin)) + (report draw-counter) (time-name draw (draw q doc)) + (report draw-counter) (time-name end-doc (send doc end)))) (define-macro (mb . ARGS) (with-pattern ([PS (syntax-property #'ARGS 'ps)]) #'(#%module-begin - (run (qexpr->quad (quad . ARGS)) PS) + (define qs (list . ARGS)) + (define lotsa-qs (append* (make-list 75 qs))) + (run (qexpr->quad (apply quad #:fontsize "12" lotsa-qs)) PS) (void)))) (module reader syntax/module-reader