Function: org-odt--enumerate

org-odt--enumerate is a byte-compiled function defined in ox-odt.el.gz.

Signature

(org-odt--enumerate ELEMENT INFO &optional PREDICATE N)

Source Code

;; Defined in /usr/src/emacs/lisp/org/ox-odt.el.gz
;;;; Link

;;;; Links :: Label references

(defun org-odt--enumerate (element info &optional predicate n)
  (when predicate (cl-assert (funcall predicate element info)))
  (let* ((--numbered-parent-headline-at-<=-n
	  (lambda (element n info)
	    (cl-loop for x in (org-element-lineage element)
		     thereis (and (org-element-type-p x 'headline)
				  (<= (org-export-get-relative-level x info) n)
				  (org-export-numbered-headline-p x info)
				  x))))
	 (--enumerate
	  (lambda (element scope info &optional predicate)
	    (let ((counter 0))
	      (org-element-map (or scope (plist-get info :parse-tree))
		  (org-element-type element)
		(lambda (el)
		  (and (or (not predicate) (funcall predicate el info))
		       (cl-incf counter)
		       (eq element el)
		       counter))
		info 'first-match))))
	 (scope (funcall --numbered-parent-headline-at-<=-n
			 element
			 (or n (plist-get info :odt-display-outline-level))
			 info))
	 (ordinal (funcall --enumerate element scope info predicate))
	 (tag
	  (concat
	   ;; Section number.
	   (and scope
		(mapconcat 'number-to-string
			   (org-export-get-headline-number scope info) "."))
	   ;; Separator.
	   (and scope ".")
	   ;; Ordinal.
	   (number-to-string ordinal))))
    tag))