0
0
Fork 1
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-09-04 21:43:28 +00:00

Backport commit 979308b4c from Emacs

* lisp/ox.el (org-export-data): Use temporary buffer to collect export
data instead of `mapconcat'.  Using buffer puts less load on garbage
collector.

org-export-data: Concatenate strings in temporary buffer for performance
979308b4cad2b573606ed71a1689a47a9e7a9e98
Ihor Radchenko
Thu Jun 16 10:53:51 2022 +0300

[ km: This ported commit comes from main's a158b263a and was reverted
  in 811deae32.  I'm applying it here too for bookkeeping/traceability
  purposes, but these changes will be discarded when merged with
  main. ]
This commit is contained in:
Ihor Radchenko 2022-06-16 01:01:53 +08:00 committed by Kyle Meyer
parent 4ae72c6174
commit 8ac9203d5c

View file

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