Hi,
I've also added a test case for the default translation function.
I'm not sure it's justified to add a new func `org-plist-delete-all`
just for this.
We can move the function to the test file if we don't need it in org-marcs.
--
yashi
From 2fdf67b4ddfac97acb2b685957b6e4ca26474fb4 Mon Sep 17 00:00:00 2001
From: Yasushi SHOJI <[email protected]>
Date: Sun, 19 Sep 2021 18:56:19 +0900
Subject: [PATCH 1/3] ox-publish: Set default transformation
As documented in Org Manual, we should have the default transformation
function set to org-html-publish-to-html.
Signed-off-by: Yasushi SHOJI <[email protected]>
---
lisp/ox-publish.el | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lisp/ox-publish.el b/lisp/ox-publish.el
index c25dd5473..99b1dca81 100644
--- a/lisp/ox-publish.el
+++ b/lisp/ox-publish.el
@@ -617,7 +617,8 @@ files, when entire projects are published (see
(abbreviate-file-name filename))))
(project-plist (cdr project))
(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"))
((and f (pred listp)) f)
(f (list f))))
--
2.33.0
From 4978f588443f0ac27c75676697c2cc1b8beae668 Mon Sep 17 00:00:00 2001
From: Yasushi SHOJI <[email protected]>
Date: Mon, 20 Sep 2021 02:09:29 +0900
Subject: [PATCH 2/3] org-macs: Introduce org-plist-delete-all
In some cases we want to remove multiple properties from a plist.
This function just for that.
Signed-off-by: Yasushi SHOJI <[email protected]>
---
lisp/org-macs.el | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/lisp/org-macs.el b/lisp/org-macs.el
index 18ae642c7..bd4bb5066 100644
--- a/lisp/org-macs.el
+++ b/lisp/org-macs.el
@@ -538,6 +538,11 @@ that may remove elements by altering the list structure."
(setq list (delete (pop elts) 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)
"Delete PROPERTY from PLIST.
This is in contrast to merely setting it to 0."
--
2.33.0
From 83913a2b0becb8429e9cc4e5872a9c7557351d03 Mon Sep 17 00:00:00 2001
From: Yasushi SHOJI <[email protected]>
Date: Mon, 20 Sep 2021 02:10:26 +0900
Subject: [PATCH 3/3] testing: ox-publish: Add a test case for default trans
func
We use `org-html-publish-to-html' as the default transformation
function. This commit adds a test case to make sure that org-publish
produces exact same output when org-html-publish-to-html is given as
:publishing-function or without it.
Because `org-publish-property' checks the given property with
`plist-member', we can't pass nil with :publishing-function; This
causes ox-publish to error out with "No publishing function chosen".
Thus we are removing :publishing-function from the plist using
`org-plist-delete-all'.
Signed-off-by: Yasushi SHOJI <[email protected]>
---
testing/lisp/test-ox-publish.el | 36 ++++++++++++++++++++++++---------
1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/testing/lisp/test-ox-publish.el b/testing/lisp/test-ox-publish.el
index 35031742f..3bfb985ab 100644
--- a/testing/lisp/test-ox-publish.el
+++ b/testing/lisp/test-ox-publish.el
@@ -22,12 +22,16 @@
;;; Helper functions
-(defun org-test-publish (properties handler)
+(defun org-test-publish (properties handler &optional remove-prop)
"Publish a project defined by PROPERTIES.
Call HANDLER with the publishing directory as its sole argument.
Unless set otherwise in PROPERTIES, `:base-directory' is set to
\"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
+existance of a property, a property with a value nil is different
+from non-existitance. Properties in REMOVE-PROP will be remove
+from the final plist."
(declare (indent 1))
(let* ((org-publish-use-timestamps-flag 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))
(org-publish-timestamp-directory
(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
- `("test" ,@(org-combine-plists
- `(:base-directory
- ,base-dir
- :publishing-function org-publish-attachment)
- properties
- `(:publishing-directory ,pub-dir)))))
+ `("test" ,@props)))
(unwind-protect
(progn
(org-publish-projects (list project))
@@ -92,7 +98,19 @@ Unless set otherwise in PROPERTIES, `:base-directory' is set to
(lambda (dir)
(remove ".org-timestamps"
(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
--
2.33.0