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 (eq 'keyword (org-element-type element))
            (let ((value (org-element-property :value element)))
              (pcase (org-element-property :key element)
		("SETUPFILE"
		 (when (and (org-string-nw-p value)
			    (not buffer-read-only)) ;FIXME: bug in Gnus?
		   (let* ((uri (org-strip-quotes value))
			  (uri-is-url (org-url-p uri))
			  (uri (if uri-is-url
				   uri
				 (expand-file-name uri))))
		     (unless (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 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)))