iInitialization of the repository - 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 66a2b83f5bceef484963bd78efc2a2da98004f4e /scm/cl-yag/commit/66a2b83f5bceef484963bd78efc2a2da98004f4e.gph bitreich.org 70 1parent 33a711b470f9c3b71345444fff96f7103f933a77 /scm/cl-yag/commit/33a711b470f9c3b71345444fff96f7103f933a77.gph bitreich.org 70 hAuthor: Solene Rapenne URL:mailto:solene@srv.dataswamp.org bitreich.org 70 iDate: Sat, 30 Apr 2016 17:21:31 +0200 Err bitreich.org 70 i Err bitreich.org 70 iInitialization of the repository Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i A Makefile | 11 +++++++++++ Err bitreich.org 70 i A data/1.txt | 1 + Err bitreich.org 70 i A data/articles.lisp | 15 +++++++++++++++ Err bitreich.org 70 i A generator.lisp | 82 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i A static/style.css | 0 Err bitreich.org 70 i A template/article.tpl | 7 +++++++ Err bitreich.org 70 i A template/layout.tpl | 23 +++++++++++++++++++++++ Err bitreich.org 70 i Err bitreich.org 70 i7 files changed, 139 insertions(+), 0 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/Makefile b/Makefile /scm/cl-yag/file/Makefile.gph bitreich.org 70 i@@ -0,0 +1,11 @@ Err bitreich.org 70 i+all: Err bitreich.org 70 i+ mkdir -p output/static Err bitreich.org 70 i+ cp -fr static/* output/static/ Err bitreich.org 70 i+ sbcl --dynamic-space-size 60 --script generator.lisp Err bitreich.org 70 i+ Err bitreich.org 70 i+clean: Err bitreich.org 70 i+ rm -fr output/* Err bitreich.org 70 i+ Err bitreich.org 70 i+css: Err bitreich.org 70 i+ mkdir -p output/static Err bitreich.org 70 i+ cp -fr static/* output/static/ Err bitreich.org 70 1diff --git a/data/1.txt b/data/1.txt /scm/cl-yag/file/data/1.txt.gph bitreich.org 70 i@@ -0,0 +1 @@ Err bitreich.org 70 i+

This contains the text of the article with id 1

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@@ -0,0 +1,15 @@ Err bitreich.org 70 i+(defvar *config* Err bitreich.org 70 i+ (list Err bitreich.org 70 i+ :webmaster "Your author name here" Err bitreich.org 70 i+ :title "Your blog title here" Err bitreich.org 70 i+ )) Err bitreich.org 70 i+ Err bitreich.org 70 i+;; describes articles (ordered) Err bitreich.org 70 i+;; exemple => (list :id "4" :date "2015-05-04" :title "The article title" :author "Me" :tiny "Short description for home page") Err bitreich.org 70 i+;; :author can be omitted and will be replaced by webmaster value 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 "1" :date "29 April 2016" :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@@ -0,0 +1,82 @@ Err bitreich.org 70 i+(load "data/articles.lisp") Err bitreich.org 70 i+ Err bitreich.org 70 i+(defun replace-all (string part replacement &key (test #'char=)) Err bitreich.org 70 i+ "Returns a new string in which all the occurences of the part Err bitreich.org 70 i+is replaced with replacement." Err bitreich.org 70 i+ (with-output-to-string (out) Err bitreich.org 70 i+ (loop with part-length = (length part) Err bitreich.org 70 i+ for old-pos = 0 then (+ pos part-length) Err bitreich.org 70 i+ for pos = (search part string Err bitreich.org 70 i+ :start2 old-pos Err bitreich.org 70 i+ :test test) Err bitreich.org 70 i+ do (write-string string out Err bitreich.org 70 i+ :start old-pos Err bitreich.org 70 i+ :end (or pos (length string))) Err bitreich.org 70 i+ when pos do (write-string replacement out) Err bitreich.org 70 i+ while pos))) Err bitreich.org 70 i+; load a file as a string Err bitreich.org 70 i+(defun slurp-file(path) Err bitreich.org 70 i+ (with-open-file (stream path) Err bitreich.org 70 i+ (let ((data (make-string (file-length stream)))) Err bitreich.org 70 i+ (read-sequence data stream) Err bitreich.org 70 i+ data))) Err bitreich.org 70 i+ Err bitreich.org 70 i+; save a string in a file Err bitreich.org 70 i+(defun save-file(path data) Err bitreich.org 70 i+ (with-open-file (stream (concatenate 'string "output/" path) :direction :output :if-exists :supersede) Err bitreich.org 70 i+ (format stream data))) Err bitreich.org 70 i+ Err bitreich.org 70 i+;; simplify the str replace work Err bitreich.org 70 i+(defmacro template(before &body after) Err bitreich.org 70 i+ `(progn Err bitreich.org 70 i+ (setf output (replace-all output ,before ,@after)))) Err bitreich.org 70 i+ Err bitreich.org 70 i+;; simplify the declaration of a new page type Err bitreich.org 70 i+(defmacro prepare(template &body code) Err bitreich.org 70 i+ `(progn Err bitreich.org 70 i+ (let ((output (slurp-file ,template))) Err bitreich.org 70 i+ ,@code Err bitreich.org 70 i+ output))) Err bitreich.org 70 i+ Err bitreich.org 70 i+;; generates the html of one only article Err bitreich.org 70 i+(defun create-article(article &optional &key (tiny t)) Err bitreich.org 70 i+ (prepare "template/article.tpl" Err bitreich.org 70 i+ (template "%%Author%%" (if (member :author article) (getf article :author) (getf *config* :webmaster))) Err bitreich.org 70 i+ (template "%%Date%%" (getf article :date)) Err bitreich.org 70 i+ (template "%%Title%%" (getf article :title)) Err bitreich.org 70 i+ (template "%%Id%%" (getf article :id)) Err bitreich.org 70 i+ (template "%%Text%%" (if (and tiny (member :tiny article)) Err bitreich.org 70 i+ (getf article :tiny) (slurp-file (format nil "data/~d.txt" (getf article :id))))))) Err bitreich.org 70 i+ Err bitreich.org 70 i+;; Layout generation Err bitreich.org 70 i+(defun generate-layout(body) Err bitreich.org 70 i+ (let ((output (slurp-file "template/layout.tpl"))) Err bitreich.org 70 i+ (template "%%Title%%" (getf *config* :title)) Err bitreich.org 70 i+ (template "%%Body%%" body) Err bitreich.org 70 i+ output)) Err bitreich.org 70 i+ Err bitreich.org 70 i+; Homepage generation Err bitreich.org 70 i+(defun generate-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+; produce index.html Err bitreich.org 70 i+(defun generate-file-index() Err bitreich.org 70 i+ (save-file "index.html" Err bitreich.org 70 i+ (generate-layout (generate-mainpage)))) Err bitreich.org 70 i+ Err bitreich.org 70 i+; produce html files for articles Err bitreich.org 70 i+(defun generate-file-article(article) Err bitreich.org 70 i+ (save-file (format nil "article-~d.html" (getf article :id)) Err bitreich.org 70 i+ (generate-layout (create-article article :tiny nil)))) Err bitreich.org 70 i+ Err bitreich.org 70 i+; ENGINE START ! Err bitreich.org 70 i+(defun generate-site() Err bitreich.org 70 i+ (generate-file-index) Err bitreich.org 70 i+ (dolist (article *articles*) (generate-file-article article)) Err bitreich.org 70 i+ ;;(generate-file-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 1diff --git a/static/style.css b/static/style.css /scm/cl-yag/file/static/style.css.gph bitreich.org 70 1diff --git a/template/article.tpl b/template/article.tpl /scm/cl-yag/file/template/article.tpl.gph bitreich.org 70 i@@ -0,0 +1,7 @@ Err bitreich.org 70 i+
Err bitreich.org 70 i+
Err bitreich.org 70 i+ %%Author%% wrote "%%Title%%" on %%Date%% Err bitreich.org 70 i+
Err bitreich.org 70 i+

%%Text%%

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@@ -0,0 +1,23 @@ 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+ Err bitreich.org 70 i+ %%Title%% 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+ Home Rss Err bitreich.org 70 i+
Err bitreich.org 70 i+ Err bitreich.org 70 i+
Err bitreich.org 70 i+ %%Body%% 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+ Err bitreich.org 70 i+ Err bitreich.org 70 .