From e9a9f01552a1f8513594ab418bb65967371c2c10 Mon Sep 17 00:00:00 2001 From: morioka Date: Sat, 25 Apr 1998 06:55:55 +0000 Subject: [PATCH] (ctree-match-calist-all): New function. --- calist.el | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/calist.el b/calist.el index 154e105..0d47b82 100644 --- a/calist.el +++ b/calist.el @@ -84,6 +84,37 @@ ret-alist)))) )))) +(defun ctree-match-calist-all (rule-tree alist) + "Return matched condition-alist if ALIST matches RULE-TREE." + (if (null rule-tree) + (list alist) + (let ((type (car rule-tree)) + (choices (cdr rule-tree)) + default dest) + (while choices + (let* ((choice (car choices)) + (choice-value (car choice))) + (if (eq choice-value t) + (setq default choice) + (let ((ret-alist (calist-field-match alist type (car choice)))) + (if ret-alist + (if (cdr choice) + (setq dest + (append + (ctree-match-calist-all (cdr choice) ret-alist) + dest)) + (setq dest (cons ret-alist dest)) + ))))) + (setq choices (cdr choices))) + (or dest + (if default + (let ((ret-alist (calist-field-match alist type t))) + (if ret-alist + (if (cdr default) + (ctree-match-calist-all (cdr default) ret-alist) + (list ret-alist) + )))))))) + (defun calist-to-ctree (calist) "Convert condition-alist CALIST to condition-tree." (if calist -- 1.7.10.4