Преглед изворни кода

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>
Yasushi SHOJI пре 3 година
родитељ
комит
3a291b0f0e
3 измењених фајлова са 34 додато и 10 уклоњено
  1. 5 0
      lisp/org-macs.el
  2. 2 1
      lisp/ox-publish.el
  3. 27 9
      testing/lisp/test-ox-publish.el

+ 5 - 0
lisp/org-macs.el

@@ -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."

+ 2 - 1
lisp/ox-publish.el

@@ -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))))

+ 27 - 9
testing/lisp/test-ox-publish.el

@@ -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
-		      `(:base-directory
-			,base-dir
-			:publishing-function org-publish-attachment)
-		      properties
-		      `(:publishing-directory ,pub-dir)))))
+	  `("test" ,@props)))
     (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