From b78800f05a595dff1b4fccc6ed77fdef4a211717 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Sat, 24 Dec 2011 14:07:47 +0100 Subject: [PATCH] contrib/lisp/org-element: Hygienize org-element-map * contrib/lisp/org-element.el (org-element-map): Change name of local variables to prevent variable name collisions with the function around org-element-map. --- contrib/lisp/org-element.el | 136 ++++++++++++++++++------------------ 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/contrib/lisp/org-element.el b/contrib/lisp/org-element.el index 73942084c..f62d99453 100644 --- a/contrib/lisp/org-element.el +++ b/contrib/lisp/org-element.el @@ -2775,7 +2775,7 @@ the current buffer." (insert string) (org-element-parse-objects (point-min) (point-max) nil restriction))) -(defun org-element-map (data types fun &optional options first-match) +(defun org-element-map (data types fun &optional info first-match) "Map a function on selected elements or objects. DATA is the parsed tree, as returned by, i.e, @@ -2785,7 +2785,7 @@ matching element or object. It must accept two arguments: the element or object itself and a plist holding contextual information. -When optional argument OPTIONS is non-nil, it should be a plist +When optional argument INFO is non-nil, it should be a plist holding export options. In that case, parts of the parse tree not exportable according to that property list will be skipped and files included through a keyword will be visited. @@ -2796,9 +2796,8 @@ match for which FUN doesn't return nil, and return that value. Nil values returned from FUN are ignored in the result." ;; Ensure TYPES is a list, even of one element. (unless (listp types) (setq types (list types))) - ;; Recursion depth is determined by TYPE-CATEGORY, to avoid - ;; unnecessary steps. - (let* ((type-category + ;; Recursion depth is determined by --CATEGORY. + (let* ((--category (cond ((loop for type in types always (memq type org-element-greater-elements)) @@ -2807,97 +2806,98 @@ Nil values returned from FUN are ignored in the result." always (memq type org-element-all-elements)) 'elements) (t 'objects))) - walk-tree ; For byte-compiler - acc ; Accumulate results into ACC. + walk-tree ; For byte-compiler + --acc (accumulate-maybe (function - ;; Check if TYPE is matching among TYPES. If so, apply FUN - ;; to BLOB and accumulate return value into ACC. INFO is - ;; the communication channel. - (lambda (type types fun blob info) - (when (memq type types) - (let ((result (funcall fun blob info))) - (cond - ((not result)) - (first-match (throw 'first-match result)) - (t (push result acc)))))))) + (lambda (--type types fun --blob --local) + ;; Check if TYPE is matching among TYPES. If so, apply + ;; FUN to --BLOB and accumulate return value + ;; into --ACC. --LOCAL is the communication channel. + (when (memq --type types) + (let ((result (funcall fun --blob --local))) + (cond ((not result)) + (first-match (throw 'first-match result)) + (t (push result --acc)))))))) (walk-tree (function - ;; Recursively walk DATA. INFO, if non-nil, is a plist - ;; holding contextual information. - (lambda (data info) + (lambda (--data --local) + ;; Recursively walk DATA. --LOCAL, if non-nil, is + ;; a plist holding contextual information. (mapc - (lambda (blob) - (let ((type (if (stringp blob) 'plain-text (car blob)))) - ;; Determine if a recursion into BLOB is possible - ;; and allowed. + (lambda (--blob) + (let ((--type (if (stringp --blob) 'plain-text (car --blob)))) + ;; Determine if a recursion into --BLOB is + ;; possible and allowed. (cond ;; Element or object not exportable. - ((and info (org-export-skip-p blob info))) - ;; Archived headline: skip it. + ((and info (org-export-skip-p --blob info))) + ;; Archived headline: Maybe apply fun on it, but + ;; skip contents. ((and info - (eq type 'headline) - (and (eq (plist-get info :with-archived-trees) - 'headline) - (org-element-get-property :archivedp blob))) - (funcall accumulate-maybe type types fun blob info)) + (eq --type 'headline) + (eq (plist-get info :with-archived-trees) 'headline) + (org-element-get-property :archivedp --blob)) + (funcall accumulate-maybe --type types fun --blob --local)) ;; At an include keyword: apply mapping to its ;; contents. - ((and info - (eq type 'keyword) + ((and --local + (eq --type 'keyword) (string= - (downcase (org-element-get-property :key blob)) + (downcase (org-element-get-property :key --blob)) "include")) - (funcall accumulate-maybe type types fun blob info) - (let* ((data (org-export-parse-included-file blob info)) - (value (org-element-get-property :value blob)) - (file (and (string-match "^\"\\(\\S-+\\)\"" value) - (match-string 1 value)))) + (funcall accumulate-maybe --type types fun --blob --local) + (let* ((--data + (org-export-parse-included-file --blob --local)) + (--value (org-element-get-property :value --blob)) + (--file + (and (string-match "^\"\\(\\S-+\\)\"" --value) + (match-string 1 --value)))) (funcall - walk-tree - data + walk-tree --data (org-combine-plists - info + --local ;; Store full path of already included files ;; to avoid recursive file inclusion. `(:included-files - ,(cons (expand-file-name file) - (plist-get info :included-files)) + ,(cons (expand-file-name --file) + (plist-get --local :included-files)) ;; Ensure that a top-level headline in the ;; included file becomes a direct child of ;; the current headline in the buffer. :headline-offset ,(- (+ (plist-get - (plist-get info :inherited-properties) :level) - (or (plist-get info :headline-offset) 0)) - (1- (org-export-get-min-level data info)))))))) - ;; Limiting recursion to greater elements, and BLOB + (plist-get --local :inherited-properties) + :level) + (or (plist-get --local :headline-offset) 0)) + (1- (org-export-get-min-level + --data --local)))))))) + ;; Limiting recursion to greater elements, and --BLOB ;; isn't one. - ((and (eq type-category 'greater-elements) - (not (memq type org-element-greater-elements))) - (funcall accumulate-maybe type types fun blob info)) - ;; Limiting recursion to elements, and BLOB only + ((and (eq --category 'greater-elements) + (not (memq --type org-element-greater-elements))) + (funcall accumulate-maybe --type types fun --blob --local)) + ;; Limiting recursion to elements, and --BLOB only ;; contains objects. - ((and (eq type-category 'elements) (eq type 'paragraph))) - ;; No limitation on recursion, but BLOB hasn't got - ;; a recursive type. - ((and (eq type-category 'objects) - (not (or (eq type 'paragraph) - (memq type org-element-greater-elements) - (memq type org-element-recursive-objects)))) - (funcall accumulate-maybe type types fun blob info)) + ((and (eq --category 'elements) (eq --type 'paragraph))) + ;; 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 accumulate-maybe --type types fun --blob --local)) ;; Recursion is possible and allowed: Update local - ;; informations and move into BLOB. - (t (funcall accumulate-maybe type types fun blob info) + ;; information and move into --BLOB. + (t (funcall accumulate-maybe --type types fun --blob --local) (funcall - walk-tree - blob - (and options (org-export-update-info blob info t))))))) - (org-element-get-contents data)))))) + walk-tree --blob + (and info (org-export-update-info --blob --local t))))))) + (org-element-get-contents --data)))))) (catch 'first-match - (funcall walk-tree data options) + (funcall walk-tree data info) ;; Return value in a proper order. - (reverse acc)))) + (reverse --acc)))) ;; The following functions are internal parts of the parser. The ;; first one, `org-element-parse-elements' acts at the element's