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


src/posts.lisp (1315 bytes)

1 (in-package :coleslaw)
2 
3 (defclass post (content)
4   ((title  :initarg :title  :reader title-of)
5    (author :initarg :author :reader author-of)
6    (excerpt :initarg :excerpt :reader excerpt-of)
7    (format :initarg :format :reader post-format))
8   (:default-initargs :author nil :excerpt nil))
9 
10 (defmethod initialize-instance :after ((object post) &key)
11   (with-slots (url title author excerpt format text) object
12     (let (post-content)
13       (setf url (compute-url object (slugify title))
14             format (make-keyword (string-upcase format))
15             post-content (render-text text format)
16             excerpt (or excerpt
17                         (first (split (excerpt-sep *config*)
18                                       post-content
19                                       :limit 2)))
20             text post-content
21             author (or author (author *config*))))))
22 
23 (defmethod render ((object post) &key prev next)
24   (funcall (theme-fn 'post) (list :config *config*
25                                   :post object
26                                   :prev prev
27                                   :next next)))
28 
29 (defmethod publish ((doc-type (eql (find-class 'post))))
30   (loop for (next post prev) on (append '(nil) (by-date (find-all 'post)))
31      while post do (write-document post nil :prev prev :next next)))