diff --git a/core/core-documentation.el b/core/core-documentation.el index 120c81fbd15c..bec962c3114c 100644 --- a/core/core-documentation.el +++ b/core/core-documentation.el @@ -13,6 +13,7 @@ (require 'ox-publish) (require 's) (require 'dash) +(require 'f) (defvar spacemacs--category-names '(("config-files" . "Configuration files") @@ -85,11 +86,49 @@ (format "%s\n%s%s" beginning-of-content toc-string rest-of-content) content))) +(defun spacemacs//add-org-meta-readtheorg-css (filename) + (let* ((head-css-extra-readtheorg-head (concat + "#+HTML_HEAD_EXTRA:" + "\n")) + (progn (goto-char (point-min)) + (delete-matching-lines "\\+HTML_HEAD_EXTRA\\:.*\\/css\\/readtheorg\\.css") + (goto-char (point-min)) + (if (search-forward "#+TITLE:" nil t nil) + (beginning-of-line 2) + (error "Can't find #+TITLE:")) + (insert (concat head-css-extra-readtheorg-head + (f-relative user-emacs-directory + (file-name-directory filename)) + head-css-extra-readtheorg-tail))))) + +(defun spacemacs//pub-doc-html-advice (origfunc &rest args) + (save-current-buffer + (save-excursion + (let* ((filename (car (nthcdr 1 args))) + (visitingp (find-buffer-visiting filename))) + ;; Temporary "unvisit" the visited org files. + (when visitingp (with-current-buffer visitingp (setq buffer-file-name nil))) + (with-temp-buffer + (save-match-data + (insert-file-contents filename t) + (spacemacs//add-org-meta-readtheorg-css filename) + + + + (apply origfunc args) + (not-modified))) + ;; Restore `buffer-file-name' for the buffers that previously visited the org files. + (when visitingp (with-current-buffer visitingp (setq buffer-file-name filename))))))) + (defun spacemacs/publish-doc () "Publish the documentation to doc/export/." (interactive) (advice-add 'org-html-toc :filter-return #'spacemacs//format-toc) (advice-add 'org-html-template :filter-return #'spacemacs//format-content) + (advice-add 'org-html-publish-to-html :around #'spacemacs//pub-doc-html-advice) (let* ((header " @@ -144,6 +183,7 @@ :publishing-function org-publish-attachment)))) (org-publish-project "spacemacs")) (advice-remove 'org-html-toc #'spacemacs//format-toc) - (advice-remove 'org-html-template #'spacemacs//format-content)) + (advice-remove 'org-html-template #'spacemacs//format-content) + (advice-remove 'org-html-publish-to-html #'spacemacs//pub-doc-html-advice)) (provide 'core-documentation)