From 22610a8e17bf9022aa8efdf74de7b9735b308976 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Fri, 3 Apr 2020 16:41:04 -0700 Subject: [PATCH] store global attrs in param --- quad/qtest/test-kafka-tester.pdf | Bin 40943 -> 40943 bytes quad/quadwriter/page.rkt | 13 ++++++++----- quad/quadwriter/param.rkt | 1 + quad/quadwriter/render.rkt | 20 +++++++++++++++++--- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/quad/qtest/test-kafka-tester.pdf b/quad/qtest/test-kafka-tester.pdf index 74a2602e7def4a57b15ddf1a8f4648519d187b63..bb2d081e739eaf7912e7c46d44f3f9f70a697419 100644 GIT binary patch delta 13383 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 delta 13383 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 bqNFO7LY#T}{}8vCBC7`c|C>v0a>4%x%Ph)B diff --git a/quad/quadwriter/page.rkt b/quad/quadwriter/page.rkt index 811e6f5d..47e226df 100644 --- a/quad/quadwriter/page.rkt +++ b/quad/quadwriter/page.rkt @@ -57,15 +57,18 @@ (define (make-footer-quad col-q page-idx path) (define-values (dir name _) (split-path (path-replace-extension path #""))) - (define attrs (let ([attrs (make-hasheq)]) + (define attrs (let ([attrs (make-hasheq)] + [cltq (current-top-level-quad)]) (hash-set*! attrs :footer-text (quad-ref col-q :footer-text) :page-number (+ (quad-ref col-q :page-number-start (add1 (section-pages-used))) (sub1 page-idx)) :doc-title (string-titlecase (path->string name)) - :font-size (* 0.8 (quad-ref col-q :font-size default-font-size)) - :line-height (quad-ref col-q :line-height default-line-height) - :font-family "text") - (resolve-font-path! attrs) + ;; we get font & line-height from cltq + ;; because these are not block attrs + ;; so they are not propagated upward from col-q + :font-size (* 0.8 (quad-ref cltq :font-size)) + :line-height (quad-ref cltq :line-height) + :font-path (quad-ref cltq :font-path)) attrs)) (make-quad #:size (pt 50 default-line-height) #:attrs attrs diff --git a/quad/quadwriter/param.rkt b/quad/quadwriter/param.rkt index c90e5fb1..a97c45b9 100644 --- a/quad/quadwriter/param.rkt +++ b/quad/quadwriter/param.rkt @@ -4,6 +4,7 @@ (define current-pdf (make-parameter #false)) (define current-line-wrap (make-parameter #f)) ; because kp is slow and maybe we want to disable for "draft" mode +(define current-top-level-quad (make-parameter #f)) (define section-pages-used (make-parameter 0)) (define quadwriter-test-mode (make-parameter #f)) ; used during rackunit to suppress nondeterministic elements, like timestamp in header diff --git a/quad/quadwriter/render.rkt b/quad/quadwriter/render.rkt index f3896ff9..69203275 100644 --- a/quad/quadwriter/render.rkt +++ b/quad/quadwriter/render.rkt @@ -172,10 +172,20 @@ ;; convert our input Q-expression into a useful form. ;; some typographic niceties - (define qexpr (decode qx-arg + (define qexpr + (let ([qx (decode qx-arg #:string-proc (compose1 smart-ellipses smart-dashes) - #:txexpr-proc smart-quotes)) - + #:txexpr-proc smart-quotes)]) + (match qx + [(list tag attrs elements ...) + ;; we insert a dummy element "◊" (irrelevant what it is) + ;; to get a sample of the global attrs + ;; which we will strip off after atomization + ;; but keep the attrs around in case anyone needs to use them + ;; for instance, quads added to the layout like footers + ;; won't have another way of getting this + (list* tag attrs (cons "◊" elements))]))) + ;; apply some default styling attributes. ;; These will only be used if the underlying q-expression hasn't specified its own values, ;; which will naturally override these. @@ -194,6 +204,10 @@ #:emoji "fallback-emoji" #:math "fallback-math" #:font-path-resolver resolve-font-path!)] + [qs (let () + ;; store the dummy element and discard + (current-top-level-quad (car qs)) + (cdr qs))] [qs (time-log hyphenate (apply append (map handle-hyphenate qs)))] [qs (map generic->typed-quad qs)] [qs (drop-leading-breaks qs)]