[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org 0551eba40c 05/13: org-export-get-ordinal: Cache res
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org 0551eba40c 05/13: org-export-get-ordinal: Cache results |
Date: |
Fri, 7 Oct 2022 01:57:50 -0400 (EDT) |
branch: externals/org
commit 0551eba40ca1cdeac8645c8614747566025a7e94
Author: Ihor Radchenko <yantar92@gmail.com>
Commit: Ihor Radchenko <yantar92@gmail.com>
org-export-get-ordinal: Cache results
* lisp/ox.el (org-export-get-ordinal): Cache results while counting to
avoid quadratic scaling.
Reported-by: Rudolf Adamkovič <salutis@me.com>
Link: https://list.orgmode.org/m2zgef774u.fsf@me.com/T/#t
---
lisp/ox.el | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/lisp/ox.el b/lisp/ox.el
index ec5c305487..3e53692dc6 100644
--- a/lisp/ox.el
+++ b/lisp/ox.el
@@ -4679,10 +4679,22 @@ objects of the same type."
(org-element-map (plist-get info :parse-tree)
(or types (org-element-type element))
(lambda (el)
- (cond
- ((eq element el) (1+ counter))
- ((not predicate) (cl-incf counter) nil)
- ((funcall predicate el info) (cl-incf counter) nil)))
+ (let ((cached (org-element-property :org-export--counter el)))
+ (cond
+ ((eq element el) (1+ counter))
+ ;; Use cached result.
+ ((and cached (equal predicate (car cached)))
+ (cdr cached))
+ ((not predicate)
+ (cl-incf counter)
+ (org-element-put-property
+ el :org-export--counter (cons predicate counter))
+ nil)
+ ((funcall predicate el info)
+ (cl-incf counter)
+ (org-element-put-property
+ el :org-export--counter (cons predicate counter))
+ nil))))
info 'first-match)))))
;;;; For Raw objects
- [elpa] externals/org updated (a220492064 -> fc8e375b9b), ELPA Syncer, 2022/10/07
- [elpa] externals/org 5a167f6ef2 02/13: org-element-cache-reset: Never use cache persistence in non-file buffers, ELPA Syncer, 2022/10/07
- [elpa] externals/org b45911d41e 06/13: org-export-copy-buffer: Prevent saving to disk, ELPA Syncer, 2022/10/07
- [elpa] externals/org 09fd5f886a 07/13: org-html-format-latex: Avoid unnecessary string allocation, ELPA Syncer, 2022/10/07
- [elpa] externals/org 2f4de60980 12/13: ob-emacs-lisp: Don't print arguments of post-process arguments to stdout, ELPA Syncer, 2022/10/07
- [elpa] externals/org 0be36ac13e 10/13: org-html-format-latex: Prevent save prompt for temporary buffer, ELPA Syncer, 2022/10/07
- [elpa] externals/org 7f3a6cf6e7 11/13: org-capture: Add template hook properties, ELPA Syncer, 2022/10/07
- [elpa] externals/org 279bee087d 01/13: org-element-clock-line-re: Fix Emacs 26 compatibility after e305755b1, ELPA Syncer, 2022/10/07
- [elpa] externals/org aa90e5b59c 03/13: org-export-with-buffer-copy: Avoid all the hooks, not just `org-mode-hook', ELPA Syncer, 2022/10/07
- [elpa] externals/org 4cb1b8ebd0 04/13: org-export-ignored-local-variables: Do not copy cache, ELPA Syncer, 2022/10/07
- [elpa] externals/org 0551eba40c 05/13: org-export-get-ordinal: Cache results,
ELPA Syncer <=
- [elpa] externals/org 514e3a9cd2 08/13: org-export: Suppress cache persistence in buffer copies during export, ELPA Syncer, 2022/10/07
- [elpa] externals/org dcdf98a564 09/13: org-export-copy-buffer: Update declarations, ELPA Syncer, 2022/10/07
- [elpa] externals/org fc8e375b9b 13/13: Begin messages about executing code blocks with a capital letter, ELPA Syncer, 2022/10/07