From 28160f5396989d82d9bf7931374567e758b8ae69 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Tue, 26 Mar 2019 21:44:10 -0700 Subject: [PATCH] start tracking --- quad/qtest/markdown.rkt | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/quad/qtest/markdown.rkt b/quad/qtest/markdown.rkt index 5a8b74b9..0fb389ce 100644 --- a/quad/qtest/markdown.rkt +++ b/quad/qtest/markdown.rkt @@ -18,7 +18,7 @@ (define-tag-function (p attrs exprs) ;; no font-family so that it adopts whatever the surrounding family is - (qexpr (append `((keep-first "2")(keep-last "3")(font-size "12") (hyphenate "true") (display ,(symbol->string (gensym)))) attrs) exprs)) + (qexpr (append `((keep-first "2")(keep-last "3")(font-size "12") (character-tracking "0") (hyphenate "true") (display ,(symbol->string (gensym)))) attrs) exprs)) (define-tag-function (hr attrs exprs) hrbr) @@ -112,15 +112,16 @@ ;; draw with pdf text routine #:draw (λ (q doc) (when (pair? (quad-elems q)) - (font doc (path->string (hash-ref (quad-attrs q) font-path-key))) - (font-size doc (hash-ref (quad-attrs q) 'font-size 12)) - (fill-color doc (hash-ref (quad-attrs q) 'color "black")) + (font doc (path->string (quad-ref q font-path-key))) + (font-size doc (quad-ref q 'font-size 12)) + (fill-color doc (quad-ref q 'color "black")) (define str (unsafe-car (quad-elems q))) (match-define (list x y) (quad-origin q)) (text doc str x y - #:bg (hash-ref (quad-attrs q) 'bg #f) + #:tracking (quad-ref q 'character-tracking 0) + #:bg (quad-ref q 'bg #f) #:features (list (cons #"tnum" 1)) - #:link (hash-ref (quad-attrs q) 'link #f)))) + #:link (quad-ref q 'link #f)))) #:draw-end (if draw-debug-string? (λ (q doc) (draw-debug q doc "#99f" "#ccf")) void))) @@ -144,7 +145,12 @@ [str (font-size doc (quad-ref q 'font-size default-font-size)) (font doc (path->string (quad-ref q font-path-key default-font-face))) - (string-width doc str)] + (+ (string-width doc str + #:tracking (quad-ref q 'character-tracking 0)) + ;; add one more dose because `string-width` only adds it intercharacter, + ;; and this quad will be adjacent to another + ;; (so we need to account for the "inter-quad" space + (quad-ref q 'character-tracking 0))] [else 0])) (list string-size (quad-ref q 'line-height (current-line-height doc)))))