org-export: Suppress some byte-compiling warnings

This commit is contained in:
Nicolas Goaziou 2012-06-08 16:12:47 +02:00
parent a147dc3150
commit 3f0f8734ff
1 changed files with 144 additions and 132 deletions

View File

@ -1116,8 +1116,7 @@ Return options as a plist."
(plist-put
plist :title
(org-element-parse-secondary-string
prop
(cdr (assq 'keyword org-element-string-restrictions))))))
prop (org-element-restriction 'keyword)))))
(when (setq prop (org-entry-get (point) "EXPORT_TEXT"))
(setq plist (plist-put plist :text prop)))
(when (setq prop (org-entry-get (point) "EXPORT_AUTHOR"))
@ -1489,26 +1488,28 @@ associated numbering \(in the shape of a list of numbers\)."
"Return list of elements and objects to ignore during export.
DATA is the parse tree to traverse. OPTIONS is the plist holding
export options."
(let (ignore
(walk-data
(function
(lambda (data options selected)
;; Collect ignored elements or objects into IGNORE-LIST.
(mapc
(lambda (el)
(if (org-export--skip-p el options selected) (push el ignore)
(let ((type (org-element-type el)))
(if (and (eq (plist-get info :with-archived-trees) 'headline)
(eq (org-element-type el) 'headline)
(org-element-property :archivedp el))
;; If headline is archived but tree below has
;; to be skipped, add it to ignore list.
(mapc (lambda (e) (push e ignore))
(org-element-contents el))
;; Move into recursive objects/elements.
(when (org-element-contents el)
(funcall walk-data el options selected))))))
(org-element-contents data))))))
(let* (ignore
walk-data ; for byte-compiler.
(walk-data
(function
(lambda (data options selected)
;; Collect ignored elements or objects into IGNORE-LIST.
(mapc
(lambda (el)
(if (org-export--skip-p el options selected) (push el ignore)
(let ((type (org-element-type el)))
(if (and (eq (plist-get options :with-archived-trees)
'headline)
(eq (org-element-type el) 'headline)
(org-element-property :archivedp el))
;; If headline is archived but tree below has
;; to be skipped, add it to ignore list.
(mapc (lambda (e) (push e ignore))
(org-element-contents el))
;; Move into recursive objects/elements.
(when (org-element-contents el)
(funcall walk-data el options selected))))))
(org-element-contents data))))))
;; Main call. First find trees containing a select tag, if any.
(funcall walk-data data options (org-export--selected-trees data options))
;; Return value.
@ -1518,29 +1519,30 @@ export options."
"Return list of headlines containing a select tag in their tree.
DATA is parsed data as returned by `org-element-parse-buffer'.
INFO is a plist holding export options."
(let (selected-trees
(walk-data
(function
(lambda (data genealogy)
(case (org-element-type data)
(org-data (mapc (lambda (el) (funcall walk-data el genealogy))
(org-element-contents data)))
(headline
(let ((tags (org-element-property :tags data)))
(if (loop for tag in (plist-get info :select-tags)
thereis (member tag tags))
;; When a select tag is found, mark full
;; genealogy and every headline within the tree
;; as acceptable.
(setq selected-trees
(append
genealogy
(org-element-map data 'headline 'identity)
selected-trees))
;; Else, continue searching in tree, recursively.
(mapc
(lambda (el) (funcall walk-data el (cons data genealogy)))
(org-element-contents data))))))))))
(let* (selected-trees
walk-data ; for byte-compiler.
(walk-data
(function
(lambda (data genealogy)
(case (org-element-type data)
(org-data (mapc (lambda (el) (funcall walk-data el genealogy))
(org-element-contents data)))
(headline
(let ((tags (org-element-property :tags data)))
(if (loop for tag in (plist-get info :select-tags)
thereis (member tag tags))
;; When a select tag is found, mark full
;; genealogy and every headline within the tree
;; as acceptable.
(setq selected-trees
(append
genealogy
(org-element-map data 'headline 'identity)
selected-trees))
;; Else, continue searching in tree, recursively.
(mapc
(lambda (el) (funcall walk-data el (cons data genealogy)))
(org-element-contents data))))))))))
(funcall walk-data data nil) selected-trees))
(defun org-export--skip-p (blob options selected)
@ -2367,6 +2369,9 @@ of subtree at point.
When optional argument PUB-DIR is set, use it as the publishing
directory.
When optional argument VISIBLE-ONLY is non-nil, don't export
contents of hidden elements.
Return file name as a string, or nil if it couldn't be
determined."
(let ((base-name
@ -2376,8 +2381,7 @@ determined."
(or (and subtreep
(org-entry-get
(save-excursion
(ignore-errors
(org-back-to-heading (not visible-only)) (point)))
(ignore-errors (org-back-to-heading) (point)))
"EXPORT_FILE_NAME" t))
;; File name may be extracted from buffer's associated
;; file, if any.
@ -2639,27 +2643,28 @@ INFO is the plist used as a communication channel.
Definitions are sorted by order of references. They either
appear as Org data or as a secondary string for inlined
footnotes. Unreferenced definitions are ignored."
(let (num-alist
(collect-fn
(function
(lambda (data)
;; Collect footnote number, label and definition in DATA.
(org-element-map
data 'footnote-reference
(lambda (fn)
(when (org-export-footnote-first-reference-p fn info)
(let ((def (org-export-get-footnote-definition fn info)))
(push
(list (org-export-get-footnote-number fn info)
(org-element-property :label fn)
def)
num-alist)
;; Also search in definition for nested footnotes.
(when (eq (org-element-property :type fn) 'standard)
(funcall collect-fn def)))))
;; Don't enter footnote definitions since it will happen
;; when their first reference is found.
info nil 'footnote-definition)))))
(let* (num-alist
collect-fn ; for byte-compiler.
(collect-fn
(function
(lambda (data)
;; Collect footnote number, label and definition in DATA.
(org-element-map
data 'footnote-reference
(lambda (fn)
(when (org-export-footnote-first-reference-p fn info)
(let ((def (org-export-get-footnote-definition fn info)))
(push
(list (org-export-get-footnote-number fn info)
(org-element-property :label fn)
def)
num-alist)
;; Also search in definition for nested footnotes.
(when (eq (org-element-property :type fn) 'standard)
(funcall collect-fn def)))))
;; Don't enter footnote definitions since it will happen
;; when their first reference is found.
info nil 'footnote-definition)))))
(funcall collect-fn (plist-get info :parse-tree))
(reverse num-alist)))
@ -2673,25 +2678,26 @@ INFO is the plist used as a communication channel."
(if (not label) t
;; Otherwise, return the first footnote with the same LABEL and
;; test if it is equal to FOOTNOTE-REFERENCE.
(let ((search-refs
(function
(lambda (data)
(org-element-map
data 'footnote-reference
(lambda (fn)
(cond
((string= (org-element-property :label fn) label)
(throw 'exit fn))
;; If FN isn't inlined, be sure to traverse its
;; definition before resuming search. See
;; comments in `org-export-get-footnote-number'
;; for more information.
((eq (org-element-property :type fn) 'standard)
(funcall search-refs
(org-export-get-footnote-definition fn info)))))
;; Don't enter footnote definitions since it will
;; happen when their first reference is found.
info 'first-match 'footnote-definition)))))
(let* (search-refs ; for byte-compiler.
(search-refs
(function
(lambda (data)
(org-element-map
data 'footnote-reference
(lambda (fn)
(cond
((string= (org-element-property :label fn) label)
(throw 'exit fn))
;; If FN isn't inlined, be sure to traverse its
;; definition before resuming search. See
;; comments in `org-export-get-footnote-number'
;; for more information.
((eq (org-element-property :type fn) 'standard)
(funcall search-refs
(org-export-get-footnote-definition fn info)))))
;; Don't enter footnote definitions since it will
;; happen when their first reference is found.
info 'first-match 'footnote-definition)))))
(equal (catch 'exit (funcall search-refs (plist-get info :parse-tree)))
footnote-reference)))))
@ -2707,45 +2713,46 @@ INFO is the plist used as a communication channel."
FOOTNOTE is either a footnote reference or a footnote definition.
INFO is the plist used as a communication channel."
(let ((label (org-element-property :label footnote))
seen-refs
(search-ref
(function
(lambda (data)
;; Search footnote references through DATA, filling
;; SEEN-REFS along the way.
(org-element-map
data 'footnote-reference
(lambda (fn)
(let ((fn-lbl (org-element-property :label fn)))
(cond
;; Anonymous footnote match: return number.
((and (not fn-lbl) (equal fn footnote))
(throw 'exit (1+ (length seen-refs))))
;; Labels match: return number.
((and label (string= label fn-lbl))
(throw 'exit (1+ (length seen-refs))))
;; Anonymous footnote: it's always a new one. Also,
;; be sure to return nil from the `cond' so
;; `first-match' doesn't get us out of the loop.
((not fn-lbl) (push 'inline seen-refs) nil)
;; Label not seen so far: add it so SEEN-REFS.
;;
;; Also search for subsequent references in footnote
;; definition so numbering following reading logic.
;; Note that we don't have to care about inline
;; definitions, since `org-element-map' already
;; traverse them at the right time.
;;
;; Once again, return nil to stay in the loop.
((not (member fn-lbl seen-refs))
(push fn-lbl seen-refs)
(funcall search-ref
(org-export-get-footnote-definition fn info))
nil))))
;; Don't enter footnote definitions since it will happen
;; when their first reference is found.
info 'first-match 'footnote-definition)))))
(let* ((label (org-element-property :label footnote))
seen-refs
search-ref ; for byte-compiler.
(search-ref
(function
(lambda (data)
;; Search footnote references through DATA, filling
;; SEEN-REFS along the way.
(org-element-map
data 'footnote-reference
(lambda (fn)
(let ((fn-lbl (org-element-property :label fn)))
(cond
;; Anonymous footnote match: return number.
((and (not fn-lbl) (equal fn footnote))
(throw 'exit (1+ (length seen-refs))))
;; Labels match: return number.
((and label (string= label fn-lbl))
(throw 'exit (1+ (length seen-refs))))
;; Anonymous footnote: it's always a new one. Also,
;; be sure to return nil from the `cond' so
;; `first-match' doesn't get us out of the loop.
((not fn-lbl) (push 'inline seen-refs) nil)
;; Label not seen so far: add it so SEEN-REFS.
;;
;; Also search for subsequent references in footnote
;; definition so numbering following reading logic.
;; Note that we don't have to care about inline
;; definitions, since `org-element-map' already
;; traverse them at the right time.
;;
;; Once again, return nil to stay in the loop.
((not (member fn-lbl seen-refs))
(push fn-lbl seen-refs)
(funcall search-ref
(org-export-get-footnote-definition fn info))
nil))))
;; Don't enter footnote definitions since it will happen
;; when their first reference is found.
info 'first-match 'footnote-definition)))))
(catch 'exit (funcall search-ref (plist-get info :parse-tree)))))
@ -2893,12 +2900,16 @@ This only applies to links without a description."
(and (not (org-element-contents link))
(let ((case-fold-search t)
(rules (or rules org-export-default-inline-image-rule)))
(some
(lambda (rule)
(and (string= (org-element-property :type link) (car rule))
(string-match (cdr rule)
(org-element-property :path link))))
rules))))
(catch 'exit
(mapc
(lambda (rule)
(and (string= (org-element-property :type link) (car rule))
(string-match (cdr rule)
(org-element-property :path link))
(throw 'exit t)))
rules)
;; Return nil if no rule matched.
nil))))
(defun org-export-resolve-coderef (ref info)
"Resolve a code reference REF.
@ -3856,6 +3867,7 @@ BLOB is the element or object being considered. INFO is a plist
used as a communication channel."
(let* ((type (org-element-type blob))
(end (org-element-property :end blob))
walk-data ; for byte-compiler.
(walk-data
(lambda (data genealogy)
;; Walk DATA, looking for BLOB. GENEALOGY is the list of