From 8b13215ac7d24636a8a3f1c1ef950b875b022531 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Wed, 26 Feb 2014 15:22:39 -0800 Subject: [PATCH] source+output-path function --- file-tools.rkt | 11 ++++++++--- render.rkt | 26 ++++++++++---------------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/file-tools.rkt b/file-tools.rkt index 5241d57..dff3313 100644 --- a/file-tools.rkt +++ b/file-tools.rkt @@ -117,7 +117,8 @@ (with-syntax ([stem-source? (format-id stx "~a-source?" #'stem)] [has-stem-source? (format-id stx "has-~a-source?" #'stem)] [has/is-stem-source? (format-id stx "has/is-~a-source?" #'stem)] - [->stem-source-path (format-id stx "->~a-source-path" #'stem)]) + [->stem-source-path (format-id stx "->~a-source-path" #'stem)] + [->stem-source+output-paths (format-id stx "->~a-source+output-paths" #'stem)]) #'(begin ;; does file have particular extension (define+provide/contract (stem-source? x) @@ -137,7 +138,12 @@ ;; add the file extension if it's not there (define+provide/contract (->stem-source-path x) (pathish? . -> . path?) - (->path (if (stem-source? x) x (add-ext x file-ext))))))])) + (->path (if (stem-source? x) x (add-ext x file-ext)))) + + (define+provide/contract (->stem-source+output-paths path) + (pathish? . -> . (values path? path?)) + (values (->complete-path (->stem-source-path path)) + (->complete-path (->output-path path))))))])) (make-source-utility-functions preproc world:preproc-source-ext) @@ -148,7 +154,6 @@ - (define+provide/contract (->output-path x) (coerce/path? . -> . coerce/path?) (if (or (markup-source? x) (preproc-source? x) (null-source? x)) diff --git a/render.rkt b/render.rkt index de0587c..35457e0 100644 --- a/render.rkt +++ b/render.rkt @@ -122,11 +122,11 @@ (define (render-null-source path #:force force) ;; this op is trivial & fast, so do it every time. - (define source-path (->complete-path (->null-source-path path))) - (define output-path (->complete-path (->output-path path))) + (define-values (source-path output-path) (->null-source+output-paths path)) + (message (format "Copying ~a to ~a" - (file-name-from-path source-path) - (file-name-from-path output-path))) + (file-name-from-path source-path) + (file-name-from-path output-path))) (copy-file source-path output-path #t)) (define (render-preproc-source source-path output-path) @@ -141,12 +141,9 @@ (store-render-in-mod-dates source-path) ; don't store mod date until render has completed! (rendered-message output-path)) -(define (render-preproc-source-if-needed input-path #:force [force-render #f]) +(define (render-preproc-source-if-needed path #:force [force-render #f]) - ;; input-path might be either a preproc-source path or preproc-output path - ;; But the coercion functions will figure it out. - (define source-path (->complete-path (->preproc-source-path input-path))) - (define output-path (->complete-path (->output-path input-path))) + (define-values (source-path output-path) (->preproc-source+output-paths path)) (define render-needed? (or @@ -175,12 +172,9 @@ (->boolean (> (len (get-output-string port-for-catching-file-info)) 0))) -(define (complete-markup-source-path x) - (->complete-path (->markup-source-path (->path x)))) - - -(define (render-markup x [template-name #f] #:force [force-render #f]) - (define source-path (complete-markup-source-path x)) +(define (render-markup path [template-name #f] #:force [force-render #f]) + (define-values (source-path output-path) (->markup-source+output-paths path)) + ;; todo: this won't work with source files nested down one level (define-values (source-dir ignored also-ignored) (split-path source-path)) @@ -204,7 +198,7 @@ ft-path))) (render template-path #:force force-render) ; bc template might have its own preprocessor source - (define output-path (->output-path source-path)) + ;; 2) Render the source file with template, if needed. ;; Render is expensive, so we avoid it when we can. Four conditions where we render: