diff --git a/lisp/org.el b/lisp/org.el index bb83eb7c6..9283d3644 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -6065,11 +6065,17 @@ by a #." (defvar org-target-link-regexp nil "Regular expression matching radio targets in plain text.") (make-variable-buffer-local 'org-target-link-regexp) -(defvar org-target-regexp "<<\\([^<>\n\r]+\\)>>" + +(defconst org-target-regexp (let ((border "[^<>\n\r \t]")) + (format "<<\\(%s\\|%s[^<>\n\r]*%s\\)>>" + border border border)) "Regular expression matching a link target.") -(defvar org-radio-target-regexp "<<<\\([^<>\n\r]+\\)>>>" + +(defconst org-radio-target-regexp (format "<%s>" org-target-regexp) "Regular expression matching a radio target.") -(defvar org-any-target-regexp "<<\n\r]+\\)>>>?" ; FIXME, not exact, would match <<> as a radio target. + +(defconst org-any-target-regexp + (format "%s\\|%s" org-radio-target-regexp org-target-regexp) "Regular expression matching any target.") (defun org-activate-target-links (limit) diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index def1659cc..d6e38ff85 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -1699,6 +1699,15 @@ Outside list" (should (eq 'radio-target (org-test-with-temp-text "<<<\\alpha radio>>>" + (org-element-type (org-element-context))))) + ;; Radio targets cannot begin or end with white space. + (should-not + (eq 'radio-target + (org-test-with-temp-text "<<< radio>>>" + (org-element-type (org-element-context))))) + (should-not + (eq 'radio-target + (org-test-with-temp-text "<<>>" (org-element-type (org-element-context))))))