0
0
Fork 1
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-09-29 22:07:49 +00:00

org-element--parse-to: Fix skipping sibling optimisation

* lisp/org-element.el (org-element--parse-to): Fallback to normal
parsing when there are no siblings between POS and ELEM-END.

Reported in
https://github.com/yantar92/org/issues/38#issuecomment-982830497
This commit is contained in:
Ihor Radchenko 2021-12-02 09:17:51 +08:00
parent b170b23a5b
commit 328be6df40
No known key found for this signature in database
GPG key ID: 6470762A7DA11D8B

View file

@ -6420,14 +6420,18 @@ If you observe Emacs hangs frequently, please report this to Org mode mailing li
;; may exist though. Parse starting from the
;; last sibling or from ELEM-END if there are
;; no other siblings.
(goto-char pos)
(re-search-backward
(rx-to-string
`(and bol (repeat ,(let ((level (org-element-property :level element)))
(if org-odd-levels-only (1- (* level 2)) level))
"*")
" "))
elem-end t))))
(let ((p (point)))
(goto-char pos)
(unless
(re-search-backward
(rx-to-string
`(and bol (repeat ,(let ((level (org-element-property :level element)))
(if org-odd-levels-only (1- (* level 2)) level))
"*")
" "))
elem-end t)
;; Roll-back to normal parsing.
(goto-char p))))))
(setq mode (org-element--next-mode mode type nil)))
;; A non-greater element contains point: return it.
((not (memq type org-element-greater-elements))