grug

A static website generator written in Guile Scheme.
Log | Files | Refs | README | LICENSE

site.scm (1310B)


      1 (define-module (grug site)
      2   #:use-module (srfi srfi-9)
      3   #:use-module (srfi srfi-26)
      4   #:use-module (grug readers)
      5   #:use-module (grug utils)
      6   #:export (site
      7             site?
      8             site-build-directory
      9             site-metadata
     10             site-reader
     11             site-builders
     12             build-site
     13             publish-site))
     14 
     15 (define-record-type <site>
     16   (make-site build-directory metadata reader builders publishers)
     17   site?
     18   (build-directory site-build-directory)
     19   (metadata site-metadata)
     20   (reader site-reader)
     21   (builders site-builders)
     22   (publishers site-publishers))
     23 
     24 (define* (site #:key
     25                (build-directory "site")
     26                (metadata `((title . "Grug Site")))
     27                (reader cmark)
     28                (builders '())
     29                (publishers '()))
     30   (make-site build-directory metadata reader builders publishers))
     31 
     32 ;; TODO: Make one simple interface for grug commands
     33 
     34 (define (build-site site)
     35   ;; Reset site build directory
     36   (when (file-exists? (site-build-directory site))
     37     (delete-file-recursively (site-build-directory site)))
     38   (mkdir (site-build-directory site))
     39   ;; Run builders for site
     40   (for-each (cut <> site) (site-builders site)))
     41 
     42 (define (publish-site site)
     43   ;; Run publishers for site
     44   (for-each (cut <> site) (site-publishers site)))
     45