Recently Written · git

coleslaw

Emacs mode for the "Coleslaw" site generator written in Common Lisp.

git clone https://github.com/equwal/coleslaw

Log | Files | Refs


plugins/static-pages.lisp (1457 bytes)

1 (defpackage :coleslaw-static-pages
2   (:use :cl)
3   (:export #:enable)
4   (:import-from :coleslaw #:*config*
5                           #:assert-field
6                           #:content
7                           #:find-all
8                           #:render
9                           #:publish
10                           #:theme-fn
11                           #:render-text
12                           #:write-document))
13 
14 (in-package :coleslaw-static-pages)
15 
16 (defclass page (content)
17   ((title :initarg :title :reader coleslaw::title-of)
18    (format :initarg :format :reader coleslaw::page-format))
19   ;; default format is markdown (for backward compatibility)
20   (:default-initargs :format :md))
21 
22 (defmethod initialize-instance :after ((object page) &key)
23   (assert-field 'title object)
24   (assert-field 'coleslaw::url object)
25   (with-slots (coleslaw::url coleslaw::text format title) object
26     (setf coleslaw::url (make-pathname :defaults coleslaw::url)
27           format (alexandria:make-keyword (string-upcase format))
28           coleslaw::text (render-text coleslaw::text format))))
29 
30 (defmethod render ((object page) &key next prev)
31   ;; For the time being, we'll re-use the normal post theme.
32   (declare (ignore next prev))
33   (funcall (theme-fn 'post) (list :config *config*
34                                   :post object)))
35 
36 (defmethod publish ((doc-type (eql (find-class 'page))))
37   (dolist (page (find-all 'page))
38     (write-document page)))
39 
40 (defun enable ())