diff --git a/contrib/lisp/org-export.el b/contrib/lisp/org-export.el index e3a371660..357fef541 100644 --- a/contrib/lisp/org-export.el +++ b/contrib/lisp/org-export.el @@ -1548,11 +1548,14 @@ retrieved." (let (letbind pair) (org-with-wide-buffer (goto-char (point-min)) - (while (re-search-forward (org-make-options-regexp '("BIND")) nil t) - (when (org-export-confirm-letbind) - (push (read (concat "(" (org-match-string-no-properties 2) ")")) - letbind)))) - (while (setq pair (pop letbind)) + (while (re-search-forward "^[ \t]*#\\+BIND:" nil t) + (let* ((element (org-element-at-point)) + (value (org-element-property :value element))) + (when (and (eq (org-element-type element) 'keyword) + (not (equal value "")) + (org-export--confirm-letbind)) + (push (read (format "(%s)" value)) letbind))))) + (dolist (pair (nreverse letbind)) (org-set-local (car pair) (nth 1 pair))))) diff --git a/testing/lisp/test-org-export.el b/testing/lisp/test-org-export.el index 6163f60ba..ed7257758 100644 --- a/testing/lisp/test-org-export.el +++ b/testing/lisp/test-org-export.el @@ -57,7 +57,38 @@ already filled in `info'." -;;; Tests +;;; Internal Tests + +(ert-deftest test-org-export/bind-keyword () + "Test reading #+BIND: keywords." + ;; Test with `org-export-all-BIND' set to t. + (should + (org-test-with-temp-text "#+BIND: variable value" + (let ((org-export-allow-BIND t)) + (org-export--install-letbind-maybe) + (eq variable 'value)))) + ;; Test with `org-export-all-BIND' set to nil. + (should-not + (org-test-with-temp-text "#+BIND: variable value" + (let ((org-export-allow-BIND nil)) + (org-export--install-letbind-maybe) + (boundp 'variable)))) + ;; Test with `org-export-all-BIND' set to 'confirm and + ;; `org-export--allow-BIND-local' to t . + (should + (org-test-with-temp-text "#+BIND: variable value" + (let ((org-export-allow-BIND 'confirm)) + (org-set-local 'org-export--allow-BIND-local t) + (org-export--install-letbind-maybe) + (eq variable 'value)))) + ;; Test with `org-export-all-BIND' set to 'confirm and + ;; `org-export--allow-BIND-local' to nil. + (should-not + (org-test-with-temp-text "#+BIND: variable value" + (let ((org-export-allow-BIND 'confirm)) + (org-set-local 'org-export--allow-BIND-local nil) + (org-export--install-letbind-maybe) + (boundp 'variable))))) (ert-deftest test-org-export/parse-option-keyword () "Test reading all standard #+OPTIONS: items."