diff options
author | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2017-05-04 09:20:23 +0200 |
---|---|---|
committer | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2017-05-05 17:47:30 +0200 |
commit | 018ce94d88005dc28a634edf353096e3d4355566 (patch) | |
tree | c683fc3fa6138ba971cdd885a52a7cf4395d445b | |
parent | 6539c41589dcdbb69e360598652bedaa5360b0ae (diff) | |
download | org-mode-018ce94d88005dc28a634edf353096e3d4355566.tar.gz |
ox-publish: Small refactoring
* lisp/ox-publish.el (org-publish-file): Use function dedicated to
files instead of string related ones. Small refactoring.
(org-publish-cache-get-file-property): Small refactoring.
-rw-r--r-- | lisp/ox-publish.el | 63 |
1 files changed, 29 insertions, 34 deletions
diff --git a/lisp/ox-publish.el b/lisp/ox-publish.el index 963e684..0b6aa69 100644 --- a/lisp/ox-publish.el +++ b/lisp/ox-publish.el @@ -666,42 +666,41 @@ files, when entire projects are published (see `org-publish-projects')." (let* ((project (or project - (or (org-publish-get-project-from-filename filename) - (error "File %s not part of any known project" - (abbreviate-file-name filename))))) + (org-publish-get-project-from-filename filename) + (user-error "File %S is not part of any known project" + (abbreviate-file-name filename)))) (project-plist (cdr project)) (ftname (expand-file-name filename)) (publishing-function - (let ((fun (plist-get project-plist :publishing-function))) - (cond ((null fun) (error "No publishing function chosen")) - ((listp fun) fun) - (t (list fun))))) + (pcase (plist-get project-plist :publishing-function) + (`nil (user-error "No publishing function chosen")) + ((and f (pred listp)) f) + (f (list f)))) (base-dir (file-name-as-directory (expand-file-name (or (plist-get project-plist :base-directory) - (error "Project %s does not have :base-directory defined" - (car project)))))) - (pub-dir + (user-error "Project %S does not have :base-directory defined" + (car project)))))) + (pub-base-dir (file-name-as-directory (file-truename (or (eval (plist-get project-plist :publishing-directory)) - (error "Project %s does not have :publishing-directory defined" - (car project)))))) - tmp-pub-dir) + (user-error + "Project %S does not have :publishing-directory defined" + (car project)))))) + (pub-dir + (file-name-directory + (expand-file-name (file-relative-name ftname base-dir) + pub-base-dir)))) (unless no-cache (org-publish-initialize-cache (car project))) - (setq tmp-pub-dir - (file-name-directory - (concat pub-dir - (and (string-match (regexp-quote base-dir) ftname) - (substring ftname (match-end 0)))))) ;; Allow chain of publishing functions. (dolist (f publishing-function) - (when (org-publish-needed-p filename pub-dir f tmp-pub-dir base-dir) - (let ((output (funcall f project-plist filename tmp-pub-dir))) - (org-publish-update-timestamp filename pub-dir f base-dir) + (when (org-publish-needed-p filename pub-base-dir f pub-dir base-dir) + (let ((output (funcall f project-plist filename pub-dir))) + (org-publish-update-timestamp filename pub-base-dir f base-dir) (run-hook-with-args 'org-publish-after-publishing-hook filename output)))) @@ -1286,23 +1285,19 @@ will be created. Return VALUE." filename property value nil project-name)))) (defun org-publish-cache-get-file-property - (filename property &optional default no-create project-name) + (filename property &optional default no-create project-name) "Return the value for a PROPERTY of file FILENAME in publishing cache. Use cache file of PROJECT-NAME. Return the value of that PROPERTY, or DEFAULT, if the value does not yet exist. Create the entry, if necessary, unless NO-CREATE is non-nil." - ;; Evtl. load the requested cache file: - (if project-name (org-publish-initialize-cache project-name)) - (let ((pl (org-publish-cache-get filename)) retval) - (if pl - (if (plist-member pl property) - (setq retval (plist-get pl property)) - (setq retval default)) - ;; no pl yet: - (unless no-create - (org-publish-cache-set filename (list property default))) - (setq retval default)) - retval)) + (when project-name (org-publish-initialize-cache project-name)) + (let ((properties (org-publish-cache-get filename))) + (cond ((null properties) + (unless no-create + (org-publish-cache-set filename (list property default))) + default) + ((plist-member properties property) (plist-get properties property)) + (t default)))) (defun org-publish-cache-get (key) "Return the value stored in `org-publish-cache' for key KEY. |