From 4e8da0faf10026509209c4bbe892e215876f1b1c Mon Sep 17 00:00:00 2001 From: Joel Dueck Date: Sat, 24 Apr 2021 11:33:02 -0500 Subject: [PATCH] faster external render check --- pollen/render.rkt | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/pollen/render.rkt b/pollen/render.rkt index 49e0253..36be786 100644 --- a/pollen/render.rkt +++ b/pollen/render.rkt @@ -233,16 +233,20 @@ (define ram-cache (make-hash)) -(define (external-renderer) - (match (setup:external-renderer) - [(list (? module-path? mod) (? symbol? render-proc-id)) - (with-handlers ([exn:fail:filesystem:missing-module? +(define (get-external-render-proc v) + (cond + [(and (list? v) + (eq? 2 (length v)) + (module-path? (first v)) + (symbol? (second v))) + (let ([mod (first v)] + [render-proc-id (second v)]) + (with-handlers ([exn:fail:filesystem:missing-module? (lambda (e) (error 'external-renderer "cannot open module ~a" mod))]) (dynamic-require mod render-proc-id - (lambda () (error 'external-renderer "~a is not provided by ~a" render-proc-id mod))))] - [#f #f] - [(var v) (error 'setup:external-renderer "Value is not in the form '(module-path proc-id): ~a" v)])) + (lambda () (error 'external-renderer "~a is not provided by ~a" render-proc-id mod)))))] + [else (error 'setup:external-renderer "Value is not in the form '(module-path proc-id): ~v" v)])) ;; note that output and template order is reversed from typical (define (render-to-file-base caller @@ -270,7 +274,11 @@ [(not render-cache-activated?) 'render-cache-deactivated] [else #false])) (when render-needed? - (define render-thunk (or maybe-render-thunk (λ () ((or (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?