SMOLNET PORTAL home about changes
i- Add RSS generation - Code enhancement - Escaping ~ which were problematic - 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 a6f07ecaad846e608500efa5cb5b3913a43db7e0	/scm/cl-yag/commit/a6f07ecaad846e608500efa5cb5b3913a43db7e0.gph	bitreich.org	70
1parent e0a4614444c18e9840e4fa30d832da9fafedfa5e	/scm/cl-yag/commit/e0a4614444c18e9840e4fa30d832da9fafedfa5e.gph	bitreich.org	70
hAuthor: Solene Rapenne <solene@dataswamp.org>	URL:mailto:solene@dataswamp.org	bitreich.org	70
iDate:   Sun,  1 May 2016 00:43:31 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
i- Add RSS generation	Err	bitreich.org	70
i- Code enhancement	Err	bitreich.org	70
i- Escaping ~ which were problematic	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M README.md                           |       8 ++++++--	Err	bitreich.org	70
i  M data/articles.lisp                  |      11 ++++++++++-	Err	bitreich.org	70
i  M generator.lisp                      |      80 ++++++++++++++++++++++---------	Err	bitreich.org	70
i  A template/rss-item.tpl               |       5 +++++	Err	bitreich.org	70
i  A template/rss.tpl                    |      10 ++++++++++	Err	bitreich.org	70
i	Err	bitreich.org	70
i5 files changed, 88 insertions(+), 26 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/README.md b/README.md	/scm/cl-yag/file/README.md.gph	bitreich.org	70
i@@ -39,7 +39,7 @@ I tried to make it "hacking friendly" so it's very extensible.	Err	bitreich.org	70
i Here is an example code if you want to add something like a panel on the layout.	Err	bitreich.org	70
i 	Err	bitreich.org	70
i + Add a string for the replacement to occure, like %%Panel%% in **template/layout.tpl** (because we want the panel on every page)	Err	bitreich.org	70
i-+ In **generator.lisp** modify the function *generate-layout* to add "**(template "%%Panel%%" (slurp-file "template/panel.tpl"))**" after one template function call	Err	bitreich.org	70
i++ In **generator.lisp** modify the function *generate-layout* to add "**(template "%%Panel%%" (load-file "template/panel.tpl"))**" after one template function call	Err	bitreich.org	70
i + Create **template/panel.tpl** with the html	Err	bitreich.org	70
i 	Err	bitreich.org	70
i (note : you can also directly add your text inside the layout template file instead of including another file)	Err	bitreich.org	70
i@@ -50,7 +50,7 @@ You may want to have some dedicated page for some reason, reusing the website la	Err	bitreich.org	70
i 	Err	bitreich.org	70
i In **generate-site** function we can load a file, apply the template and save it in the output. It may look like this	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-    (generate "somepage.html" (slurp-file "data/mypage.html"))	Err	bitreich.org	70
i+    (generate "somepage.html" (load-file "data/mypage.html"))	Err	bitreich.org	70
i   	Err	bitreich.org	70
i This will produce the file somepage.html in the output folder	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -66,3 +66,7 @@ Here is a tip to produce html files from markdown using emacs	Err	bitreich.org	70
i 4. run *make* to update your site	Err	bitreich.org	70
i 	Err	bitreich.org	70
i The generator don't do it natively because I didn't want it to have dependencies. You can use what you want to produces the html files.	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# Known limitation	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+The application will crash if you use a single "**~**" caracter inside one data structure in **articles.lisp** files. This is due to the format function trying to interpret the ~ symbol while we just one a ~ symbol. This symbol in the others files are automatically replaced by ~~ which produce a single ~. So, if you want to have a "~" as a title/url/author/description/short/date you have to double it. It may be interestind to sanitize it in the tool maybe.	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@@ -1,15 +1,24 @@	Err	bitreich.org	70
i+;; WARNING caracter "~" must be escaped when used in this file	Err	bitreich.org	70
i+;; you have to type ~~ for one ~ to escape it	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+;; define informations about your blog	Err	bitreich.org	70
i+;; used for the RSS generation and some variables replacements in the layout	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+   :description "Yet another website on the net"	Err	bitreich.org	70
i+   :url "https://my.website/~~user/";	Err	bitreich.org	70
i    ))	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-;; describes articles (ordered)	Err	bitreich.org	70
i+;; describes articles (ordered on the website as they are displayed here, the first in list is the top of the website)	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 "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    ))	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@@ -13,12 +13,16 @@	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 and return it 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+;; 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+  (replace-all 	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 	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@@ -33,54 +37,84 @@	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+     (let ((output (load-file ,template)))	Err	bitreich.org	70
i        ,@code	Err	bitreich.org	70
i        output)))	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+;; simplify the file saving by using the layout	Err	bitreich.org	70
i+(defmacro generate(name &body data)	Err	bitreich.org	70
i+  `(progn	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+	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 (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 "%%Author%%" (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+                                    (getf article :tiny) (load-file (format nil "data/~d.txt" (getf article :id)))))))	Err	bitreich.org	70
i 	Err	bitreich.org	70
i ;; return a html string	Err	bitreich.org	70
i ;; produce the code of a whole page with title+layout with the parameter as the content	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+  (prepare "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 	Err	bitreich.org	70
i ;; Homepage generation	Err	bitreich.org	70
i-;; generate each article and concatenate the whole	Err	bitreich.org	70
i (defun generate-mainpage()	Err	bitreich.org	70
i+  (prepare "template/layout.tpl"	Err	bitreich.org	70
i+           (template "%%Body%%" 	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+           (template "%%Title%%" (getf *config* :title))))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+;; Generate the items for the xml	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-                (create-article article :tiny t))))	Err	bitreich.org	70
i+                (prepare "template/rss-item.tpl"	Err	bitreich.org	70
i+                         (template "%%Title%%" (getf article :title))	Err	bitreich.org	70
i+                         (template "%%Description%%" (getf article :short ""))	Err	bitreich.org	70
i+                         (template "%%Url%%"	Err	bitreich.org	70
i+                                   (format nil "~d/article-~d.html"	Err	bitreich.org	70
i+                                           (getf *config* :url)	Err	bitreich.org	70
i+                                           (getf article :id)))))))	Err	bitreich.org	70
i+  	Err	bitreich.org	70
i+;; Generate the rss xml data	Err	bitreich.org	70
i+(defun generate-rss()	Err	bitreich.org	70
i+  (prepare "template/rss.tpl"	Err	bitreich.org	70
i+           (template "%%Description%%" (getf *config* :description))	Err	bitreich.org	70
i+           (template "%%Title%%" (getf *config* :title))	Err	bitreich.org	70
i+           (template "%%Url%%" (getf *config* :url))	Err	bitreich.org	70
i+           (template "%%Items%%" (generate-rss-item))))	Err	bitreich.org	70
i 	Err	bitreich.org	70
i 	Err	bitreich.org	70
i ;; ENGINE START !	Err	bitreich.org	70
i ;; This is function called when running the tool	Err	bitreich.org	70
i (defun generate-site()	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-  ; produce index.html	Err	bitreich.org	70
i-  (generate "index.html"	Err	bitreich.org	70
i-            (generate-mainpage))	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-  ; produce each article file	Err	bitreich.org	70
i+  ;; produce index.html	Err	bitreich.org	70
i+  (save-file "index.html"	Err	bitreich.org	70
i+             (generate-mainpage))	Err	bitreich.org	70
i+  	Err	bitreich.org	70
i+  ;; produce each article file	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+  	Err	bitreich.org	70
i   ;;(generate-file-rss)	Err	bitreich.org	70
i-  ;;not done yet	Err	bitreich.org	70
i+  (save-file "rss.xml"	Err	bitreich.org	70
i+             (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
1diff --git a/template/rss-item.tpl b/template/rss-item.tpl	/scm/cl-yag/file/template/rss-item.tpl.gph	bitreich.org	70
i@@ -0,0 +1,5 @@	Err	bitreich.org	70
i+<item>	Err	bitreich.org	70
i+  <title>%%Title%%</title>	Err	bitreich.org	70
i+  <description>%%Description%%</description>	Err	bitreich.org	70
i+  <link>%%Url%%</link>	Err	bitreich.org	70
i+</item>	Err	bitreich.org	70
1diff --git a/template/rss.tpl b/template/rss.tpl	/scm/cl-yag/file/template/rss.tpl.gph	bitreich.org	70
i@@ -0,0 +1,10 @@	Err	bitreich.org	70
i+<?xml version="1.0" encoding="UTF-8"?> 	Err	bitreich.org	70
i+<rss version="2.0">	Err	bitreich.org	70
i+  <channel>	Err	bitreich.org	70
i+    <title>%%Title%%</title>	Err	bitreich.org	70
i+    <description>%%Description%%</description>	Err	bitreich.org	70
i+    <link>%%Url%%</link>	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+    %%Items%%	Err	bitreich.org	70
i+  </channel>	Err	bitreich.org	70
i+</rss>	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/cl-yag/commit/a6f07ecaad846e6...
Content-Typetext/plain; charset=utf-8