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.
This commit is contained in:
Ihor Radchenko 2023-10-19 11:15:45 +03:00
parent 627097c7d3
commit e34d7781f0
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
2 changed files with 26 additions and 1 deletions

View File

@ -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)))

View File

@ -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