Skip to content
Snippets Groups Projects

Add support for content/*.lisp files as well as content/*.html

Closed Dave Cooper requested to merge dcooper/cl-site:master into master
7 files
+ 95
52
Compare changes
  • Side-by-side
  • Inline
Files
7
+ 51
6
@@ -63,24 +63,62 @@
(append (acons :page-content (render-template* content-text) page-context) *GLOBAL-CONTEXT*)
output-stream))))))
(defun process-pages (pages)
(format t "Processing pages..~%")
(format t "Processing pages...~%")
(preprocess-lisp-pages pages)
(generate-news)
(let ((template-path (pathname (merge-pathnames *LAYOUT-DIR* *DEFAULT-PAGE-TEMPLATE*))))
(ensure-directories-exist *OUTPUT-DIR*)
(loop for page in pages
do
(format t "Generating ~A~%" (cdr (assoc :content page)))
(render-page page template-path))
(setq pages (populate-pages)) ;; to pick up any newly generated .html files.
(dolist (page pages)
(let ((page-pathname (merge-pathnames (page-content page) *pages-dir*)))
(when (string-equal (pathname-type page-pathname) "html")
(format t "Rendering ~A~%" (cdr (assoc :content page)))
(render-page page template-path)
(when (probe-file (make-pathname :defaults page-pathname :type "lisp"))
(format t "Deleting temporary generated ~a~%" (file-namestring page-pathname))
(delete-file page-pathname)
))))
(format t "Done.~%")))
(defun preprocess-lisp-pages (pages)
(dolist (page pages)
(let* ((lisp-file (page-content page)))
(when (string-equal (pathname-type lisp-file) "lisp")
(let ((html-file (make-pathname :defaults lisp-file :type "html")))
(format t "Loading ~a and creating fresh ~a...~%"
(file-namestring lisp-file) html-file)
(let (*computed-page-content*)
(load (merge-pathnames lisp-file *pages-dir*))
(with-open-file (out (merge-pathnames html-file *pages-dir*) :if-exists :supersede
:if-does-not-exist :create :direction :output)
(let ((headers (getf *computed-page-content* :headers)))
(mapc #'(lambda(key value) (format out "~a: ~a~%" key value))
(plist-keys headers)(plist-values headers)))
(format out "---~%")
(write-string (getf *computed-page-content* :html-string) out))))))))
;; Process news
(defparameter +edit-news-link+ "https://gitlab.common-lisp.net/clo/cl-site/edit/master/content/news.md")
;;
;; FLAG -- If news.html is converted to news.lisp (a la about.lisp)
;; then the following only will have to deal with generating the
;; newsbox. The news.lisp would have to include the hardcoded HTML
;; which is injected below as well.
;;
(defun generate-news ()
(let ((html
(markdown:parse-file (merge-pathnames "news.md" *PAGES-DIR*))))
(markdown.cl:parse-file (merge-pathnames "news.md" *PAGES-DIR*))))
(with-open-file (f (merge-pathnames "news.html" *PAGES-DIR*)
:direction :output
:if-does-not-exist :create
@@ -156,3 +194,10 @@
;; else
(next-node)))))))
(plump:serialize news nil))))
Loading