diff --git a/pollen-file-tools.rkt b/pollen-file-tools.rkt index 65b4b43..35876f6 100644 --- a/pollen-file-tools.rkt +++ b/pollen-file-tools.rkt @@ -180,15 +180,15 @@ (path? . -> . path?) (remove-ext path)) -(define/contract (make-pollen-output-path thing ext) - (pathish? (or/c string? symbol?) . -> . path?) - (add-ext (remove-ext (->path thing)) ext)) +(define/contract (make-pollen-output-path thing) + (pathish? . -> . path?) + (remove-ext (->path thing))) (module+ test - (check-equal? (make-pollen-output-path (->path "foo.p") 'html) (->path "foo.html")) - (check-equal? (make-pollen-output-path (->path "/Users/mb/git/foo.p") 'html) (->path "/Users/mb/git/foo.html")) - (check-equal? (make-pollen-output-path "foo" 'xml) (->path "foo.xml")) - (check-equal? (make-pollen-output-path 'foo 'barml) (->path "foo.barml"))) + (check-equal? (make-pollen-output-path (->path "foo.html.p")) (->path "foo.html")) + (check-equal? (make-pollen-output-path (->path "/Users/mb/git/foo.html.p")) (->path "/Users/mb/git/foo.html")) + (check-equal? (make-pollen-output-path "foo.xml.p") (->path "foo.xml")) + (check-equal? (make-pollen-output-path 'foo.barml.p) (->path "foo.barml"))) ;; turns input into corresponding pollen source path ;; does not, however, validate that new path exists @@ -196,10 +196,14 @@ ;; OK to use pollen source as input (comes out the same way) (define/contract (make-pollen-source-path thing) (pathish? . -> . path?) - (add-ext (remove-ext (->path thing)) POLLEN_SOURCE_EXT)) + (define path (->path thing)) + (if (pollen-source? path) + path + (add-ext path POLLEN_SOURCE_EXT))) (module+ test (check-equal? (make-pollen-source-path (->path "foo.p")) (->path "foo.p")) + (check-equal? (make-pollen-source-path (->path "foo.html")) (->path "foo.html.p")) (check-equal? (make-pollen-source-path "foo") (->path "foo.p")) (check-equal? (make-pollen-source-path 'foo) (->path "foo.p"))) diff --git a/ptree.rkt b/ptree.rkt index de0934c..84be06d 100644 --- a/ptree.rkt +++ b/ptree.rkt @@ -27,10 +27,7 @@ [files (map remove-ext (filter (λ(x) (has-ext? x POLLEN_SOURCE_EXT)) files))]) ;; make a POLLEN_TREE_ROOT_NAME structure and convert it to a full ptree (message "Generating ptree from file listing") - (ptree-root->ptree (cons POLLEN_TREE_ROOT_NAME (map path->string files)))))) - -(define project-ptree (make-project-ptree)) - + (ptree-root->ptree (cons POLLEN_TREE_ROOT_NAME (map path->pnode files)))))) ;; remove parents from tree (i.e., just remove attrs) ;; is not the inverse of add-parents, i.e., you do not get back your original input. @@ -218,16 +215,17 @@ ;; convert path to pnode ;; used for converting "here" values to pnodes -(define/contract (here->pnode x) +(define/contract (path->pnode x) (pathish? . -> . pnode?) (->string (remove-all-ext (last (explode-path (->path x)))))) (module+ test - (check-equal? (here->pnode "bar") "bar") - (check-equal? (here->pnode "foo/bar") "bar") - (check-equal? (here->pnode "foo/bar.html") "bar") - (check-equal? (here->pnode "/Users/this/that/foo/bar.html.pp") "bar")) + (check-equal? (path->pnode "bar") "bar") + (check-equal? (path->pnode "foo/bar") "bar") + (check-equal? (path->pnode "foo/bar.html") "bar") + (check-equal? (path->pnode "/Users/this/that/foo/bar.html.pp") "bar")) +(define here->pnode path->pnode) ;; convert key to URL ;; = key name + suffix of template (or suffix of default template) @@ -237,3 +235,7 @@ (pnode? . -> . string?) (string-append key ".html")) + +;; this project setup must follow definitions to prevent undefined errors +(define project-ptree (make-project-ptree)) + diff --git a/regenerate.rkt b/regenerate.rkt index 66f2144..ae03be2 100644 --- a/regenerate.rkt +++ b/regenerate.rkt @@ -263,8 +263,8 @@ ;; refresh template (it might have its own preprocessor file) (regenerate template-path #:force force) - ;; calculate new path for generated file: base from source + ext from template - (define output-path (make-pollen-output-path source-path (get-ext template-path))) + ;; calculate new path for generated file + (define output-path (make-pollen-output-path source-path)) ;; 2) Regenerate the source file with template, if needed. ;; Regenerate is expensive, so we avoid it when we can.