diff options
author | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2017-04-15 17:27:01 +0200 |
---|---|---|
committer | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2017-04-15 17:27:01 +0200 |
commit | 8a2ffac88ae697ddd835da1db1de03bb0162c4c0 (patch) | |
tree | 1795b2457b90384a0435f01519ee7a77abdd72eb | |
parent | 74379eaaa2443f7a9fe62e04606c49613f5e6204 (diff) | |
download | org-mode-8a2ffac88ae697ddd835da1db1de03bb0162c4c0.tar.gz |
org-element: Fix radio link parser
* lisp/org-element.el (org-element--object-lex): Fix parsing of radio
links within emphasis.
* testing/lisp/test-org-element.el (test-org-element/link-parser): Add
test.
Reported-by: R C <recifx@gmail.com>
<http://permalink.gmane.org/gmane.emacs.orgmode/113063>
-rw-r--r-- | lisp/org-element.el | 11 | ||||
-rw-r--r-- | testing/lisp/test-org-element.el | 11 |
2 files changed, 19 insertions, 3 deletions
diff --git a/lisp/org-element.el b/lisp/org-element.el index f120619..deeb51b 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -4366,6 +4366,10 @@ to an appropriate container (e.g., a paragraph)." (if (memq 'table-cell restriction) (org-element-table-cell-parser) (let* ((start (point)) (limit + ;; Object regexp sometimes needs to have a peek at + ;; a character ahead. Therefore, when there is a hard + ;; limit, make it one more than the true beginning of the + ;; radio target. (save-excursion (cond ((not org-target-link-regexp) nil) ((not (memq 'link restriction)) nil) @@ -4381,8 +4385,8 @@ to an appropriate container (e.g., a paragraph)." ((and (= start (1+ (line-beginning-position))) (= start (match-end 1))) (and (re-search-forward org-target-link-regexp nil t) - (match-beginning 1))) - (t (match-beginning 1))))) + (1+ (match-beginning 1)))) + (t (1+ (match-beginning 1)))))) found) (save-excursion (while (and (not found) @@ -4456,7 +4460,8 @@ to an appropriate container (e.g., a paragraph)." (org-element-link-parser))))))) (or (eobp) (forward-char)))) (cond (found) - (limit (org-element-link-parser)) ;radio link + (limit (forward-char -1) + (org-element-link-parser)) ;radio link (t nil)))))) (defun org-element--parse-objects (beg end acc restriction &optional parent) diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index c8c3528..afda308 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -1618,6 +1618,17 @@ e^{i\\pi}+1=0 (org-test-with-temp-text "* <<<a>>>\n<point>a-bug" (org-update-radio-target-regexp) (org-element-parse-buffer))) + ;; Pathological case: radio target in an emphasis environment. + (should + (eq 'bold + (org-test-with-temp-text "* <<<radio>>>\n<point>*radio*" + (org-update-radio-target-regexp) + (org-element-type (org-element-context))))) + (should + (eq 'link + (org-test-with-temp-text "* <<<radio>>>\n*<point>radio*" + (org-update-radio-target-regexp) + (org-element-type (org-element-context))))) ;; Standard link. ;; ;; ... with description. |