From 85ad971b882f240b2eb0bbeb5ee8cc734753ff03 Mon Sep 17 00:00:00 2001 From: Joel Dueck Date: Sat, 24 Apr 2021 12:16:26 -0500 Subject: [PATCH] Specify external renderer via module and id (related to mbutterick/pollen-users#94) (#253) * Specify external renderer via module and id * faster external render check * Update render.rkt * rely on default exception messages, which are informative --- pollen/render.rkt | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/pollen/render.rkt b/pollen/render.rkt index 615bb39..094de78 100644 --- a/pollen/render.rkt +++ b/pollen/render.rkt @@ -233,6 +233,20 @@ (define ram-cache (make-hash)) +(define (get-external-render-proc v) + (match v + [(list (? module-path? mod) (? symbol? render-proc-id)) + (with-handlers ([exn:fail:filesystem:missing-module? + (λ (e) (raise + (exn:fail:contract (string-replace (exn-message e) "standard-module-name-resolver" "external-renderer") + (exn-continuation-marks e))))] + [exn:fail:contract? ;; raised if dynamic-require can't find render-proc-id + (λ (e) (raise + (exn:fail:contract (string-replace (exn-message e) "dynamic-require" "external-renderer") + (exn-continuation-marks e))))]) + (dynamic-require mod render-proc-id))] + [_ (raise-argument-error 'external-renderer "value in the form '(module-path proc-id)" v)])) + ;; note that output and template order is reversed from typical (define (render-to-file-base caller force? @@ -259,7 +273,11 @@ [(not render-cache-activated?) 'render-cache-deactivated] [else #false])) (when render-needed? - (define render-thunk (or maybe-render-thunk (λ () ((or (setup:external-renderer) render) source-path template-path output-path)))) ; returns either string or bytes + (define render-thunk (or maybe-render-thunk + (λ () ((or (let ([val (setup:external-renderer)]) + (and val (get-external-render-proc val))) + render) + source-path template-path output-path)))) ; returns either string or bytes (define render-result (cond [render-cache-activated?