From 4f4dc348504ab65d9837a8c9908c5bcc7de01cc3 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Fri, 10 Jan 2020 14:46:04 -0800 Subject: [PATCH] allow current-metas to be edited by tag functions --- pollen/private/main-base.rkt | 15 ++++++++++----- pollen/private/ts.rktd | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/pollen/private/main-base.rkt b/pollen/private/main-base.rkt index 464b0e3..1bc3085 100644 --- a/pollen/private/main-base.rkt +++ b/pollen/private/main-base.rkt @@ -45,12 +45,16 @@ [ALL-DEFINED-OUT (datum->syntax #'EXPRS '(all-defined-out))]) #'(doclang:#%module-begin DOC-ID ; positional arg for doclang-raw: name of export - (λ (xs) + (λ (xs) ; positional arg for doclang-raw: post-processor (define proc (make-parse-proc PARSER-MODE ROOT-ID)) (define trimmed-xs (strip-leading-newlines xs)) (define doc-elements (splice trimmed-xs (setup:splicing-tag))) - (parameterize ([current-metas METAS-ID-CALLER]) - (proc doc-elements))) ; positional arg for doclang-raw: post-processor + (begin0 + (proc doc-elements) + ;; wait till the end to restore prev-metas + ;; because tag functions may edit current-metas + ;; and we want root to see those changes + (current-metas prev-metas))) (module METAS-ID racket/base (provide METAS-ID) (define METAS-ID META-HASH)) @@ -60,5 +64,6 @@ (define prev-metas (current-metas)) (define METAS-ID-CALLER METAS-ID) (and (current-metas METAS-ID) "") ; because empty strings get stripped, voids don't - (begin . EXPRS) - (and (current-metas prev-metas) "")))])) ; leave behind empty string, not void + ;; we set current-metas imperatively rather than using `splicing-parameterize` + ;; so that we can unset it in the post processor, rather than out here + (begin . EXPRS)))])) diff --git a/pollen/private/ts.rktd b/pollen/private/ts.rktd index cc5cb64..151f324 100644 --- a/pollen/private/ts.rktd +++ b/pollen/private/ts.rktd @@ -1 +1 @@ -1578696312 +1578696364