branch: externals/org
commit e34d7781f038493112a15980f5b606006ebe26ff
Author: Ihor Radchenko <[email protected]>
Commit: Ihor Radchenko <[email protected]>
org-element-entity-parser: Refactor entity regexp using `rx'
* lisp/org-element.el (org-element-entity-parser): Rewrite entity
regexp using more readable `rx' form.
* testing/lisp/test-org-element.el (test-org-element/entity-parser):
Add new test cases for whitespace entities.
---
lisp/org-element.el | 12 +++++++++++-
testing/lisp/test-org-element.el | 15 +++++++++++++++
2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/lisp/org-element.el b/lisp/org-element.el
index 5fd5b5d271..ca5a00e2dd 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 bcc2efbdb0..ade255ea09 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