Function: org-element-interpret-data
org-element-interpret-data is an autoloaded and byte-compiled function
defined in org-element.el.gz.
Signature
(org-element-interpret-data DATA)
Documentation
Interpret DATA as Org syntax.
DATA is a parse tree, an element, an object or a secondary string to interpret. Return Org syntax as a string.
Source Code
;; Defined in /usr/src/emacs/lisp/org/org-element.el.gz
;;; Towards A Bijective Process
;;
;; The parse tree obtained with `org-element-parse-buffer' is really
;; a snapshot of the corresponding Org buffer. Therefore, it can be
;; interpreted and expanded into a string with canonical Org syntax.
;; Hence `org-element-interpret-data'.
;;
;; The function relies internally on
;; `org-element--interpret-affiliated-keywords'.
;;;###autoload
(defun org-element-interpret-data (data)
"Interpret DATA as Org syntax.
DATA is a parse tree, an element, an object or a secondary string
to interpret. Return Org syntax as a string."
(letrec ((fun
(lambda (data parent)
(let* ((type (org-element-type data))
;; Find interpreter for current object or
;; element. If it doesn't exist (e.g. this is
;; a pseudo object or element), return contents,
;; if any.
(interpret
(let ((fun (intern
(format "org-element-%s-interpreter" type))))
(if (fboundp fun) fun (lambda (_ contents) contents))))
(results
(cond
;; Secondary string.
((not type)
(mapconcat (lambda (obj) (funcall fun obj parent))
data
""))
;; Full Org document.
((eq type 'org-data)
(mapconcat (lambda (obj) (funcall fun obj parent))
(org-element-contents data)
""))
;; Plain text: return it.
((stringp data) data)
;; Element or object without contents.
((not (org-element-contents data))
(funcall interpret data nil))
;; Element or object with contents.
(t
(funcall
interpret
data
;; Recursively interpret contents.
(mapconcat
(lambda (datum) (funcall fun datum data))
(org-element-contents
(if (not (memq type '(paragraph verse-block)))
data
;; Fix indentation of elements containing
;; objects. We ignore `table-row'
;; elements as they are one line long
;; anyway.
(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 data (car (org-element-contents parent)))
(eq (org-element-property :pre-blank parent)
0)))))
""))))))
(if (memq type '(org-data nil)) results
;; Build white spaces. If no `:post-blank' property
;; is specified, assume its value is 0.
(let ((blank (or (org-element-property :post-blank data) 0)))
(if (eq (org-element-class data parent) 'object)
(concat results (make-string blank ?\s))
(concat (org-element--interpret-affiliated-keywords data)
(org-element-normalize-string results)
(make-string blank ?\n)))))))))
(funcall fun data nil)))