diff options
author | Ihor Radchenko <yantar92@gmail.com> | 2022-06-16 01:01:53 +0800 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2022-06-16 10:53:51 +0300 |
commit | 979308b4cad2b573606ed71a1689a47a9e7a9e98 (patch) | |
tree | 41ad60376d8fb34041512655aa573e375cc51d43 /lisp/org | |
parent | 0f7ceb4803cabcb3c406fa7c27ccb7625096058e (diff) | |
download | emacs-979308b4cad2b573606ed71a1689a47a9e7a9e98.tar.gz emacs-979308b4cad2b573606ed71a1689a47a9e7a9e98.tar.bz2 emacs-979308b4cad2b573606ed71a1689a47a9e7a9e98.zip |
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.
Diffstat (limited to 'lisp/org')
-rw-r--r-- | lisp/org/ox.el | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/lisp/org/ox.el b/lisp/org/ox.el index a4512270c90..ae7e41e576b 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 |