Function: org-element--cache-key

org-element--cache-key is a byte-compiled function defined in org-element.el.gz.

Signature

(org-element--cache-key ELEMENT)

Documentation

Return a unique key for ELEMENT in cache tree.

Keys are used to keep a total order among elements in the cache. Comparison is done with org-element--cache-key-less-p.

When no synchronization is taking place, a key is simply the beginning position of the element, or that position plus one in the case of an first item (respectively row) in a list (respectively a table). They key of a section is its beginning position minus one.

During a synchronization, the key is the one the element had when the cache was synchronized for the last time. Elements added to cache during the synchronization get a new key generated with org-element--cache-generate-key.

Such keys are stored inside the element property
:org-element--cache-sync-key. The property is a cons containing
current org-element--cache-sync-keys-value and the element key.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-element.el.gz
(defsubst org-element--cache-key (element)
  "Return a unique key for ELEMENT in cache tree.

Keys are used to keep a total order among elements in the cache.
Comparison is done with `org-element--cache-key-less-p'.

When no synchronization is taking place, a key is simply the
beginning position of the element, or that position plus one in
the case of an first item (respectively row) in
a list (respectively a table).  They key of a section is its beginning
position minus one.

During a synchronization, the key is the one the element had when
the cache was synchronized for the last time.  Elements added to
cache during the synchronization get a new key generated with
`org-element--cache-generate-key'.

Such keys are stored inside the element property
`:org-element--cache-sync-key'.  The property is a cons containing
current `org-element--cache-sync-keys-value' and the element key."
  (or (when-let* ((key-cons (org-element-property :org-element--cache-sync-key element)))
        (when (eq org-element--cache-sync-keys-value (car key-cons))
          (cdr key-cons)))
      (let* ((begin (org-element-begin element))
             (type (org-element-type element))
	     ;; Increase beginning position of items (respectively
	     ;; table rows) by one, so the first item can get
	     ;; a different key from its parent list (respectively
	     ;; table).
	     (key
              (cond
               ((memq type '(item table-row)) (1+ begin))
               ;; Decrease beginning position of sections by one,
               ;; so that the first element of the section get
               ;; different key from the parent section.
               ((eq type 'section) (1- begin))
               ((eq type 'org-data) (- begin 2))
               (t begin))))
        (when org-element--cache-sync-requests
	  (org-element-put-property
           element
           :org-element--cache-sync-key
           (cons org-element--cache-sync-keys-value key)))
        key)))