emacs-diffs
[Top][All Lists]
Advanced

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

master 979308b4ca 5/9: org-export-data: Concatenate strings in temporary


From: Eli Zaretskii
Subject: master 979308b4ca 5/9: org-export-data: Concatenate strings in temporary buffer for performance
Date: Thu, 16 Jun 2022 04:09:44 -0400 (EDT)

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

    org-export-data: Concatenate strings in temporary buffer for performance
    
    * lisp/org/ox.el (org-export-data): Use temporary buffer to collect export
    data instead of `mapconcat'.  Using buffer puts less load on garbage
    collector.
---
 lisp/org/ox.el | 50 ++++++++++++++++++++++++++++----------------------
 1 file changed, 28 insertions(+), 22 deletions(-)

diff --git a/lisp/org/ox.el b/lisp/org/ox.el
index a4512270c9..ae7e41e576 100644
--- a/lisp/org/ox.el
+++ b/lisp/org/ox.el
@@ -1923,28 +1923,34 @@ Return a string."
                              (and (not greaterp)
                                   (memq type org-element-recursive-objects)))
                             (contents
-                             (mapconcat
-                              (lambda (element) (org-export-data element info))
-                              (org-element-contents
-                               (if (or greaterp objectp) data
-                                 ;; Elements directly containing
-                                 ;; objects must have their indentation
-                                 ;; normalized first.
-                                 (org-element-normalize-contents
-                                  data
-                                  ;; When normalizing first paragraph
-                                  ;; of an item or
-                                  ;; a footnote-definition, ignore
-                                  ;; first line's indentation.
-                                  (and
-                                   (eq type 'paragraph)
-                                   (memq (org-element-type parent)
-                                         '(footnote-definition item))
-                                   (eq (car (org-element-contents parent))
-                                       data)
-                                   (eq (org-element-property :pre-blank parent)
-                                       0)))))
-                              "")))
+                              (let ((export-buffer (current-buffer)))
+                                (with-temp-buffer
+                                  (dolist (element (org-element-contents
+                                                   (if (or greaterp objectp) 
data
+                                                     ;; Elements directly 
containing
+                                                     ;; objects must have 
their indentation
+                                                     ;; normalized first.
+                                                     
(org-element-normalize-contents
+                                                      data
+                                                      ;; When normalizing 
first paragraph
+                                                      ;; of an item or
+                                                      ;; a 
footnote-definition, ignore
+                                                      ;; first line's 
indentation.
+                                                      (and
+                                                       (eq type 'paragraph)
+                                                       (memq (org-element-type 
parent)
+                                                             
'(footnote-definition item))
+                                                       (eq (car 
(org-element-contents parent))
+                                                           data)
+                                                       (eq 
(org-element-property :pre-blank parent)
+                                                           0))))))
+                                    (insert
+                                     ;; Use right local variable
+                                     ;; environment if there are, for
+                                     ;; example, #+BIND variables.
+                                     (with-current-buffer export-buffer
+                                       (org-export-data element info))))
+                                  (buffer-string)))))
                        (broken-link-handler
                         (funcall transcoder data
                                  (if (not greaterp) contents



reply via email to

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