[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org 515ce56d4e 1/2: org-element-cache: Fix transforming
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org 515ce56d4e 1/2: org-element-cache: Fix transforming keywords to affiliated |
Date: |
Fri, 7 Jan 2022 09:57:43 -0500 (EST) |
branch: externals/org
commit 515ce56d4e0fb7873ad52efe24680b384e94717f
Author: Ihor Radchenko <yantar92@gmail.com>
Commit: Ihor Radchenko <yantar92@gmail.com>
org-element-cache: Fix transforming keywords to affiliated
* lisp/org-element.el (org-element--cache-for-removal): Consider
preceding keywords to be updated unconditionally.
(org-element-cache-map): Fix infinite loop revealed by the new test.
* testing/lisp/test-org-element.el (test-org-element/cache-affiliated):
New test.
---
lisp/org-element.el | 11 ++++++++++-
testing/lisp/test-org-element.el | 14 ++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/lisp/org-element.el b/lisp/org-element.el
index e61c292d51..dbf54454a6 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -6694,6 +6694,14 @@ known element in cache (it may start after END)."
(before (car elements))
(after (cdr elements)))
(if (not before) after
+ ;; If BEFORE is a keyword, it may need to be removed to become
+ ;; an affiliated keyword.
+ (when (eq 'keyword (org-element-type before))
+ (let ((prev before))
+ (while (eq 'keyword (org-element-type prev))
+ (setq before prev
+ beg (org-element-property :begin prev))
+ (setq prev (org-element--cache-find (1- (org-element-property
:begin before)))))))
(let ((up before)
(robust-flag t))
(while up
@@ -7288,7 +7296,8 @@ the cache."
(setq start (max (or start -1)
(or
(org-element-property :begin data) -1)
(or
(org-element-property :begin (element-match-at-point)) -1))))
- (when (>= start to-pos)
(cache-walk-abort)))
+ (when (>= start to-pos)
(cache-walk-abort))
+ (when (eq start -1) (setq start nil)))
(cache-walk-abort))))
;; Find expected begin position of an element after
;; DATA.
diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el
index 3d320b83b0..a4c94efe20 100644
--- a/testing/lisp/test-org-element.el
+++ b/testing/lisp/test-org-element.el
@@ -4128,6 +4128,20 @@ Text
:end (org-element-property :parent (org-element-at-point)))
(+ parent-end 3))))))
+(ert-deftest test-org-element/cache-affiliated ()
+ "Test updating affiliated keywords."
+ ;; Inserting a line right after other keywords.
+ (let ((org-element-use-cache t))
+ (org-test-with-temp-text "
+#+caption: test
+#+name: test
+<point>
+line"
+ (org-element-cache-map #'ignore :granularity 'element)
+ (should (eq 'keyword (org-element-type (org-element-at-point))))
+ (insert "#")
+ (should (eq 2 (org-element-property :begin (org-element-at-point)))))))
+
(ert-deftest test-org-element/cache-table ()
"Test handling edits in tables."
;; Unindented second row of the table should not be re-parented by