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


commit 12f174533fab60669069bd92ca5261fb4f275f1b
Alfredo Beaumont <alfredo.beaumont@gmail.com>
2017-03-22 18:30:49 +0100

Add support for either an automatic or manual excerpt for index

 src/config.lisp   | 2 ++
 src/packages.lisp | 2 +-
 src/posts.lisp    | 9 +++++++--
 3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/config.lisp b/src/config.lisp
index 15b5b1f..ac65ca8 100644
--- a/src/config.lisp
+++ b/src/config.lisp
@@ -5,6 +5,7 @@
    (charset         :initarg :charset        :reader charset)
    (deploy-dir      :initarg :deploy-dir     :reader deploy-dir)
    (domain          :initarg :domain         :reader domain)
+   (excerpt-sep     :initarg :excerpt-sep    :reader excerpt-sep)
    (feeds           :initarg :feeds          :reader feeds)
    (lang            :initarg :lang           :reader lang)
    (license         :initarg :license        :reader license)
@@ -22,6 +23,7 @@
    :license      nil
    :plugins      nil
    :sitenav      nil
+   :excerpt-sep  "<!--more-->"
    :charset      "UTF-8"
    :lang         "en"
    :page-ext     "html"
diff --git a/src/packages.lisp b/src/packages.lisp
index fe07a90..45c96cd 100644
--- a/src/packages.lisp
+++ b/src/packages.lisp
@@ -5,7 +5,7 @@
                             #:make-keyword
                             #:mappend)
   (:import-from :cl-fad #:file-exists-p)
-  (:import-from :cl-ppcre #:scan-to-strings)
+  (:import-from :cl-ppcre #:scan-to-strings #:split)
   (:import-from :closure-template #:compile-template)
   (:import-from :local-time #:format-rfc1123-timestring)
   (:import-from :uiop #:getcwd
diff --git a/src/posts.lisp b/src/posts.lisp
index d8fe29d..5c25ea7 100644
--- a/src/posts.lisp
+++ b/src/posts.lisp
@@ -3,14 +3,19 @@
 (defclass post (content)
   ((title  :initarg :title  :reader title-of)
    (author :initarg :author :reader author-of)
+   (excerpt :initarg :excerpt :reader excerpt-of)
    (format :initarg :format :reader post-format))
-  (:default-initargs :author nil))
+  (:default-initargs :author nil :excerpt nil))
 
 (defmethod initialize-instance :after ((object post) &key)
-  (with-slots (url title author format text) object
+  (with-slots (url title author excerpt format text) object
     (setf url (compute-url object (slugify title))
           format (make-keyword (string-upcase format))
           text (render-text text format)
+          excerpt (or excerpt
+                      (first (split (excerpt-sep *config*)
+                                    (render-text text format)
+                                    :limit 2)))
           author (or author (author *config*)))))
 
 (defmethod render ((object post) &key prev next)