diff --git a/lisp/org-element.el b/lisp/org-element.el index 5fd5b5d27..ca5a00e2d 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -3466,7 +3466,17 @@ properties. Otherwise, return nil. Assume point is at the beginning of the entity." (catch 'no-object - (when (looking-at "\\\\\\(?:\\(?1:_ +\\)\\|\\(?1:there4\\|sup[123]\\|frac[13][24]\\|[a-zA-Z]+\\)\\(?2:$\\|{}\\|[^[:alpha:]]\\)\\)") + (when (looking-at + (rx "\\" + (or + (group-n 1 (seq "_" (1+ " "))) + (seq + (group-n 1 + (or "there4" + (seq "sup" (in "123")) + (seq "frac" (in "13") (in "24")) + (1+ (in "a-zA-Z")))) + (group-n 2 (or eol "{}" (not letter))))))) (save-excursion (let* ((value (or (org-entity-get (match-string 1)) (throw 'no-object nil))) diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index bcc2efbdb..ade255ea0 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -1318,6 +1318,21 @@ CLOCK: [2023-10-13 Fri 14:40]--[2023-10-13 Fri 14:51] => 0:11" (should (org-test-with-temp-text "\\sin" (org-element-map (org-element-parse-buffer) 'entity 'identity))) + ;; Special case: space-based entities. + (should + (equal + "_ " + ;; Space after entity must be a part of its name. + (org-test-with-temp-text "\\_ Foo" + (org-element-property + :name + (car (org-element-map (org-element-parse-buffer) 'entity 'identity)))))) + (should-not + ;; {} is not a part of whitespace entity name. + (org-test-with-temp-text "\\_ {}Foo" + (org-element-property + :bracketsp + (car (org-element-map (org-element-parse-buffer) 'entity 'identity))))) ;; With brackets. (should (org-element-property