pull/9/head
Matthew Butterick 10 years ago
parent 42c0cc59d3
commit 3cb9a37195

@ -84,6 +84,15 @@
(make-source-utility-functions scribble)
(define/contract+provide (->source-path path)
(coerce/path? . -> . path?)
(define possible-sources
(if (directory-exists? path)
null
(filter file-exists? (map (λ(proc) (proc path)) (list ->preproc-source-path ->markup-source-path ->null-source-path ->scribble-source-path)))))
(if (null? possible-sources) path (car possible-sources)))
(define+provide/contract (->output-path x)
(coerce/path? . -> . coerce/path?)
(cond

@ -1,5 +1,5 @@
#lang racket/base
(require "world.rkt" sugar/define/contract sugar/coerce/contract)
(require "world.rkt" sugar/define sugar/coerce/contract)
(define/contract+provide (get-project-require-files source-path) ; keep contract local to ensure coercion
@ -8,7 +8,7 @@
(and (andmap file-exists? possible-requires) possible-requires))
(define+provide/contract (require+provide-project-require-files here-path)
(define+provide/contract (require+provide-project-require-files here-path #:provide [provide #t])
(coerce/path? . -> . list?)
(define (put-file-in-require-form file)
`(file ,(path->string file)))
@ -18,6 +18,11 @@
(let ([files-in-require-form (map put-file-in-require-form project-require-files)])
`(begin
(require ,@files-in-require-form)
,@(list `(provide (all-from-out ,@files-in-require-form)))))
,@(if provide
(list `(provide (all-from-out ,@files-in-require-form)))
'())))
(void)))
(define+provide (require-project-require-files here-path)
(require+provide-project-require-files here-path #:provide #f))

@ -159,12 +159,11 @@
(define expr-to-eval
`(begin
(require (for-syntax racket/base))
(require web-server/templates pollen/cache)
(require pollen/lang/inner-lang-helper)
(require-project-require-files)
(require web-server/templates pollen/cache pollen/debug)
,(require-project-require-files source-path)
(let ([doc (cached-require ,source-path ',world:main-pollen-export)]
[metas (cached-require ,source-path ',world:meta-pollen-export)])
(local-require pollen/debug pollen/pagemap pollen/template pollen/top)
(local-require pollen/pagemap pollen/template pollen/top)
(include-template #:command-char ,world:template-field-delimiter ,(->string (find-relative-path source-dir template-path))))))
(time (parameterize ([current-directory source-dir])
@ -224,7 +223,6 @@
pollen/decode
pollen/file
pollen/main
pollen/lang/inner-lang-helper
pollen/pagemap
pollen/cache
sugar
@ -258,7 +256,6 @@
pollen/debug
pollen/decode
pollen/file
pollen/lang/inner-lang-helper
pollen/pagemap
pollen/cache
sugar

@ -159,12 +159,7 @@
(define (make-path-row fn)
(define filename (->string fn))
(define (file-in-dir? fn) (file-exists? (build-path dir fn)))
(define possible-sources
(if (directory-exists? fn)
empty ;; folders don't have source files
(filter file-in-dir? (list (->preproc-source-path filename) (->markup-source-path filename) (->null-source-path filename) (->scribble-source-path filename)))))
(define source (and (not (empty? possible-sources)) (->string (car possible-sources))))
(define source (->string (->source-path fn)))
`(tr ,@(map make-link-cell
(append (list
(cond ; main cell

@ -8,14 +8,14 @@
(provide (all-from-out sugar/coerce/value))
(define/contract+provide (doc x)
(define/contract+provide (get-doc x)
(coerce/path? . -> . txexpr?)
(cached-require x world:main-pollen-export))
(cached-require (->source-path x) world:main-pollen-export))
(define/contract+provide (metas x)
(define/contract+provide (get-metas x)
(coerce/path? . -> . hash?)
(cached-require x world:meta-pollen-export))
(cached-require (->source-path x) world:meta-pollen-export))
(define/contract+provide (find query . xs)
@ -25,12 +25,12 @@
(define/contract+provide (find* query . pxs)
((coerce/symbol?) #:rest (listof (or/c #f hash? txexpr? pathish?)) . ->* . (or/c #f txexpr-element?))
((coerce/symbol?) #:rest (listof (or/c #f hash? txexpr? pathish?)) . ->* . (or/c #f txexpr-elements?))
(define (finder x)
(cond
[(hash? x) (find-in-metas query x)]
[(txexpr? x) (find-in-doc query x)]
[(pathish? x) (find* query (doc x) (metas x))]
[(pathish? x) (find* query (get-doc x) (get-metas x))]
[else null]))
(append-map finder pxs))
@ -38,7 +38,7 @@
(define/contract+provide (find-in-metas query hash-or-path)
(coerce/symbol? (or/c hash? pathish?) . -> . (or/c #f txexpr-elements?))
(let ([metas (or (and (hash? hash-or-path) hash-or-path)
(metas (->path hash-or-path)))])
(get-metas (->path hash-or-path)))])
(with-handlers ([exn:fail? (λ(e) null)])
(list (hash-ref metas query)))))
@ -46,9 +46,9 @@
(define/contract+provide (find-in-doc query doc-or-path)
(coerce/symbol? (or/c txexpr? pathish?) . -> . (or/c #f txexpr-elements?))
(let ([doc (or (and (txexpr? doc-or-path) doc-or-path)
(doc (->path doc-or-path)))])
(get-doc (->path doc-or-path)))])
(with-handlers ([exn:fail? (λ(e) null)])
(se-path*/list query doc))))
(se-path*/list (list query) doc))))
;; turns input into xexpr-elements so they can be spliced into template
@ -77,3 +77,9 @@
(with-handlers ([exn:fail? (λ(exn) (error (format "when/block: ~a" (exn-message exn))))])
(map ->string (list body ...))))
"")]))
(module+ main
(when/block #t (find 'topic "/Users/mb/git/bpt/introduction.html")))
Loading…
Cancel
Save