This commit is contained in:
Adam Porter 2020-11-22 08:22:15 -06:00
parent 0d0b6bb808
commit 45a0afd3f1

View file

@ -249,14 +249,14 @@ Multiple predicates are combined with BOOLEAN."
;;;;; Predicate definition ;;;;; Predicate definition
(defvar org-ql-preambles nil)
(defvar org-ql-normalizers nil)
(defvar org-ql-defpred-defer nil) (defvar org-ql-defpred-defer nil)
(defvar org-ql-predicate-list nil)
(defun org-ql--define-normalizers (normalizers) (defun org-ql--define-normalize-query (predicates)
"FIXME" "Define function `org-ql--normalize-query' for PREDICATES.
(setf normalizers (mapcar #'car (delq nil normalizers))) PREDICATES should be the value of `org-ql-predicates'."
(let ((normalizer-patterns (->> predicates
(--map (plist-get (cdr it) :normalizers))
(-flatten-n 1))))
(fset 'org-ql--normalize-query (fset 'org-ql--normalize-query
`(lambda (query) `(lambda (query)
"FIXME" "FIXME"
@ -272,11 +272,11 @@ Multiple predicates are combined with BOOLEAN."
;; TODO: Combine (regexp) when appropriate (i.e. inside an OR, not an AND). ;; TODO: Combine (regexp) when appropriate (i.e. inside an OR, not an AND).
((pred stringp) `(regexp ,element)) ((pred stringp) `(regexp ,element))
,@normalizers ,@normalizer-patterns
;; Any other form: passed through unchanged. ;; Any other form: passed through unchanged.
(_ element)))) (_ element))))
(rec query))))) (rec query))))))
(defun org-ql--define-preamble-fn (predicates) (defun org-ql--define-preamble-fn (predicates)
"FIXME" "FIXME"
@ -363,9 +363,9 @@ match."
`(:name ,',name :aliases ,',aliases :fn ,',fn-name :docstring ,,docstring :args ,',args `(:name ,',name :aliases ,',aliases :fn ,',fn-name :docstring ,,docstring :args ,',args
:normalizers ,',normalizers :preambles ,',preambles)) :normalizers ,',normalizers :preambles ,',preambles))
(unless org-ql-defpred-defer (unless org-ql-defpred-defer
(org-ql--define-normalizers (--map (plist-get it :normalizers) (mapcar #'cdr org-ql-predicate-list))) (org-ql--define-normalize-query (reverse org-ql-predicates))
;; NOTE: Reversing is important! ;; NOTE: Reversing is important!
(org-ql--define-preamble-fn (reverse org-ql-predicate-list)) (org-ql--define-preamble-fn (reverse org-ql-predicates))
(org-ql--def-plain-query-fn)) (org-ql--def-plain-query-fn))
(cl-defun ,fn-name ,args ,docstring ,predicate))))) (cl-defun ,fn-name ,args ,docstring ,predicate)))))
@ -2070,10 +2070,10 @@ of the line after the heading."
;; Predicates defined: stop deferring and call functions to process them. ;; Predicates defined: stop deferring and call functions to process them.
(cl-eval-when (compile load eval) (cl-eval-when (compile load eval)
(setf org-ql-defpred-defer nil) (setf org-ql-defpred-defer nil)
;; FIXME: Make `org-ql--define-normalizers' take `org-ql-predicate-list' as its argument. ;; FIXME: Make `org-ql--define-normalize-query' take `org-ql-predicates' as its argument.
(org-ql--define-normalizers (--map (plist-get it :normalizers) (mapcar #'cdr org-ql-predicate-list))) (org-ql--define-normalize-query (reverse org-ql-predicates))
;; NOTE: Reversing is important! ;; NOTE: Reversing is important!
(org-ql--define-preamble-fn (reverse org-ql-predicate-list)) (org-ql--define-preamble-fn (reverse org-ql-predicates))
(org-ql--def-plain-query-fn)) (org-ql--def-plain-query-fn))
;;;;; Sorting ;;;;; Sorting