branch: externals/org commit 83a55c6febdf59934af7ed47ead722c0211ba874 Author: Ihor Radchenko <yanta...@posteo.net> Commit: Ihor Radchenko <yanta...@posteo.net>
org-element: Fix parsing top-level property drawer after comment and blanks * lisp/org-element.el (org-element--current-element): Trust parser mode when deciding whether we are at property drawer or not. Requiring blank lines + `bob' is not accurate are we may have comment lines before top-level drawer. Also, the other check (preceded by non-blank line) was not exactly precise and still relied upon parser mode to be set correctly. So, let's do it all the way. * testing/lisp/test-org-element.el (test-org-element/property-drawer-parser): Add new test case. Reported-by: @inkbottle:matrix.org --- lisp/org-element.el | 9 +-------- testing/lisp/test-org-element.el | 4 ++++ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index 56c03a0aa7..7dd9afc858 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -4718,14 +4718,7 @@ element it has to parse." ;; Property drawer. ((and (pcase mode (`planning (eq ?* (char-after (line-beginning-position 0)))) - ((or `property-drawer `top-comment) - ;; See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=63225#80 - (save-excursion - (forward-line -1) ; faster than beginning-of-line - (skip-chars-forward "[:blank:]") ; faster than looking-at-p - (or (not (eolp)) ; very cheap - ;; Document-wide property drawer may be preceded by blank lines. - (progn (skip-chars-backward " \t\n\r") (bobp))))) + ((or `property-drawer `top-comment) t) (_ nil)) (looking-at-p org-property-drawer-re)) (org-element-property-drawer-parser limit)) diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index a491892e43..2e85df3634 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -2856,6 +2856,10 @@ Outside list" (eq 'property-drawer (org-test-with-temp-text "# C\n# C\n<point>:PROPERTIES:\n:prop: value\n:END:" (org-element-type (org-element-at-point))))) + (should + (eq 'property-drawer + (org-test-with-temp-text "\n \t\n# C\n# C\n \n\n\n<point>:PROPERTIES:\n:prop: value\n:END:" + (org-element-type (org-element-at-point))))) (should (eq 'property-drawer (org-test-with-temp-text "\n<point>:PROPERTIES:\n:prop: value\n:END:"