ox-publish.el: Add `org-html-publish-to-html' as the default publishing function
* lisp/org-macs.el (org-plist-delete-all): New function. * lisp/ox-publish.el (org-publish-file): Add `org-html-publish-to-html' as the default publishing function. * testing/lisp/test-ox-publish.el (org-test-publish): Use `org-plist-delete-all' to remove properties from the plist. Reported-by: Christopher W. Ryan See <https://list.orgmode.org/CAELBRWLgV-s6SGX=cevtN7iW8htwiLezR469T-cGMWE_6iX1+A@mail.gmail.com>
This commit is contained in:
parent
7e1745d744
commit
3a291b0f0e
|
@ -538,6 +538,11 @@ that may remove elements by altering the list structure."
|
||||||
(setq list (delete (pop elts) list)))
|
(setq list (delete (pop elts) list)))
|
||||||
list)
|
list)
|
||||||
|
|
||||||
|
(defun org-plist-delete-all (plist props)
|
||||||
|
"Delete all elements in PROPS from PLIST."
|
||||||
|
(dolist (e props plist)
|
||||||
|
(setq plist (org-plist-delete plist e))))
|
||||||
|
|
||||||
(defun org-plist-delete (plist property)
|
(defun org-plist-delete (plist property)
|
||||||
"Delete PROPERTY from PLIST.
|
"Delete PROPERTY from PLIST.
|
||||||
This is in contrast to merely setting it to 0."
|
This is in contrast to merely setting it to 0."
|
||||||
|
|
|
@ -617,7 +617,8 @@ files, when entire projects are published (see
|
||||||
(abbreviate-file-name filename))))
|
(abbreviate-file-name filename))))
|
||||||
(project-plist (cdr project))
|
(project-plist (cdr project))
|
||||||
(publishing-function
|
(publishing-function
|
||||||
(pcase (org-publish-property :publishing-function project)
|
(pcase (org-publish-property :publishing-function project
|
||||||
|
'org-html-publish-to-html)
|
||||||
(`nil (user-error "No publishing function chosen"))
|
(`nil (user-error "No publishing function chosen"))
|
||||||
((and f (pred listp)) f)
|
((and f (pred listp)) f)
|
||||||
(f (list f))))
|
(f (list f))))
|
||||||
|
|
|
@ -22,12 +22,16 @@
|
||||||
|
|
||||||
;;; Helper functions
|
;;; Helper functions
|
||||||
|
|
||||||
(defun org-test-publish (properties handler)
|
(defun org-test-publish (properties handler &optional remove-prop)
|
||||||
"Publish a project defined by PROPERTIES.
|
"Publish a project defined by PROPERTIES.
|
||||||
Call HANDLER with the publishing directory as its sole argument.
|
Call HANDLER with the publishing directory as its sole argument.
|
||||||
Unless set otherwise in PROPERTIES, `:base-directory' is set to
|
Unless set otherwise in PROPERTIES, `:base-directory' is set to
|
||||||
\"examples/pub/\" sub-directory from test directory and
|
\"examples/pub/\" sub-directory from test directory and
|
||||||
`:publishing-function' is set to `org-publish-attachment'."
|
`:publishing-function' is set to `org-publish-attachment'.
|
||||||
|
Because `org-publish-property' uses `plist-member' to check the
|
||||||
|
existence of a property, a property with a value nil is different
|
||||||
|
from a non-existing property. Properties in REMOVE-PROP will be
|
||||||
|
removed from the final plist."
|
||||||
(declare (indent 1))
|
(declare (indent 1))
|
||||||
(let* ((org-publish-use-timestamps-flag nil)
|
(let* ((org-publish-use-timestamps-flag nil)
|
||||||
(org-publish-cache nil)
|
(org-publish-cache nil)
|
||||||
|
@ -35,13 +39,15 @@ Unless set otherwise in PROPERTIES, `:base-directory' is set to
|
||||||
(pub-dir (make-temp-file "org-test" t))
|
(pub-dir (make-temp-file "org-test" t))
|
||||||
(org-publish-timestamp-directory
|
(org-publish-timestamp-directory
|
||||||
(expand-file-name ".org-timestamps/" pub-dir))
|
(expand-file-name ".org-timestamps/" pub-dir))
|
||||||
|
(props (org-plist-delete-all
|
||||||
|
(org-combine-plists
|
||||||
|
`(:base-directory ,base-dir
|
||||||
|
:publishing-function org-publish-attachment)
|
||||||
|
properties
|
||||||
|
`(:publishing-directory ,pub-dir))
|
||||||
|
remove-prop))
|
||||||
(project
|
(project
|
||||||
`("test" ,@(org-combine-plists
|
`("test" ,@props)))
|
||||||
`(:base-directory
|
|
||||||
,base-dir
|
|
||||||
:publishing-function org-publish-attachment)
|
|
||||||
properties
|
|
||||||
`(:publishing-directory ,pub-dir)))))
|
|
||||||
(unwind-protect
|
(unwind-protect
|
||||||
(progn
|
(progn
|
||||||
(org-publish-projects (list project))
|
(org-publish-projects (list project))
|
||||||
|
@ -92,7 +98,19 @@ Unless set otherwise in PROPERTIES, `:base-directory' is set to
|
||||||
(lambda (dir)
|
(lambda (dir)
|
||||||
(remove ".org-timestamps"
|
(remove ".org-timestamps"
|
||||||
(cl-remove-if #'file-directory-p
|
(cl-remove-if #'file-directory-p
|
||||||
(directory-files dir))))))))
|
(directory-files dir)))))))
|
||||||
|
|
||||||
|
;; Check the default trasformation function,
|
||||||
|
;; org-html-publish-to-html. Because org-test-publish uses
|
||||||
|
;; org-publish-attachment by default, we must not just override with
|
||||||
|
;; nil but tell it to remove the :publishing-function from the list.
|
||||||
|
(should
|
||||||
|
(let ((func (lambda (dir)
|
||||||
|
(with-temp-buffer
|
||||||
|
(insert-file-contents (expand-file-name "a.html" dir))
|
||||||
|
(buffer-string)))))
|
||||||
|
(equal (org-test-publish nil func '(:publishing-function))
|
||||||
|
(org-test-publish '(:publishing-function org-html-publish-to-html) func)))))
|
||||||
|
|
||||||
|
|
||||||
;;; Site-map
|
;;; Site-map
|
||||||
|
|
Loading…
Reference in New Issue