diff options
| author | Andreas Politz <politza@hochschule-trier.de> | 2015-06-20 13:31:43 +0200 |
|---|---|---|
| committer | Andreas Politz <politza@hochschule-trier.de> | 2015-06-20 13:31:43 +0200 |
| commit | 31b56bb9f0de9c9d1b3f96207dd4c2b8757f16f9 (patch) | |
| tree | 52d7bd35ca7a0a32d13441ec4923eb7c8ab04836 | |
| parent | ec1b1c91413c031d8ccb3d0f39eac43b4257db3c (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.el | 47 | ||||
| -rw-r--r-- | test/pdf-virtual.ert | 80 |
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 () + ;; ) + + ) |
