itag support - cl-yag - Common Lisp Yet Another website Generator Err bitreich.org 70 hgit clone git://bitreich.org/cl-yag/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/cl-yag/ URL:git://bitreich.org/cl-yag/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/cl-yag/ bitreich.org 70 1Log /scm/cl-yag/log.gph bitreich.org 70 1Files /scm/cl-yag/files.gph bitreich.org 70 1Refs /scm/cl-yag/refs.gph bitreich.org 70 1Tags /scm/cl-yag/tag bitreich.org 70 1README /scm/cl-yag/file/README.md.gph bitreich.org 70 1LICENSE /scm/cl-yag/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit b6217bd19691e99255d6ea2ae57c14c6d48b073a /scm/cl-yag/commit/b6217bd19691e99255d6ea2ae57c14c6d48b073a.gph bitreich.org 70 1parent 304d6befcc4319581253099320092cb6cbee5bd1 /scm/cl-yag/commit/304d6befcc4319581253099320092cb6cbee5bd1.gph bitreich.org 70 hAuthor: solene rapenne URL:mailto:solene@dataswamp.org bitreich.org 70 iDate: Tue, 3 May 2016 14:03:25 +0200 Err bitreich.org 70 i Err bitreich.org 70 itag support Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i A data/2.txt | 1 + Err bitreich.org 70 i M data/articles.lisp | 4 ++-- Err bitreich.org 70 i M generator.lisp | 51 +++++++++++++++++++++++++++++-- Err bitreich.org 70 i M template/layout.tpl | 1 + Err bitreich.org 70 i A template/one-tag.tpl | 1 + Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 54 insertions(+), 4 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/data/2.txt b/data/2.txt /scm/cl-yag/file/data/2.txt.gph bitreich.org 70 i@@ -0,0 +1 @@ Err bitreich.org 70 i+

hello

