Introduction
Introduction Statistics Contact Development Disclaimer Help
tag support - cl-yag - Common Lisp Yet Another website Generator
git clone git://bitreich.org/cl-yag/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws…
Log
Files
Refs
Tags
README
LICENSE
---
commit b6217bd19691e99255d6ea2ae57c14c6d48b073a
parent 304d6befcc4319581253099320092cb6cbee5bd1
Author: solene rapenne <[email protected]>
Date: Tue, 3 May 2016 14:03:25 +0200
tag support
Diffstat:
A data/2.txt | 1 +
M data/articles.lisp | 4 ++--
M generator.lisp | 51 +++++++++++++++++++++++++++++…
M template/layout.tpl | 1 +
A template/one-tag.tpl | 1 +
5 files changed, 54 insertions(+), 4 deletions(-)
---
diff --git a/data/2.txt b/data/2.txt
@@ -0,0 +1 @@
+<p>hello</p>
diff --git a/data/articles.lisp b/data/articles.lisp
@@ -18,7 +18,7 @@
;; :tiny can be omitted and will be replaced by the full article text
(defvar *articles*
(list
- (list :id "2" :date "30 April 2016" :title "Another message" :short "New ve…
- (list :id "1" :date "29 April 2016" :title "My first message" :short "This …
+ (list :id "2" :date "30 April 2016" :tag "lisp" :title "Another message" :s…
+ (list :id "1" :date "29 April 2016":tag "pony code" :title "My first messag…
))
diff --git a/generator.lisp b/generator.lisp
@@ -14,6 +14,20 @@
when pos do (write-string replacement out)
while pos)))
+;; common-lisp don't have a split string function natively
+;; thanks https://gist.github.com/siguremon/1174988
+(defun split-str (string &optional (separator " "))
+ (split-str-1 string separator))
+(defun split-str-1 (string &optional (separator " ") (r nil))
+ (let ((n (position separator string
+ :from-end t
+ :test #'(lambda (x y)
+ (find y x :test #'string=)))))
+ (if n
+ (split-str-1 (subseq string 0 n) separator (cons (subseq string (1+ n)…
+ (cons string r))))
+
+
;; load a file as a string
;; we escape ~ to avoid failures with format
(defun load-file(path)
@@ -47,6 +61,21 @@
(save-file ,name
(generate-layout ,@data))))
+;; generate the list of tags
+(defun the-tags()
+ (let ((tag-list))
+ (loop for article in *articles* do
+ (if (getf article :tag nil) ;; we don't want an error if no tag
+ (loop for tag in (split-str (getf article :tag)) do ;; for each …
+ (setf (getf tag-list (intern tag "KEYWORD")) ;; we create …
+ (list
+ :name tag
+ :value (push (getf article :id) (getf (getf tag-lis…
+ (loop for i from 1 to (length tag-list) by 2 collect ;; removing the keywo…
+ (nth i tag-list))))
+
+
+
;; generates the html of one only article
;; this is called in a loop to produce the homepage
@@ -64,18 +93,28 @@
(defun generate-layout(body)
(prepare "template/layout.tpl"
(template "%%Title%%" (getf *config* :title))
+ (template "%%Tags%%"
+ (format nil "~{~d~}" (loop for tag in (the-tags) collect
+ (prepare "template/one-tag.tpl"
+ (template "%%Name%%" …
(template "%%Body%%" body)
output))
-;; Homepage generation
+;; html generation of index homepage
(defun generate-semi-mainpage()
(format nil "~{~d~}"
(loop for article in *articles* collect
(create-article article :tiny t))))
+;; html generation of a tag homepage
+(defun generate-tag-mainpage(articles-in-tag)
+ (format nil "~{~d~}"
+ (loop for article in *articles*
+ when (member (getf article :id) articles-in-tag :test #'equal)
+ collect (create-article article :tiny t))))
-;; Generate the items for the xml
+;; xml generation of the items for the rss
(defun generate-rss-item()
(format nil "~{~d~}"
(loop for article in *articles* collect
@@ -107,9 +146,17 @@
(dolist (article *articles*)
(generate (format nil "article-~d.html" (getf article :id))
(create-article article :tiny nil)))
+
+ ;; produce index file for each tag
+ (loop for tag in (the-tags) do
+ (generate (format nil"tag-~d.html" (getf tag :NAME))
+ (generate-tag-mainpage (getf tag :VALUE))))
;;(generate-file-rss)
(save-file "rss.xml" (generate-rss))
+
)
(generate-site)
+
+
diff --git a/template/layout.tpl b/template/layout.tpl
@@ -9,6 +9,7 @@
<div id="top">
<a href="index.html">Home</a> <a href="rss.xml">Rss</a>
+ <p>Tags : %%Tags%%</p>
</div>
<div id="content">
diff --git a/template/one-tag.tpl b/template/one-tag.tpl
@@ -0,0 +1 @@
+ <a href="tag-%%Name%%.html">%%Name%%</a>
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.