Function: org--collect-keywords-1

org--collect-keywords-1 is a byte-compiled function defined in org.el.gz.

Signature

(org--collect-keywords-1 KEYWORDS UNIQUE DIRECTORY FILES ALIST)

Source Code

;; Defined in /usr/src/emacs/lisp/org/org.el.gz
(defun org--collect-keywords-1 (keywords unique directory files alist)
  (org-with-point-at 1
    (let ((case-fold-search t)
	  (regexp (org-make-options-regexp keywords)))
      (while (and keywords (re-search-forward regexp nil t))
        (let ((element (org-element-at-point)))
          (when (org-element-type-p element 'keyword)
            (let ((value (org-element-property :value element)))
              (pcase (org-element-property :key element)
		("SETUPFILE"
		 (when (org-string-nw-p value)
		   (let* ((uri (org-strip-quotes value))
			  (uri-is-url (org-url-p uri))
			  (uri (if uri-is-url
				   uri
                                 ;; In case of error, be safe.
                                 ;; See bug#68976.
                                 (ignore-errors ; return nil when expansion fails.
				   (expand-file-name uri)))))
		     (unless (or (not uri) (member uri files))
		       (with-temp-buffer
			 (unless uri-is-url
			   (setq default-directory (file-name-directory uri)))
			 (let ((contents (org-file-contents uri :noerror)))
			   (when contents
			     (insert contents)
			     ;; Fake Org mode: `org-element-at-point'
			     ;; doesn't need full set-up.
			     (let ((major-mode 'org-mode))
                               (setq-local tab-width 8)
			       (setq alist
				     (org--collect-keywords-1
				      keywords unique directory
				      (cons uri files)
				      alist))))))))))
		(keyword
		 (let ((entry (assoc keyword alist))
		       (final
			(cond ((not (member keyword directory)) value)
			      (buffer-file-name
			       (cons value
				     (file-name-directory buffer-file-name)))
			      (t (cons value default-directory)))))
		   (cond ((member keyword unique)
			  (push (cons keyword final) alist)
			  (setq keywords (remove keyword keywords))
			  (setq regexp (org-make-options-regexp keywords)))
			 ((null entry) (push (list keyword final) alist))
			 (t (push final (cdr entry)))))))))))
      alist)))