diff --git a/contrib/lisp/org-element.el b/contrib/lisp/org-element.el index 35e385488..4e5e7fdd1 100644 --- a/contrib/lisp/org-element.el +++ b/contrib/lisp/org-element.el @@ -2985,29 +2985,7 @@ Nil values returned from FUN are ignored in the result." (assq (car el) org-element-string-restrictions)))) collect (car el)))) - --walk-tree ; For byte-compiler --acc - (--check-blob - (function - (lambda (--type types fun --blob) - ;; Check if TYPE is matching among TYPES. If so, apply - ;; FUN to --BLOB and accumulate return value into --ACC. - ;; INFO is the communication channel. If --BLOB has - ;; a secondary string that can contain objects with their - ;; type amond TYPES, look into that string first. - (when (memq --type types) - (let ((result (funcall fun --blob))) - (cond ((not result)) - (first-match (throw 'first-match result)) - (t (push result --acc))))) - (when (memq --type --restricts) - (funcall - --walk-tree - `(org-data - nil - ,@(org-element-property - (cdr (assq --type org-element-secondary-value-alist)) - --blob))))))) (--walk-tree (function (lambda (--data) @@ -3015,31 +2993,34 @@ Nil values returned from FUN are ignored in the result." ;; a plist holding contextual information. (mapc (lambda (--blob) - (let ((--type (org-element-type --blob))) - ;; Determine if a recursion into --BLOB is - ;; possible and allowed. - (cond - ;; Element or object not exportable. - ((and info (member --blob (plist-get info :ignore-list)))) - ;; Limiting recursion to greater elements, and --BLOB - ;; isn't one. - ((and (eq --category 'greater-elements) - (not (memq --type org-element-greater-elements))) - (funcall --check-blob --type types fun --blob)) - ;; Limiting recursion to elements, and --BLOB only - ;; contains objects. - ((and (eq --category 'elements) (eq --type 'paragraph)) - (funcall --check-blob --type types fun --blob)) - ;; No limitation on recursion, but --BLOB hasn't - ;; got a recursive type. - ((and (eq --category 'objects) - (not (or (eq --type 'paragraph) - (memq --type org-element-greater-elements) - (memq --type org-element-recursive-objects)))) - (funcall --check-blob --type types fun --blob)) - ;; Recursion is possible and allowed: Maybe apply - ;; FUN to --BLOB, then move into it. - (t (funcall --check-blob --type types fun --blob) + (unless (and info (member --blob (plist-get info :ignore-list))) + (let ((--type (org-element-type --blob))) + ;; Check if TYPE is matching among TYPES. If so, + ;; apply FUN to --BLOB and accumulate return value + ;; into --ACC (or exit if FIRST-MATCH is non-nil). + (when (memq --type types) + (let ((result (funcall fun --blob))) + (cond ((not result)) + (first-match (throw 'first-match result)) + (t (push result --acc))))) + ;; If --BLOB has a secondary string that can + ;; contain objects with their type among TYPES, + ;; look into that string. + (when (memq --type --restricts) + (funcall + --walk-tree + `(org-data + nil + ,@(org-element-property + (cdr (assq --type org-element-secondary-value-alist)) + --blob)))) + ;; Now determine if a recursion into --BLOB is + ;; possible. If so, do it. + (when (or (memq --type org-element-recursive-objects) + (and (memq --type org-element-all-elements) + (not (eq --category 'elements))) + (and (memq --type org-element-greater-elements) + (not (eq --category 'greater-elements)))) (funcall --walk-tree --blob))))) (org-element-contents --data)))))) (catch 'first-match