emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 3236dedc2d 2/9: org-export-resolve-fuzyy-link: Pre-cache all poss


From: Eli Zaretskii
Subject: master 3236dedc2d 2/9: org-export-resolve-fuzyy-link: Pre-cache all possible search cells
Date: Thu, 16 Jun 2022 04:09:42 -0400 (EDT)

branch: master
commit 3236dedc2de5975afde877f7460bd012da89a98d
Author: Ihor Radchenko <yantar92@gmail.com>
Commit: Eli Zaretskii <eliz@gnu.org>

    org-export-resolve-fuzyy-link: Pre-cache all possible search cells
    
    * lisp/org/ox.el (org-export-resolve-fuzzy-link): Before matching LINK,
    pre-process and cache all the non-nil search cells in the parse tree.
    When matching, use the pre-processed info.  Fix the :test function for
    the cache hash table.
---
 lisp/org/ox.el | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/lisp/org/ox.el b/lisp/org/ox.el
index 7f90dc36f7..4a9387519f 100644
--- a/lisp/org/ox.el
+++ b/lisp/org/ox.el
@@ -4346,17 +4346,27 @@ significant."
   (let* ((search-cells (org-export-string-to-search-cell
                        (org-element-property :path link)))
         (link-cache (or (plist-get info :resolve-fuzzy-link-cache)
-                        (let ((table (make-hash-table :test #'eq)))
+                        (let ((table (make-hash-table :test #'equal)))
+                           ;; Cache all the element search cells.
+                           (org-element-map (plist-get info :parse-tree)
+                              (append pseudo-types '(target) 
org-element-all-elements)
+                            (lambda (datum)
+                              (dolist (cell (org-export-search-cells datum))
+                                (if (gethash cell table)
+                                     (push datum (gethash cell table))
+                                   (puthash cell (list datum) table)))))
                           (plist-put info :resolve-fuzzy-link-cache table)
                           table)))
         (cached (gethash search-cells link-cache 'not-found)))
     (if (not (eq cached 'not-found)) cached
       (let ((matches
-            (org-element-map (plist-get info :parse-tree)
-                (append pseudo-types '(target) org-element-all-elements)
-              (lambda (datum)
-                (and (org-export-match-search-cell-p datum search-cells)
-                     datum)))))
+             (let (result)
+               (dolist (search-cell search-cells)
+                 (setq result
+                       (nconc
+                        result
+                       (gethash search-cell link-cache))))
+               (delq nil result))))
        (unless matches
          (signal 'org-link-broken (list (org-element-property :path link))))
        (puthash



reply via email to

[Prev in Thread] Current Thread [Next in Thread]