Function: org-element--get-node-properties
org-element--get-node-properties is a byte-compiled function defined
in org-element.el.gz.
Signature
(org-element--get-node-properties &optional AT-POINT-P? PARENT)
Documentation
Return node properties for headline or property drawer at point.
The property values a deferred relative to PARENT element. Upcase property names. It avoids confusion between properties obtained through property drawer and default properties from the parser (e.g. :end and :END:). Return value is a plist.
When AT-POINT-P? is nil, assume that point as at a headline. Otherwise parse properties for property drawer at point.
Source Code
;; Defined in /usr/src/emacs/lisp/org/org-element.el.gz
;;;; Headline
(defun org-element--get-node-properties (&optional at-point-p? parent)
"Return node properties for headline or property drawer at point.
The property values a deferred relative to PARENT element.
Upcase property names. It avoids confusion between properties
obtained through property drawer and default properties from the
parser (e.g. `:end' and :END:). Return value is a plist.
When AT-POINT-P? is nil, assume that point as at a headline. Otherwise
parse properties for property drawer at point."
(save-excursion
(let ((begin (or (org-element-begin parent) (point))))
(unless at-point-p?
(forward-line)
(when (looking-at-p org-element-planning-line-re) (forward-line)))
(when (looking-at org-property-drawer-re)
(forward-line)
(let ((end (match-end 0)) properties)
(while (< (line-end-position) end)
(looking-at org-property-re)
(let* ((property-name (concat ":" (upcase (match-string 2))))
(property-name-symbol (intern property-name))
(property-value
(org-element-deferred-create
t #'org-element--substring
(- (match-beginning 3) begin)
(- (match-end 3) begin))))
(cond
((and (plist-member properties property-name-symbol)
(string-match-p "\\+$" property-name))
(let ((val (plist-get properties property-name-symbol)))
(if (listp val)
(setq properties
(plist-put properties
property-name-symbol
(append (plist-get properties property-name-symbol)
(list property-value))))
(plist-put properties property-name-symbol (list val property-value)))))
(t (setq properties (plist-put properties property-name-symbol property-value)))))
(forward-line))
;; Convert list of deferred properties into a single
;; deferred property.
(let ((plist properties) val)
(while plist
(setq val (cadr plist))
(when (and (car-safe val)
(org-element-deferred-p (car val)))
(setcar
(cdr plist)
(org-element-deferred-create-list (cadr plist))))
(setq plist (cddr plist))))
properties)))))