[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org b00c2d0e1d 039/101: org-element--parse-to: Provide
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org b00c2d0e1d 039/101: org-element--parse-to: Provide deferred :parent when cache is inactive |
Date: |
Sat, 1 Jul 2023 09:59:04 -0400 (EDT) |
branch: externals/org
commit b00c2d0e1ddf9a2358bb4eddee08d22781699b46
Author: Ihor Radchenko <yantar92@posteo.net>
Commit: Ihor Radchenko <yantar92@posteo.net>
org-element--parse-to: Provide deferred :parent when cache is inactive
* lisp/org-element.el (org-element--headline-parent-deferred): New
function to calculate :parent of a heading on demand.
(org-element--parse-to): Assign deferred :parent when cache is
inactive.
---
lisp/org-element.el | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/lisp/org-element.el b/lisp/org-element.el
index 6109f677d9..deec546ce3 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -6446,6 +6446,22 @@ and footnote-definition."
(skip-chars-backward " \r\n\t")
(line-beginning-position 2)))))
+(defun org-element--headline-parent-deferred (headline)
+ "Parse parent for HEADLINE."
+ (with-current-buffer (org-element-property :buffer headline)
+ (org-with-point-at (org-element-begin headline)
+ (if (or (bobp) (= 1 (org-element-property :true-level headline)))
+ ;; Top-level heading. Parent is `org-data'.
+ (org-element-org-data-parser)
+ (re-search-backward
+ (org-headline-re
+ (1- (org-element-property :true-level headline)))
+ nil 'move)
+ (let ((parent (org-element-at-point)))
+ (if (org-element-type-p parent 'headline) parent
+ ;; Before first headline. Assign `org-data'.
+ (org-element-lineage parent 'org-data t)))))))
+
(defun org-element--parse-to (pos &optional syncp time-limit)
"Parse elements in current section, down to POS.
@@ -6489,8 +6505,7 @@ the expected result."
(setq mode 'org-data))
;; Nothing in cache before point because cache is not active.
;; Parse from previous heading to avoid re-parsing the whole
- ;; buffer above. This comes at the cost of not calculating
- ;; `:parent' property for headings.
+ ;; buffer above. Arrange `:parent' to be calculated on demand.
((not cached)
(end-of-line) ; ensure the end of current heading.
(if (re-search-backward
@@ -6498,6 +6513,10 @@ the expected result."
nil 'move)
(progn
(setq element (org-element-headline-parser nil 'fast))
+ (org-element-put-property
+ element :parent
+ (org-element-deferred-create
+ t #'org-element--headline-parent-deferred))
(setq mode 'planning)
(forward-line))
(setq element (org-element-org-data-parser))
@@ -6533,7 +6552,12 @@ the expected result."
(when up (setq element up)))))
;; Parse successively each element until we reach POS.
(let ((end (or (org-element-end element) (point-max)))
- (parent (org-element-parent element)))
+ (parent (when (org-element--cache-active-p)
+ ;; Cache is not active. Parent is deferred.
+ ;; We will not actually use parent during
+ ;; the first iteration of the `while' loop.
+ ;; Avoid undeferring here.
+ (org-element-parent element))))
(while t
(when (org-element--cache-interrupt-p time-limit)
(throw 'org-element--cache-interrupt nil))
- [elpa] externals/org 5ed3e1dfc3 081/101: org-refresh-category-properties: Do not check element cache, (continued)
- [elpa] externals/org 5ed3e1dfc3 081/101: org-refresh-category-properties: Do not check element cache, ELPA Syncer, 2023/07/01
- [elpa] externals/org 81e85bda2b 088/101: Fix Emacs 27 compatibility, ELPA Syncer, 2023/07/01
- [elpa] externals/org e18263fceb 091/101: org-element--substring: Fix when buffer is narrowed, ELPA Syncer, 2023/07/01
- [elpa] externals/org 759676b308 092/101: org-fold-core--isearch-show: Do not fully rely on `point', ELPA Syncer, 2023/07/01
- [elpa] externals/org f2dd1eea41 093/101: org-find-open-clocks: Fix false positives, ELPA Syncer, 2023/07/01
- [elpa] externals/org 37a58cc6ee 094/101: org-agenda-skip: Do not alter match data, ELPA Syncer, 2023/07/01
- [elpa] externals/org 66c8e94732 100/101: lisp/org-element-ast.el: Fix typo in commentary, ELPA Syncer, 2023/07/01
- [elpa] externals/org 948c896448 101/101: Rename `org-element-property-1' to `org-element-property-raw', ELPA Syncer, 2023/07/01
- [elpa] externals/org 932c49c7bb 019/101: org-element-headline-parser: Use deferred properties, ELPA Syncer, 2023/07/01
- [elpa] externals/org 244cc7d560 029/101: org-element-org-data-parser: Defer parsing, ELPA Syncer, 2023/07/01
- [elpa] externals/org b00c2d0e1d 039/101: org-element--parse-to: Provide deferred :parent when cache is inactive,
ELPA Syncer <=
- [elpa] externals/org 81a7e8c836 037/101: org-element-lineage: Allow TYPES to be a symbol, ELPA Syncer, 2023/07/01
- [elpa] externals/org 4d63e571e0 042/101: org-get-tags: Use org-element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org f225e24869 040/101: org-element--current-element: Make defsubst, ELPA Syncer, 2023/07/01
- [elpa] externals/org dfd36d1969 049/101: org-up-heading-safe: Use element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org fefaadc2d5 050/101: org-element: Optimize working with match data and Emacs regexps, ELPA Syncer, 2023/07/01
- [elpa] externals/org 6266197bbd 051/101: org-at-item-p: Use org-element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org 6938857369 052/101: org-goto-first-child: Switch to org-element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org 7c549f4841 060/101: org-babel-tangle-collect-blocks: Switch to org-element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org b2482d9cc4 070/101: * testing/lisp/test-org-element.el: Add new tests, ELPA Syncer, 2023/07/01
- [elpa] externals/org b0a2deaec6 073/101: org-element--current-element: Faster property drawer check, ELPA Syncer, 2023/07/01