org-export-data: Concatenate strings in temporary buffer for performance

* lisp/ox.el (org-export-data): Use temporary buffer to collect export
data instead of `mapconcat'.  Using buffer puts less load on garbage
collector.
This commit is contained in:
Ihor Radchenko 2022-06-16 01:01:53 +08:00
parent 3684c79672
commit a158b263a6
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
1 changed files with 28 additions and 22 deletions

View File

@ -1924,28 +1924,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