Function: org-datetree--find-create

org-datetree--find-create is a byte-compiled function defined in org-datetree.el.gz.

Signature

(org-datetree--find-create REGEX-TEMPLATE YEAR &optional MONTH DAY INSERT MATCH-TITLE)

Documentation

Find the datetree matched by REGEX-TEMPLATE for YEAR, MONTH, or DAY.

REGEX-TEMPLATE is passed to format with YEAR, MONTH, and DAY as arguments.

If MATCH-TITLE is non-nil, REGEX-TEMPLATE is matched against heading title and the exact regexp matched against heading line is:

  (format org-complex-heading-regexp-format
          (format regex-template year month day))

If MATCH-TITLE is nil, the regexp matched against heading line is REGEX-TEMPLATE:

  (format regex-template year month day)

Match group 1 in REGEX-TEMPLATE is compared against the specified date component. If INSERT is non-nil and there is no match then it is inserted into the buffer.

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-datetree.el.gz
(defun org-datetree--find-create
    (regex-template year &optional month day insert match-title)
  "Find the datetree matched by REGEX-TEMPLATE for YEAR, MONTH, or DAY.
REGEX-TEMPLATE is passed to `format' with YEAR, MONTH, and DAY as
arguments.

If MATCH-TITLE is non-nil, REGEX-TEMPLATE is matched against
heading title and the exact regexp matched against heading line is:

  (format org-complex-heading-regexp-format
          (format regex-template year month day))

If MATCH-TITLE is nil, the regexp matched against heading line is
REGEX-TEMPLATE:

  (format regex-template year month day)

Match group 1 in REGEX-TEMPLATE is compared against the specified date
component.  If INSERT is non-nil and there is no match then it is
inserted into the buffer."
  (when (or month day)
    (org-narrow-to-subtree))
  ;; ensure that the first match group in REGEX-TEMPLATE
  ;; is the first inside `org-complex-heading-regexp-format'
  (when (and match-title
             (not (string-match-p "\\\\(\\?1:" regex-template))
             (string-match "\\\\(" regex-template))
    (setq regex-template (replace-match "\\(?1:" nil t regex-template)))
  (let ((re (if match-title
                (format org-complex-heading-regexp-format
                        (format regex-template year month day))
              (format regex-template year month day)))
	match)
    (goto-char (point-min))
    (while (and (setq match (re-search-forward re nil t))
                (goto-char (match-beginning 1))
		(< (string-to-number (match-string 1)) (or day month year))))
    (cond
     ((not match)
      (goto-char (point-max))
      (unless (bolp) (insert "\n"))
      (org-datetree-insert-line year month day insert))
     ((= (string-to-number (match-string 1)) (or day month year))
      (forward-line 0))
     (t
      (forward-line 0)
      (org-datetree-insert-line year month day insert)))))