;;; boudin (import (boudin page) (boudin page instances) (boudin page write) (boudin site) (boudin util) (chicken file) (chicken pathname) (chicken process-context)) (define site-posts (make-parameter '())) (define site-files (make-parameter '())) (define (copy-static file) (copy-file file (pathname-replace-directory file (site-dest)))) (define (with-progress message thunk) (edisplay message) (edisplay "...") (thunk) (eprint "Ok.")) (define (go!) (eprint "Building " (site-name) "...") (when (file-exists? (site-config)) (with-progress (string-append "Config found, loading: " (site-config)) (lambda () (load (site-config))))) (for-each (lambda (f) (with-progress (string-append "Copying " f " to " (site-output)) (lambda () (copy-static f)))) (site-files)) (let ((posts (map make-post (site-posts)))) (for-each (lambda (pg) (with-progress (string-append "Writing " (page-output pg)) (lambda () (write-page pg)))) (append posts (list (make-index posts) (make-feed posts))))) (eprint "Done!")) (define (main args) (define *current #f) (let loop ((args args)) (cond ((null? args) (go!)) ((equal? (car args) "-c") (site-config (cadr args)) (loop (cddr args))) ((not *current) ; add to posts by default (site-posts (cons (car args) (site-posts))) (loop (cdr args))) ((equal? (car args) "-p") (set! *current site-posts) (loop (cdr args))) ((equal? (car args) "-f") (set! *current site-files) (loop (cdr args))) (else (*current (cons (car args) (*current))) (loop (cdr args)))))) (cond-expand ((or chicken-script compiling) (import (chicken process-context)) (main (command-line-arguments))) (else))