From 19947a6e412ba7b14d1d826d0503011622a8b9ad Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Sat, 10 Apr 2021 12:06:47 +0200 Subject: [PATCH] ox: Handle missing option value better * lisp/ox.el (org-export--parse-option-keyword): Do not stop parsing OPTIONS keyword when an option without a value is encountered. * testing/lisp/test-ox.el (test-org-export/parse-option-keyword): Add tset. This is a followup to 71169144275f9c420c0b613429410af9e59f2ba9. --- lisp/ox.el | 10 ++++++---- testing/lisp/test-ox.el | 7 ++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lisp/ox.el b/lisp/ox.el index 4b3e39906..c99e8d111 100644 --- a/lisp/ox.el +++ b/lisp/ox.el @@ -1386,11 +1386,13 @@ e.g., `org-export-create-backend'. It specifies which back-end specific items to read, if any." (let ((line (let ((s 0) alist) - (while (string-match "\\(.+?\\):\\((.*?)\\|\\S-+\\)[ \t]*" options s) + (while (string-match "\\(.+?\\):\\((.*?)\\|\\S-+\\)?[ \t]*" options s) (setq s (match-end 0)) - (push (cons (match-string 1 options) - (read (match-string 2 options))) - alist)) + (let ((value (match-string 2 options))) + (when value + (push (cons (match-string 1 options) + (read value)) + alist)))) alist)) ;; Priority is given to back-end specific options. (all (append (org-export-get-all-options backend) diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el index a5b3bd770..206b887e9 100644 --- a/testing/lisp/test-ox.el +++ b/testing/lisp/test-ox.el @@ -163,7 +163,12 @@ num:2 <:active"))) (org-export--parse-option-keyword "opt:t" (org-export-create-backend - :options '((:opt1 nil "opt") (:opt2 nil "opt"))))))) + :options '((:opt1 nil "opt") (:opt2 nil "opt")))))) + ;; Ignore options with a missing value. + (should + (let ((options (org-export--parse-option-keyword "H: num:t"))) + (and (not (plist-get options :headline-levels)) + (plist-get options :section-numbers))))) (ert-deftest test-org-export/get-inbuffer-options () "Test reading all standard export keywords."