From 4e64115254237730767b8094f3c189806316d31b Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Sat, 1 Aug 2020 16:58:49 +0530 Subject: Introduce ennum-link type. * ennum.el (ennum-link): New type. (ennum--read-post, ennum-publish-link): Use ennum-link type. --- ennum.el | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'ennum.el') diff --git a/ennum.el b/ennum.el index 8d99098..14b0533 100644 --- a/ennum.el +++ b/ennum.el @@ -136,6 +136,10 @@ respectively by - and _, and the pad character = is optional." summary tags thumbnail title translation-group translations video-posters) +(cl-defstruct (ennum-link (:constructor ennum-make-link) + (:copier nil)) + type path) + (defun ennum-posts (posts-directory) (sort (seq-mapcat ;; Set translations slot of post objects. @@ -190,7 +194,9 @@ respectively by - and _, and the pad character = is optional." (`(link ,properties . ,_) (let ((link-type (org-element-property :type link))) (when (member link-type (list "image" "static" "video")) - (cons link-type (org-element-property :path link)))))))))) + (ennum-make-link + :type (intern link-type) + :path (org-element-property :path link)))))))))) (ennum-make-post :filename filename :slug (file-name-base filename) @@ -214,17 +220,19 @@ respectively by - and _, and the pad character = is optional." :tags (plist-get metadata :filetags) :thumbnail (or (plist-get metadata :thumbnail) (seq-some (lambda (link) - (pcase link - (`("image" . ,path) path) - (`("video" . ,path) (ennum-video-poster path)))) + (let ((path (ennum-link-path link))) + (pcase (ennum-link-type link) + ('image path) + ('video (ennum-video-poster path))))) links)) :title (funcall export (first (plist-get metadata :title))) :translation-group (or (plist-get metadata :translation-group) (file-name-base filename)) :video-posters (ennum--filter-map (lambda (link) - (pcase link - (`("video" . ,path) - `(,path . ,(ennum-video-poster path))))) + (pcase (ennum-link-type link) + ('video + (let ((path (ennum-link-path link))) + `(,path . ,(ennum-video-poster path)))))) links)))))) (defvar ennum-mandatory-metadata @@ -521,23 +529,26 @@ if DESTINATION already exists." (seq-filter 'identity (seq-map function sequence))) (defun ennum-publish-link (link) - (pcase link - (`("image" . ,path) + (pcase (ennum-link-type link) + ('image (seq-map (lambda (width) (ennum-publish-image - (ennum--expand-relative path (ennum-setting :images-directory)) + (ennum--expand-relative (ennum-link-path link) + (ennum-setting :images-directory)) width)) (list (ennum-setting :default-image-width) (ennum-setting :image-link-width)))) - (`("static" . ,path) + ('static (list (ennum-publish-copy - (ennum--expand-relative path (ennum-setting :static-directory))))) - (`("video" . ,path) + (ennum--expand-relative (ennum-link-path link) + (ennum-setting :static-directory))))) + ('video (seq-map 'ennum-publish-copy (list - (ennum--expand-relative path (ennum-setting :video-directory)) - (ennum--expand-relative (ennum-video-poster path) + (ennum--expand-relative (ennum-link-path link) + (ennum-setting :video-directory)) + (ennum--expand-relative (ennum-video-poster (ennum-link-path link)) (ennum-setting :images-directory))))))) (defmacro ennum-with-current-directory (directory &rest body) -- cgit v1.2.3