Err bitreich.org 70 1diff --git a/data/articles.lisp b/data/articles.lisp /scm/cl-yag/file/data/articles.lisp.gph bitreich.org 70 i@@ -18,7 +18,7 @@ Err bitreich.org 70 i ;; :tiny can be omitted and will be replaced by the full article text Err bitreich.org 70 i (defvar *articles* Err bitreich.org 70 i (list Err bitreich.org 70 i- (list :id "2" :date "30 April 2016" :title "Another message" :short "New version available") Err bitreich.org 70 i- (list :id "1" :date "29 April 2016" :title "My first message" :short "This is my first message" :author "Solène") Err bitreich.org 70 i+ (list :id "2" :date "30 April 2016" :tag "lisp" :title "Another message" :short "New version available") Err bitreich.org 70 i+ (list :id "1" :date "29 April 2016":tag "pony code" :title "My first message" :short "This is my first message" :author "Solène") Err bitreich.org 70 i )) Err bitreich.org 70 i Err bitreich.org 70 1diff --git a/generator.lisp b/generator.lisp /scm/cl-yag/file/generator.lisp.gph bitreich.org 70 i@@ -14,6 +14,20 @@ Err bitreich.org 70 i when pos do (write-string replacement out) Err bitreich.org 70 i while pos))) Err bitreich.org 70 i Err bitreich.org 70 i+;; common-lisp don't have a split string function natively Err bitreich.org 70 i+;; thanks https://gist.github.com/siguremon/1174988 Err bitreich.org 70 i+(defun split-str (string &optional (separator " ")) Err bitreich.org 70 i+ (split-str-1 string separator)) Err bitreich.org 70 i+(defun split-str-1 (string &optional (separator " ") (r nil)) Err bitreich.org 70 i+ (let ((n (position separator string Err bitreich.org 70 i+ :from-end t Err bitreich.org 70 i+ :test #'(lambda (x y) Err bitreich.org 70 i+ (find y x :test #'string=))))) Err bitreich.org 70 i+ (if n Err bitreich.org 70 i+ (split-str-1 (subseq string 0 n) separator (cons (subseq string (1+ n)) r)) Err bitreich.org 70 i+ (cons string r)))) Err bitreich.org 70 i+ Err bitreich.org 70 i+ Err bitreich.org 70 i ;; load a file as a string Err bitreich.org 70 i ;; we escape ~ to avoid failures with format Err bitreich.org 70 i (defun load-file(path) Err bitreich.org 70 i@@ -47,6 +61,21 @@ Err bitreich.org 70 i (save-file ,name Err bitreich.org 70 i (generate-layout ,@data)))) Err bitreich.org 70 i Err bitreich.org 70 i+;; generate the list of tags Err bitreich.org 70 i+(defun the-tags() Err bitreich.org 70 i+ (let ((tag-list)) Err bitreich.org 70 i+ (loop for article in *articles* do Err bitreich.org 70 i+ (if (getf article :tag nil) ;; we don't want an error if no tag Err bitreich.org 70 i+ (loop for tag in (split-str (getf article :tag)) do ;; for each word in tag keyword Err bitreich.org 70 i+ (setf (getf tag-list (intern tag "KEYWORD")) ;; we create the keyword is inexistent and add ID to :value Err bitreich.org 70 i+ (list Err bitreich.org 70 i+ :name tag Err bitreich.org 70 i+ :value (push (getf article :id) (getf (getf tag-list (intern tag "KEYWORD")) :value))))))) Err bitreich.org 70 i+ (loop for i from 1 to (length tag-list) by 2 collect ;; removing the keywords Err bitreich.org 70 i+ (nth i tag-list)))) Err bitreich.org 70 i+ Err bitreich.org 70 i+ Err bitreich.org 70 i+ Err bitreich.org 70 i Err bitreich.org 70 i ;; generates the html of one only article Err bitreich.org 70 i ;; this is called in a loop to produce the homepage Err bitreich.org 70 i@@ -64,18 +93,28 @@ Err bitreich.org 70 i (defun generate-layout(body) Err bitreich.org 70 i (prepare "template/layout.tpl" Err bitreich.org 70 i (template "%%Title%%" (getf *config* :title)) Err bitreich.org 70 i+ (template "%%Tags%%" Err bitreich.org 70 i+ (format nil "~{~d~}" (loop for tag in (the-tags) collect Err bitreich.org 70 i+ (prepare "template/one-tag.tpl" Err bitreich.org 70 i+ (template "%%Name%%" (getf tag :name)))))) Err bitreich.org 70 i (template "%%Body%%" body) Err bitreich.org 70 i output)) Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i-;; Homepage generation Err bitreich.org 70 i+;; html generation of index homepage Err bitreich.org 70 i (defun generate-semi-mainpage() Err bitreich.org 70 i (format nil "~{~d~}" Err bitreich.org 70 i (loop for article in *articles* collect Err bitreich.org 70 i (create-article article :tiny t)))) Err bitreich.org 70 i Err bitreich.org 70 i+;; html generation of a tag homepage Err bitreich.org 70 i+(defun generate-tag-mainpage(articles-in-tag) Err bitreich.org 70 i+ (format nil "~{~d~}" Err bitreich.org 70 i+ (loop for article in *articles* Err bitreich.org 70 i+ when (member (getf article :id) articles-in-tag :test #'equal) Err bitreich.org 70 i+ collect (create-article article :tiny t)))) Err bitreich.org 70 i Err bitreich.org 70 i-;; Generate the items for the xml Err bitreich.org 70 i+;; xml generation of the items for the rss Err bitreich.org 70 i (defun generate-rss-item() Err bitreich.org 70 i (format nil "~{~d~}" Err bitreich.org 70 i (loop for article in *articles* collect Err bitreich.org 70 i@@ -107,9 +146,17 @@ Err bitreich.org 70 i (dolist (article *articles*) Err bitreich.org 70 i (generate (format nil "article-~d.html" (getf article :id)) Err bitreich.org 70 i (create-article article :tiny nil))) Err bitreich.org 70 i+ Err bitreich.org 70 i+ ;; produce index file for each tag Err bitreich.org 70 i+ (loop for tag in (the-tags) do Err bitreich.org 70 i+ (generate (format nil"tag-~d.html" (getf tag :NAME)) Err bitreich.org 70 i+ (generate-tag-mainpage (getf tag :VALUE)))) Err bitreich.org 70 i Err bitreich.org 70 i ;;(generate-file-rss) Err bitreich.org 70 i (save-file "rss.xml" (generate-rss)) Err bitreich.org 70 i+ Err bitreich.org 70 i ) Err bitreich.org 70 i Err bitreich.org 70 i (generate-site) Err bitreich.org 70 i+ Err bitreich.org 70 i+ Err bitreich.org 70 1diff --git a/template/layout.tpl b/template/layout.tpl /scm/cl-yag/file/template/layout.tpl.gph bitreich.org 70 i@@ -9,6 +9,7 @@ Err bitreich.org 70 i Err bitreich.org 70 i
Err bitreich.org 70 i Home Rss Err bitreich.org 70 i+

Tags : %%Tags%%

Err bitreich.org 70 i
Err bitreich.org 70 i Err bitreich.org 70 i
Err bitreich.org 70 1diff --git a/template/one-tag.tpl b/template/one-tag.tpl /scm/cl-yag/file/template/one-tag.tpl.gph bitreich.org 70 i@@ -0,0 +1 @@ Err bitreich.org 70 i+ %%Name%% Err bitreich.org 70 .