;;; Package -- make.el ;;; Commentary: ;;; ;;; Code: (package-initialize) (require 'org) (require 'cl-lib) (require 'ox) (require 'ox-html) (dolist (d '("public_html")) (unless (file-exists-p d) (make-directory d))) (require 'web-mode) (require 'hcl-mode) (ignore-errors (require 'ox-thtml)) ;; https://alhassy.github.io/AlBasmala.html#Floating-TOC (advice-add 'org-html--translate :before-until 'display-toc-as-toc) (defun display-toc-as-toc (phrase info) (when (equal phrase "Table of Contents") " TOC ")) ;; DOES NOT WORK https://github.com/alphapapa/unpackaged.el#export-to-html-with-useful-anchors (setq org-export-with-sub-superscripts '{} org-export-headline-levels 6 ; emacs-htmlize does not work when Emacs is ran in =script= mode unfortunately ;; org-html-html5-fancy t org-html-htmlize-output-type 'css) (defvar magic_rb/asset-include "\\(ttf\\|svg\\|jpg\\|gif\\|png\\|css\\|js\\|el\\|nb\\|ipynb\\|pdf\\|xml\\)") (cl-defstruct (magic_rb/card (:constructor magic_rb/card-create) (:copier nil)) link image description) (defun magic_rb/cards-with-tag (tag) (let ((symbol 'src-block) (path buffer-file-name)) (mapcar (lambda (object) (magic_rb/card-create :link (car (org-element-property :attr_clink object)) :image (car (org-element-property :attr_cimage object)) :description (org-element-property :value object))) (with-temp-buffer (insert-file-contents path) (org-element-map (org-element-parse-buffer) symbol (lambda (object) (if (string-equal (car (org-element-property :attr_ctag object)) tag) object nil)) nil nil nil t))))) (defun magic_rb/source-with-name (name symbol property) "" (string-trim (org-element-property property (car (let ((path buffer-file-name)) (with-temp-buffer (insert-file-contents path) (org-element-map (org-element-parse-buffer) symbol (lambda (object) (let ((block-name (org-element-property :name object))) (if (string-equal block-name name) object nil)))))))))) ;; (org-element-map (org-element-parse-buffer) 'paragraph ;; (lambda (paragraph) ;; (let ((parent (org-element-property :parent paragraph))) ;; (and (eq (org-element-type parent) 'section) ;; (let ((first-child (car (org-element-contents parent)))) ;; (eq first-child paragraph)) ;; ;; Return value. ;; paragraph)))) (defvar org-publish-project-alist) (setq org-publish-project-alist `( ;; Blog ("redalder-blog-content" :base-directory ,(expand-file-name "./blog/") :base-extension "org" :publishing-directory ,(expand-file-name "./public_html/blog") :recursive t :section-numbers nil :with-toc nil :with-date nil :html-template ,(templated-html-load-template "./templates/blog.html") :publishing-function org-html-publish-to-templated-html :headline-levels 5 :exclude "^\\(index.org\\|*.inc\\)" :auto-preamble t :auto-sitemap t :sitemap-folders ignore :sitemap-style list :sitemap-title "Magic_RB's blog" :sitemap-filename "sitemap.inc" :sitemap-sort-files anti-chronologically) ("redalder-blog-index" :base-directory ,(expand-file-name "./blog/") :root-directory ,(expand-file-name "./blog/") :recursive t :base-extension "org" :exclude "^.*$" :include ("index.org") :publishing-directory ,(expand-file-name "./public_html/blog/") :section-numbers nil :with-toc nil :with-date nil :html-template ,(templated-html-load-template "./templates/blog-index.html") :publishing-function org-html-publish-to-templated-html) ("redalder-blog" :components ("redalder-blog-content" "redalder-blog-index")) ;; Homepage ("redalder-homepage" :base-directory ,(expand-file-name "./home") :recursive nil :base-extension "org" :exclude "^.*$" :include ("index.org") :with-toc nil :publishing-directory ,(expand-file-name "./public_html/") :html-template ,(templated-html-load-template "./templates/index.html") :publishing-function org-html-publish-to-templated-html) ;; Contact ("redalder-contact" :base-directory ,(expand-file-name "./home") :recursive nil :base-extension "org" :exclude "^.*$" :include ("contact.org") :with-toc nil :publishing-directory ,(expand-file-name "./public_html/") :html-template ,(templated-html-load-template "./templates/empty.html") :publishing-function org-html-publish-to-templated-html) ;; Links ("redalder-links" :base-directory ,(expand-file-name "./home") :recursive nil :base-extension "org" :exclude "^.*$" :include ("links.org") :with-toc nil :publishing-directory ,(expand-file-name "./public_html/") :html-template ,(templated-html-load-template "./templates/empty.html") :publishing-function org-html-publish-to-templated-html) ;; Static images and css and js for redalder.org ("redalder-assets" :base-directory ,(expand-file-name "./assets/") :publishing-directory ,(expand-file-name "./public_html/") :recursive t :base-extension ,magic_rb/asset-include :publishing-function org-publish-attachment) ("nixng-examples" :base-directory ,(expand-file-name "./nixng/examples/") :base-extension "org" :publishing-directory ,(expand-file-name "./public_html/") :html-template ,(templated-html-load-template "./templates/example.html") :publishing-function org-html-publish-to-templated-html) ;; Static images and css and js for nixng.org ("nixng-assets" :base-directory ,(expand-file-name "./assets/") :publishing-directory ,(expand-file-name "./public_html/") :recursive t :base-extension ,magic_rb/asset-include :publishing-function org-publish-attachment) ;; top-level trigger ("redalder-publish" :components ("redalder-blog" "redalder-assets" "redalder-homepage" "redalder-contact" "redalder-links")) ("nixng-publish" :components ("nixng-assets" "nixng-examples")))) (defun magic_rb/publish-website (website) "Publish WEBSITE." (cond ((string= website "redalder.org") (org-publish "redalder-publish" t)) ((string= website "nixng.org") (org-publish "nixng-publish")))) (provide 'make) ;;; make.el ends here