summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Politz <politza@hochschule-trier.de>2015-06-20 13:31:43 +0200
committerAndreas Politz <politza@hochschule-trier.de>2015-06-20 13:31:43 +0200
commit31b56bb9f0de9c9d1b3f96207dd4c2b8757f16f9 (patch)
tree52d7bd35ca7a0a32d13441ec4923eb7c8ab04836
parentec1b1c91413c031d8ccb3d0f39eac43b4257db3c (diff)
Fix &rest arg in VPDF adapter
* lisp/pdf-virtual.el (pdf-virtual-define-adapter, renderpage, setoptions): * test/pdf-virtual.ert (pdf-virtual-adapter-argument-handling): Test it.
-rw-r--r--lisp/pdf-virtual.el47
-rw-r--r--test/pdf-virtual.ert80
2 files changed, 76 insertions, 51 deletions
diff --git a/lisp/pdf-virtual.el b/lisp/pdf-virtual.el
index 27003f1..34c1e38 100644
--- a/lisp/pdf-virtual.el
+++ b/lisp/pdf-virtual.el
@@ -724,6 +724,7 @@ PAGE should be a page-number."
(let ((fn (intern (format "pdf-virtual-%s" name)))
(base-fn (intern (format "pdf-info-%s" name)))
(base-fn-arg (make-symbol "fn"))
+ (true-file-or-buffer (make-symbol "true-file-or-buffer"))
(args (cl-remove-if (lambda (elt)
(memq elt '(&optional &rest)))
arglist)))
@@ -742,27 +743,27 @@ argument denotes a VPDF document."
(if doc (concat doc "\n\n") "")
base-fn
base-fn)
- (if (and
- ;;This is supposed to handle a (&optional file-or-buffer &rest args)
- ;;case.
- (or (stringp file-or-buffer)
- (bufferp file-or-buffer)
- (null file-or-buffer))
- (not (or (and (or (null file-or-buffer)
- (bufferp file-or-buffer))
- (pdf-virtual-buffer-p file-or-buffer))
- (and (stringp file-or-buffer)
- (pdf-virtual-filename-p file-or-buffer)))))
- (,(if (memq '&rest arglist) 'apply 'funcall) ,base-fn-arg ,@args)
- (cond
- ((null file-or-buffer)
- (setq file-or-buffer (current-buffer)))
- ((stringp file-or-buffer)
- (setq file-or-buffer (find-file-noselect file-or-buffer))))
- (save-current-buffer
- (when (bufferp file-or-buffer)
- (set-buffer file-or-buffer))
- ,@body))))))
+ (let ((,true-file-or-buffer
+ (cond
+ ((or (bufferp file-or-buffer)
+ (stringp file-or-buffer)) file-or-buffer)
+ ((or (null file-or-buffer)
+ ,(not (null (memq '&rest arglist))))
+ (current-buffer)))))
+ (if (cond
+ ((null ,true-file-or-buffer) t)
+ ((bufferp ,true-file-or-buffer)
+ (not (pdf-virtual-buffer-p ,true-file-or-buffer)))
+ ((stringp ,true-file-or-buffer)
+ (not (pdf-virtual-filename-p ,true-file-or-buffer))))
+ (,(if (memq '&rest arglist) 'apply 'funcall) ,base-fn-arg ,@args)
+ (when (stringp ,true-file-or-buffer)
+ (setq ,true-file-or-buffer
+ (find-file-noselect ,true-file-or-buffer)))
+ (save-current-buffer
+ (when (bufferp ,true-file-or-buffer)
+ (set-buffer ,true-file-or-buffer))
+ ,@body)))))))
(define-error 'pdf-virtual-unsupported-operation
"Operation not supported in VPDF buffer")
@@ -999,7 +1000,7 @@ argument denotes a VPDF document."
(pdf-virtual-define-adapter renderpage (page width &optional file-or-buffer
&rest commands)
- (when (symbolp file-or-buffer)
+ (when (keywordp file-or-buffer)
(push file-or-buffer commands)
(setq file-or-buffer nil))
(cl-destructuring-bind (filename file-page region)
@@ -1023,7 +1024,7 @@ argument denotes a VPDF document."
(signal 'pdf-virtual-unsupported-operation (list 'pagelabels)))
(pdf-virtual-define-adapter setoptions (&optional file-or-buffer &rest options)
- (when (symbolp file-or-buffer)
+ (when (keywordp file-or-buffer)
(push file-or-buffer options)
(setq file-or-buffer nil))
(pdf-info-compose-queries
diff --git a/test/pdf-virtual.ert b/test/pdf-virtual.ert
index a55a5d5..4cd3f32 100644
--- a/test/pdf-virtual.ert
+++ b/test/pdf-virtual.ert
@@ -197,31 +197,55 @@
(with-pdf-virtual-test-buffer
(should-error (pdf-info-save))))
-;; (ert-deftest pdf-virtual-getattachment-from-annot ()
-;; )
-
-;; (ert-deftest pdf-virtual-getattachments ()
-;; )
-
-;; (ert-deftest pdf-virtual-synctex-forward-search ()
-;; )
-
-;; (ert-deftest pdf-virtual-synctex-backward-search ()
-;; )
-
-;; (ert-deftest pdf-virtual-renderpage ()
-;; )
-
-;; (ert-deftest pdf-virtual-boundingbox ()
-;; )
-
-;; (ert-deftest pdf-virtual-pagelabels ()
-;; )
-
-;; (ert-deftest pdf-virtual-setoptions ()
-;; )
-
-;; (ert-deftest pdf-virtual-getoptions ()
-;; )
-
-)
+(ert-deftest pdf-virtual-adapter-argument-handling ()
+ (let ((enabled-p pdf-virtual-global-minor-mode))
+ (unwind-protect
+ (progn
+ (pdf-virtual-global-minor-mode 1)
+ (with-pdf-virtual-test-buffer
+ (should (stringp (pdf-info-renderpage 1 100 :alpha 0.1)))
+ (should (stringp (pdf-info-renderpage
+ 1 100 (current-buffer) :alpha 0.2))))
+ (pdf-test-with-test-pdf
+ (should (plist-get (pdf-info-setoptions
+ :render/printed t)
+ :render/printed))
+ (should-not (plist-get (pdf-info-setoptions
+ (current-buffer)
+ :render/printed nil)
+ :render/printed))
+ (should (plist-get (pdf-info-setoptions
+ (buffer-file-name)
+ :render/printed t)
+ :render/printed))))
+ (unless enabled-p
+ (pdf-virtual-global-minor-mode -1)))))
+
+ ;; (ert-deftest pdf-virtual-getattachment-from-annot ()
+ ;; )
+
+ ;; (ert-deftest pdf-virtual-getattachments ()
+ ;; )
+
+ ;; (ert-deftest pdf-virtual-synctex-forward-search ()
+ ;; )
+
+ ;; (ert-deftest pdf-virtual-synctex-backward-search ()
+ ;; )
+
+ ;; (ert-deftest pdf-virtual-renderpage ()
+ ;; )
+
+ ;; (ert-deftest pdf-virtual-boundingbox ()
+ ;; )
+
+ ;; (ert-deftest pdf-virtual-pagelabels ()
+ ;; )
+
+ ;; (ert-deftest pdf-virtual-setoptions ()
+ ;; )
+
+ ;; (ert-deftest pdf-virtual-getoptions ()
+ ;; )
+
+ )