Browse Source

org-element: Small refactoring

* contrib/lisp/org-element.el (org-element-map): Remove use of `every'
  function.
Nicolas Goaziou 13 years ago
parent
commit
9696250e53
1 changed files with 15 additions and 6 deletions
  1. 15 6
      contrib/lisp/org-element.el

+ 15 - 6
contrib/lisp/org-element.el

@@ -3338,12 +3338,21 @@ Nil values returned from FUN do not appear in the results."
   (unless (listp no-recursion) (setq no-recursion (list no-recursion)))
   ;; Recursion depth is determined by --CATEGORY.
   (let* ((--category
-	  (cond
-	   ((every (lambda (el) (memq el org-element-greater-elements)) types)
-	    'greater-elements)
-	   ((every (lambda (el) (memq el org-element-all-elements)) types)
-	    'elements)
-	   (t 'objects)))
+	  (catch 'found
+	    (let ((category 'greater-elements))
+	      (mapc (lambda (type)
+		      (cond ((memq type org-element-all-objects)
+			     ;; If one object is found, the function
+			     ;; has to recurse into every object.
+			     (throw 'found 'objects))
+			    ((not (memq type org-element-greater-elements))
+			     ;; If one regular element is found, the
+			     ;; function has to recurse, at lest, into
+			     ;; every element it encounters.
+			     (and (not (eq category 'elements))
+				  (setq category 'elements)))))
+		    types)
+	      category)))
 	 --acc
 	 --walk-tree
 	 (--walk-tree