iAdd choice of html conveter - 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 4ef4f5a4e82381039878f615749ad4de40f29c30 /scm/cl-yag/commit/4ef4f5a4e82381039878f615749ad4de40f29c30.gph bitreich.org 70 1parent 76cfe4f9da795b24680eba4e8c940e042b1d6e11 /scm/cl-yag/commit/76cfe4f9da795b24680eba4e8c940e042b1d6e11.gph bitreich.org 70 hAuthor: solene rapenne URL:mailto:solene@dataswamp.org bitreich.org 70 iDate: Fri, 15 Dec 2017 00:49:21 +0100 Err bitreich.org 70 i Err bitreich.org 70 iAdd choice of html conveter Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 6 ------ Err bitreich.org 70 i M data/articles.lisp | 12 ++++++++++-- Err bitreich.org 70 i M generator.lisp | 62 +++++++++++++++++++++++-------- Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 56 insertions(+), 24 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@@ -1,9 +1,6 @@ Err bitreich.org 70 i LISP= sbcl Err bitreich.org 70 i-MD= multimarkdown -t html -o Err bitreich.org 70 i Err bitreich.org 70 i HTMLDIR= temp/data Err bitreich.org 70 i-ARTICLES!= ls data/*.md Err bitreich.org 70 i-HTML= $(ARTICLES:.md=.html) Err bitreich.org 70 i Err bitreich.org 70 i all: clean dirs html Err bitreich.org 70 i Err bitreich.org 70 i@@ -16,9 +13,6 @@ dirs: Err bitreich.org 70 i mkdir -p "output/html/static" Err bitreich.org 70 i mkdir -p "output/gopher" Err bitreich.org 70 i Err bitreich.org 70 i-.SUFFIXES: .md .html Err bitreich.org 70 i-.md.html: Err bitreich.org 70 i- $(MD) "$(HTMLDIR)/$(@F)" "$<" Err bitreich.org 70 i Err bitreich.org 70 i clean: Err bitreich.org 70 i rm -fr output/html/* output/gopher/* "temp" 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@@ -11,6 +11,7 @@ Err bitreich.org 70 i :url "https://my.website/~~user/" ;; the trailing slash is mandatory! RSS links will fail without it. Notice the '~~' to produce a literal '~' Err bitreich.org 70 i :rss-item-number 10 ;; limit total amount of items in RSS feed to 10 Err bitreich.org 70 i :date-format "%DayNumber %MonthName %Year" ;; format for date %DayNumber %DayName %MonthNumber %MonthName %Year Err bitreich.org 70 i+ :default-converter :markdown2 Err bitreich.org 70 i :html t ;; 't' to enable export to a html website / 'nil' to disable Err bitreich.org 70 i :gopher t ;; 't' to enable export to a gopher website / 'nil' to disable Err bitreich.org 70 i :gopher-path "/user" ;; absolute path of your gopher directory Err bitreich.org 70 i@@ -23,8 +24,13 @@ Err bitreich.org 70 i )) Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i-(converter :name :markdown :extension ".md" :command "peg-markdown -o %IN") Err bitreich.org 70 i-(converter :name :markdown2 :extension ".md" :command "multimarkdown -o %IN") Err bitreich.org 70 i+(converter :name :markdown :extension ".md" :command "peg-markdown -t html -o %OUT data/%IN") Err bitreich.org 70 i+(converter :name :markdown2 :extension ".md" :command "multimarkdown -t html -o %OUT data/%IN") Err bitreich.org 70 i+(converter :name :org-mode :extension ".org" Err bitreich.org 70 i+ :command (concatenate 'string Err bitreich.org 70 i+ "emacs data/%IN --batch --eval '(with-temp-buffer (org-mode) " Err bitreich.org 70 i+ "(insert-file \"%IN\") (org-html-export-as-html nil nil nil t)" Err bitreich.org 70 i+ "(princ (buffer-string)))' --kill | tee %OUT")) Err bitreich.org 70 i Err bitreich.org 70 i ;; Define your articles and their display-order on the website below. Err bitreich.org 70 i ;; Display Order is 'lifo', i.e. the top entry in this list gets displayed as the topmost entry. Err bitreich.org 70 i@@ -40,6 +46,8 @@ Err bitreich.org 70 i ;; :tiny can be omitted. If so, the article's full text gets displayed on the all-articles view. (most people don't want this.) Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i+(post :title "test" Err bitreich.org 70 i+ :id "t" :date "20171214" :tag "f" :converter :org-mode) Err bitreich.org 70 i ;; CSS Err bitreich.org 70 i (post :title "CSS For cl-yag" Err bitreich.org 70 i :id "css" :date "20171202" :tag "cl-yag" Err bitreich.org 70 1diff --git a/generator.lisp b/generator.lisp /scm/cl-yag/file/generator.lisp.gph bitreich.org 70 i@@ -9,11 +9,13 @@ Err bitreich.org 70 i "October" "November" "December")) Err bitreich.org 70 i Err bitreich.org 70 i ;; structure to store links Err bitreich.org 70 i-(defstruct article title tag date id tiny author rawdate) Err bitreich.org 70 i+(defstruct article title tag date id tiny author rawdate converter) Err bitreich.org 70 i (defstruct converter name command extension) Err bitreich.org 70 i Err bitreich.org 70 i ;;;; FUNCTIONS Err bitreich.org 70 i Err bitreich.org 70 i+(require 'asdf) Err bitreich.org 70 i+ Err bitreich.org 70 i ;; return the day of the week Err bitreich.org 70 i (defun get-day-of-week(day month year) Err bitreich.org 70 i (multiple-value-bind Err bitreich.org 70 i@@ -39,22 +41,26 @@ Err bitreich.org 70 i :year year)) Err bitreich.org 70 i nil)) Err bitreich.org 70 i Err bitreich.org 70 i-(defun post(&optional &key title tag date id (tiny nil) (author nil)) Err bitreich.org 70 i+(defun post(&optional &key title tag date id (tiny nil) (author nil) (converter nil)) Err bitreich.org 70 i (push (make-article :title title Err bitreich.org 70 i :tag tag Err bitreich.org 70 i :date (date-parse date) Err bitreich.org 70 i :rawdate date Err bitreich.org 70 i :tiny tiny Err bitreich.org 70 i :author author Err bitreich.org 70 i- :id id) Err bitreich.org 70 i+ :id id Err bitreich.org 70 i+ :converter converter) Err bitreich.org 70 i *articles*)) Err bitreich.org 70 i Err bitreich.org 70 i ;; we add a converter to the list of the one availables Err bitreich.org 70 i (defun converter(&optional &key name command extension) Err bitreich.org 70 i- (push (make-converter :name name Err bitreich.org 70 i- :command command Err bitreich.org 70 i- :extension extension) Err bitreich.org 70 i- *converters*)) Err bitreich.org 70 i+ (setf *converters* Err bitreich.org 70 i+ (append Err bitreich.org 70 i+ (list name Err bitreich.org 70 i+ (make-converter :name name Err bitreich.org 70 i+ :command command Err bitreich.org 70 i+ :extension extension)) Err bitreich.org 70 i+ *converters*))) Err bitreich.org 70 i Err bitreich.org 70 i ;; load data from metadata and load config Err bitreich.org 70 i (load "data/articles.lisp") Err bitreich.org 70 i@@ -117,6 +123,23 @@ 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+;; get the converter object of "article" Err bitreich.org 70 i+(defmacro with-converter(&body code) Err bitreich.org 70 i+ `(progn Err bitreich.org 70 i+ (let ((converter-name (if (article-converter article) Err bitreich.org 70 i+ (article-converter article) Err bitreich.org 70 i+ (getf *config* :default-converter)))) Err bitreich.org 70 i+ (let ((converter-object (getf *converters* converter-name))) Err bitreich.org 70 i+ ,@code)))) Err bitreich.org 70 i+ Err bitreich.org 70 i+(defun use-converter-to-html(article) Err bitreich.org 70 i+ (with-converter Err bitreich.org 70 i+ (let ((output (converter-command converter-object))) Err bitreich.org 70 i+ (ensure-directories-exist "temp/data/") Err bitreich.org 70 i+ (template "%IN" (concatenate 'string (article-id article) (converter-extension converter-object))) Err bitreich.org 70 i+ (template "%OUT" (concatenate 'string "temp/data/" (article-id article) ".html")) Err bitreich.org 70 i+ (uiop:run-program output)))) Err bitreich.org 70 i+ Err bitreich.org 70 i ;; format the date Err bitreich.org 70 i (defun date-format(format date) Err bitreich.org 70 i (let ((output format)) Err bitreich.org 70 i@@ -240,21 +263,25 @@ Err bitreich.org 70 i Err bitreich.org 70 i ;; We do all the website Err bitreich.org 70 i (defun create-html-site() Err bitreich.org 70 i- ;; produce index.html Err bitreich.org 70 i- (generate "output/html/index.html" (generate-semi-mainpage)) Err bitreich.org 70 i- Err bitreich.org 70 i- ;; produce index-titles.html where there are only articles titles Err bitreich.org 70 i- (generate "output/html/index-titles.html" (generate-semi-mainpage :no-text t)) Err bitreich.org 70 i Err bitreich.org 70 i ;; produce each article file Err bitreich.org 70 i (loop for article in *articles* Err bitreich.org 70 i do Err bitreich.org 70 i+ ;; use the article's converter to get html code of it Err bitreich.org 70 i+ (use-converter-to-html article) Err bitreich.org 70 i+ Err bitreich.org 70 i (generate (format nil "output/html/~d-~d.html" Err bitreich.org 70 i (date-format "%Year-%MonthNumber-%DayNumber" Err bitreich.org 70 i (article-date article)) Err bitreich.org 70 i (article-id article)) Err bitreich.org 70 i (create-article article :tiny nil) Err bitreich.org 70 i :title (concatenate 'string (getf *config* :title) " : " (article-title article)))) Err bitreich.org 70 i+ Err bitreich.org 70 i+ ;; produce index.html Err bitreich.org 70 i+ (generate "output/html/index.html" (generate-semi-mainpage)) Err bitreich.org 70 i+ Err bitreich.org 70 i+ ;; produce index-titles.html where there are only articles titles Err bitreich.org 70 i+ (generate "output/html/index-titles.html" (generate-semi-mainpage :no-text t)) 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 (articles-by-tag) do Err bitreich.org 70 i@@ -293,10 +320,12 @@ Err bitreich.org 70 i output)) Err bitreich.org 70 i Err bitreich.org 70 i ;; produce each article file (only a copy/paste in fact) Err bitreich.org 70 i- (dolist (article *articles*) Err bitreich.org 70 i- (let ((id (article-id article))) Err bitreich.org 70 i- (save-file (format nil "output/gopher/article-~d.txt" id) Err bitreich.org 70 i- (load-file (format nil "data/~d.md" id))))) Err bitreich.org 70 i+ (loop for article in *articles* Err bitreich.org 70 i+ do Err bitreich.org 70 i+ (with-converter Err bitreich.org 70 i+ (let ((id (article-id article))) Err bitreich.org 70 i+ (save-file (format nil "output/gopher/article-~d.txt" id) Err bitreich.org 70 i+ (load-file (format nil "data/~d~d" id (converter-extension converter-object))))))) Err bitreich.org 70 i Err bitreich.org 70 i ) Err bitreich.org 70 i Err bitreich.org 70 i@@ -313,4 +342,5 @@ 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 i (quit) Err bitreich.org 70 .