branch: externals/calibre
commit 6fc4f2782667576f04b7883f6a23a99486749595
Author: Kjartan Oli Agustsson <[email protected]>
Commit: Kjartan Oli Agustsson <[email protected]>

    Add macros to create set/unset functions for non-list fields
    
    * calibre-edit.el (calibre-edit--metadata-setter): New macro.
    (calibre-edit--metadata-unsetter): New macro.
    (calibre-edit--metadata-setter-pair): New macro.
    
    As with calibre-edit--metadata-adder and
    calibre-edit--metadata-remover setting and un-setting non-list
    metadata fields will be performed the same way no matter the field.
    Using macros to create these function pairs ensures consistency.
---
 calibre-edit.el | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/calibre-edit.el b/calibre-edit.el
index bf2b154c5d..01e6321951 100644
--- a/calibre-edit.el
+++ b/calibre-edit.el
@@ -155,6 +155,31 @@ function does nothing."
      (calibre-edit--metadata-adder ,field)
      (calibre-edit--metadata-remover ,field)))
 
+(defmacro calibre-edit--metadata-setter (field)
+  "Create a function to set FIELD of a given book."
+  (let ((name (intern (format "calibre-edit-set-%s" field)))
+        (getter (intern (format "calibre-book-%s" field))))
+    `(defun ,name (,field book)
+       ,(format "Set BOOK's %s to %s"
+                field
+                (upcase (prin1-to-string field)))
+       (calibre-edit--preserve-original book)
+       (setf (,getter book) ,field))))
+
+(defmacro calibre-edit--metadata-unsetter (field)
+  "Create a function to unset FIELD of a given book."
+  (let ((name (intern (format "calibre-edit-unset-%s" field)))
+        (setter (intern (format "calibre-edit-set-%s" field))))
+    `(defun ,name (book)
+       ,(format "Unset BOOK's %s" field)
+       (,setter nil book))))
+
+(defmacro calibre-edit--metadata-setter-pair (field)
+  "Create a pair of set/unset functions to modify FIELD of a given book."
+  `(progn
+     (calibre-edit--metadata-setter ,field)
+     (calibre-edit--metadata-unsetter ,field)))
+
 (calibre-util--macro-map
  calibre-edit--metadata-modifier-pair (tags authors))
 (defun calibre-edit-modified-p (book)

Reply via email to