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)))))