Mercurial > core / lisp/lib/organ/element/lesser/planning.lisp
changeset 698: |
96958d3eb5b0 |
parent: |
b7183bfd7107
|
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: |
-rw-r--r-- |
description: |
fixes |
1 ;;; lib/organ/element/lesser/planning.lisp --- Org Planning Elements 3 ;; A planning element matches the pattern: 10 ;; HEADING is just a heading. 12 ;; PLANNING matches the pattern: 'KEYWORD: TIMESTAMP'. 14 ;; KEYWORD is one of DEADLINE, SCHEDULED, CLOSED. 19 (sb-int:defconstant-eqx +org-planning-keywords+ '("DEADLINE" "SCHEDULED" "CLOSED") #'equal) 21 ;; helper object, not public API 22 (define-org-object planning-line ((keyword "" :type string) (timestamp "" :type string))) 24 ;; always consume the string 25 (define-org-parser (planning-line :from string) 26 (multiple-value-bind (match subs) 27 (scan-to-strings org-planning-rx input) 29 (let ((kw (aref subs 0)) 32 (let ((pl (org-create :planning-line))) 33 (setf (org-planning-line-keyword pl) kw 34 (org-planning-line-timestamp pl) ts) 37 (define-org-element planning ((contents :initarg :contents :accessor org-contents :type (vector org-planning-line) :initform (make-array 0 :element-type 'org-planning-line :adjustable t :fill-pointer 0))) 40 (define-org-parser (planning :from stream) 41 (let ((first (read-line input nil)) 42 (p (org-create :planning))) 43 (when-let ((pl1 (org-parse :planning-line first))) 44 (vector-push-extend pl1 (org-contents p)) 45 (loop for l = (read-line input) ;; FIXME: peek-line no work 47 with pl = (org-parse :planning-line (read-line input)) 49 do (vector-push-extend pl (org-contents p))) 52 (define-org-parser (planning :from string) 53 (with-input-from-string (s input) 54 (org-parse :planning s)))