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/feeds.lisp (1405 bytes)

1 (in-package :coleslaw)
2 
3 ;;; Atom and RSS Feeds
4 
5 (defclass base-feed () ((format :initarg :format :reader feed-format)))
6 
7 (defclass feed (index base-feed) ())
8 
9 (defmethod discover ((doc-type (eql (find-class 'feed))))
10   (let ((content (by-date (find-all 'post))))
11     (dolist (format '(rss atom))
12       (let ((feed (make-instance 'feed :format format
13                                  :content (take-up-to 10 content)
14                                  :slug (format nil "~(~a~)" format))))
15         (add-document feed)))))
16 
17 (defmethod publish ((doc-type (eql (find-class 'feed))))
18   (dolist (feed (find-all 'feed))
19     (write-document feed (theme-fn (feed-format feed) "feeds"))))
20 
21 ;;; Tag Feeds
22 
23 (defclass tag-feed (index base-feed) ())
24 
25 (defmethod discover ((doc-type (eql (find-class 'tag-feed))))
26   (let ((content (by-date (find-all 'post))))
27     (dolist (tag (feeds *config*))
28       (let ((tagged (remove-if-not (lambda (x) (tag-p tag x)) content)))
29         (dolist (format '(rss atom))
30           (let ((feed (make-instance 'tag-feed :format format
31                                      :content (take-up-to 10 tagged)
32                                      :slug (format nil "~a-~(~a~)" tag format))))
33             (add-document feed)))))))
34 
35 (defmethod publish ((doc-type (eql (find-class 'tag-feed))))
36   (dolist (feed (find-all 'tag-feed))
37     (write-document feed (theme-fn (feed-format feed) "feeds"))))