From 0e3d0e3d19e44cf4541659b6e0cc4b0daf9b39aa Mon Sep 17 00:00:00 2001 From: Ihor Radchenko Date: Thu, 12 Oct 2023 14:24:35 +0300 Subject: [PATCH] org-element--collect-affiliated-keywords: Fix keywords before comment * lisp/org-element.el (org-element--collect-affiliated-keywords): Disallow affiliated keywords before a comment. * testing/lisp/test-org-element.el (test-org-element/affiliated-keywords-parser): Add new test. * testing/lisp/test-org-element.el (test-org-element/cache-affiliated): Fix test. Reported-by: Tom Alexander Link: https://orgmode.org/list/87c20267-d12e-4641-a1eb-3a7ac8181069@app.fastmail.com --- lisp/org-element.el | 5 ++++- testing/lisp/test-org-element.el | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index 6d869e06b..bb5b2a003 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -4790,7 +4790,10 @@ When PARSE is non-nil, values from keywords belonging to (forward-line))) ;; If affiliated keywords are orphaned: move back to first one. ;; They will be parsed as a paragraph. - (when (looking-at-p "[ \t]*$") (goto-char origin) (setq output nil)) + (when (or (looking-at-p "[ \t]*$") + ;; Affiliated keywords are not allowed before comments. + (looking-at-p org-comment-regexp)) + (goto-char origin) (setq output nil)) ;; Return value. (cons origin output)))) diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index 16de1ec70..a8bfa9eaa 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -872,6 +872,12 @@ Some other text (should-not (org-test-with-temp-text "- item\n #+name: name\nSome paragraph" (progn (search-forward "Some") + (org-element-property :name (org-element-at-point))))) + ;; Corner case: orphaned keyword before comment. + ;; Comments cannot have affiliated keywords. + (should-not + (org-test-with-temp-text "#+name: foo\n# bar" + (progn (search-forward "bar") (org-element-property :name (org-element-at-point)))))) @@ -5077,7 +5083,7 @@ Text line" (org-element-cache-map #'ignore :granularity 'element) (should (eq 'keyword (org-element-type (org-element-at-point)))) - (insert "#") + (insert "1") (should (eq 2 (org-element-property :begin (org-element-at-point))))))) (ert-deftest test-org-element/cache-table ()