Function: org-element--property
org-element--property is a byte-compiled function defined in
org-element-ast.el.gz.
Signature
(org-element--property PROPERTY NODE &optional DFLT FORCE-UNDEFER)
Documentation
Extract the value from the PROPERTY of a NODE.
Return DFLT when PROPERTY is not present. When FORCE-UNDEFER is non-nil, unconditionally resolve deferred properties, replacing their values in NODE.
Source Code
;; Defined in /usr/src/emacs/lisp/org/org-element-ast.el.gz
(defun org-element--property (property node &optional dflt force-undefer)
"Extract the value from the PROPERTY of a NODE.
Return DFLT when PROPERTY is not present.
When FORCE-UNDEFER is non-nil, unconditionally resolve deferred
properties, replacing their values in NODE."
(let ((value (org-element-property-raw property node 'org-element-ast--nil)))
;; PROPERTY not present.
(when (and (eq 'org-element-ast--nil value)
(org-element-deferred-p
(org-element-property-raw :deferred node)))
;; If :deferred has `org-element-deferred' type, resolve it for
;; side-effects, and re-assign the new value.
(org-element--property :deferred node nil 'force-undefer)
;; Try to retrieve the value again.
(setq value (org-element-property-raw property node dflt)))
;; Deferred property. Resolve it recursively.
(when (org-element-deferred-p value)
(let ((retry t) (firstiter t))
(while retry
(if firstiter (setq firstiter nil) ; avoid extra call to `org-element-property-raw'.
(setq value (org-element-property-raw property node 'org-element-ast--nil)))
(catch :org-element-deferred-retry
(pcase-let
((`(,resolved . ,value-to-store)
(org-element--deferred-resolve value node force-undefer)))
(setq value resolved)
;; Store the resolved property value, if needed.
(unless (eq value-to-store 'org-element-ast--nil)
(org-element-put-property node property value-to-store)))
;; Finished resolving.
(setq retry nil)))))
;; Return the resolved value.
(if (eq value 'org-element-ast--nil) dflt value)))