#!/usr/bin/env -S emacs -Q --batch --script (require 'ox) (require 'esxml) (defun thomaslabs-navbar () (sxml-to-xml `(nav (ul (li (a (@ (href "/")) "Home")) (li (a (@ (href "/z80/")) "Z80")) (li (a (@ (href "/programs/")) "programs")) (li (a (@ (href "/math/")) "math")) (li (a (@ (href "/privacy.html")) "contact & privacy policy")))))) (defun thomaslabs-footer () (sxml-to-xml `(footer (p "Copyright © 2021 - 2022 Thomas Albers Raviola" (br) "This website and its contents are published under the following licences, unless otherwise specified" (ul (li "Website and images:" (a (@ (href "https://creativecommons.org/licenses/by-nc-sa/4.0/")) "CC BY-NC-SA 4.0")) (li "Schematics:" (a (@ (href "https://creativecommons.org/licenses/by-nc-nd/4.0/")) "CC BY-NC-ND 4.0")) (li "Code:" (a (@ (href "https://www.gnu.org/licenses/gpl-3.0.html")) "GPL-3.0"))))))) (defun thomaslabs-template (contents info) (concat "\n" (sxml-to-xml `(html (@ (lang "en")) (head ,(org-html--build-meta-info `(:title ,(if (plist-get info :title) (format "Thomas' Labs | %s" (car (plist-get info :title))) "Thomas' Labs") ,@info)) ,(org-html--build-head info)) (body ,(if-let ((title (plist-get info :title))) `(header (p "Thomas' Labs") (h1 ,(org-export-data title info))) `(header (h1 "Thomas' Labs"))) ,(thomaslabs-navbar) (div (@ (class "content")) (main (article ,contents))) (hr) ,(thomaslabs-footer)))))) (defun math-preamble (&rest args) (sxml-to-xml '(div (h2 "Disclaimer") (p "This site as of now just a technology demonstration and its claims should not be taken as true (even though I myself am pretty confident they are")))) (defun math-sitemap (title entries) (concat (format "#+TITLE: %s\n#+SETUPFILE: ../math_options.org\n\n" title) (org-list-to-org entries))) (defun org-local-link-export (link description format info) (format "%s" link description)) (defun org-img-link-export (link description format info) (message "%s" info) (format "%s" link description)) (defun org-local-link-follow (&rest args) t) (org-link-set-parameters "local" :follow #'org-local-link-follow :export #'org-local-link-export) (org-link-set-parameters "img" :follow #'org-local-link-follow :export #'org-img-link-export) (org-export-define-derived-backend 'thomaslabs-html 'html :translate-alist '((template . thomaslabs-template))) (defun thomaslabs-publish-to-html (plist filename pub-dir) "Publish an org file to HTML, using the FILENAME as the output directory." (org-publish-org-to 'thomaslabs-html filename ".html" plist pub-dir)) (setq org-publish-project-alist `(("thomaslabs_html" :base-directory "~/Code/websites/thomaslabs/src" :publishing-directory "/srv/web/thomaslabs" :publishing-function thomaslabs-publish-to-html :with-toc nil :recursive t :language "en_US" :html-head-include-default-style nil :html-head-include-scripts nil :html-preamble nil :html-postamble nil :html-use-infojs nil :html-html5-fancy t :html-doctype "html5" :with-toc nil :section-numbers nil :with-latex dvisvgm) ("math_html" :base-directory "~/Code/websites/thomaslabs/math" :publishing-directory "/srv/web/thomaslabs/math" :publishing-function thomaslabs-publish-to-html :with-toc nil :recursive t :language "en_US" :html-head-include-default-style nil :html-head-include-scripts nil :html-preamble math-preamble :html-postamble nil :html-use-infojs nil :html-html5-fancy t :html-doctype "html5" :with-toc nil :auto-sitemap t :sitemap-filename "index.org" :sitemap-title "Math and Physics articles" :sitemap-function math-sitemap :section-numbers nil :with-latex dvisvgm) ("math_svg" :base-directory "~/Code/websites/thomaslabs/math/ltximg" :base-extension "svg" :publishing-directory "/srv/web/thomaslabs/math/ltximg" :publishing-function org-publish-attachment) ("math_css" :base-directory "~/Code/websites/thomaslabs/math" :base-extension "css" :publishing-directory "/srv/web/thomaslabs" :publishing-function org-publish-attachment) ("thomaslabs_css" :base-directory "~/Code/websites/thomaslabs/src" :base-extension "css" :publishing-directory "/srv/web/thomaslabs" :publishing-function org-publish-attachment) ("thomaslabs_media" :base-directory "~/Code/websites/thomaslabs/media" :base-extension "jpg\\|gif\\|png" :publishing-directory "/srv/web/thomaslabs/media" :publishing-function org-publish-attachment) ("thomaslabs" :components ("thomaslabs_html" "thomaslabs_media" "thomaslabs_css")) ("thomaslabs_math" :components ("math_html" "math_css" "math_svg")))) (plist-put org-format-latex-options :html-foreground "#cccccc") (org-publish "thomaslabs" t) (org-publish "thomaslabs_math" t) ;; (let ((opt "--delete -Prlpte 'ssh -p 1764'") ;; (src "'/srv/web/thomaslabs/'") ;; (dst "'root@thomaslabs.org:/var/www/math/'")) ;; (call-process-shell-command (format "rsync %s %s %s" opt src dst))) ;; (org-publish "thomaslabs" t) ;; (org-publish "math_svg" t)