diff options
author | Bastien Guerry <bzg@altern.org> | 2012-08-10 15:17:16 +0200 |
---|---|---|
committer | Bastien Guerry <bzg@altern.org> | 2012-08-10 15:17:16 +0200 |
commit | 1be0faa40e2ea6cdf0ce2bc0c3b50a8273fa2cc8 (patch) | |
tree | 6a02fd93d6e8b305114fa122e6b1283da8047786 | |
parent | 002b700cb39c95802fc917e34e3f060ea701a795 (diff) | |
download | org-mode-1be0faa40e2ea6cdf0ce2bc0c3b50a8273fa2cc8.tar.gz |
org-bibtex.el: Don't use `org-flet'
* org-bibtex.el (org-bibtex-headline, org-bibtex-fleshout)
(org-bibtex-read, org-bibtex-write): Don't use `org-flet'.
-rw-r--r-- | lisp/org-bibtex.el | 163 |
1 files changed, 84 insertions, 79 deletions
diff --git a/lisp/org-bibtex.el b/lisp/org-bibtex.el index 9639416..3d6e8f2 100644 --- a/lisp/org-bibtex.el +++ b/lisp/org-bibtex.el @@ -310,14 +310,14 @@ This variable is relevant only if `org-bibtex-export-tags-as-keywords` is t." (defun org-bibtex-headline () "Return a bibtex entry of the given headline as a string." (org-labels - ((val (key lst) (cdr (assoc key lst))) - (to (string) (intern (concat ":" string))) - (from (key) (substring (symbol-name key) 1)) - (flatten (&rest lsts) - (apply #'append (mapcar - (lambda (e) - (if (listp e) (apply #'flatten e) (list e))) - lsts)))) + ((val (key lst) (cdr (assoc key lst))) + (to (string) (intern (concat ":" string))) + (from (key) (substring (symbol-name key) 1)) + (flatten (&rest lsts) + (apply #'append (mapcar + (lambda (e) + (if (listp e) (apply #'flatten e) (list e))) + lsts)))) (let ((notes (buffer-string)) (id (org-bibtex-get org-bibtex-key-property)) (type (org-bibtex-get org-bibtex-type-property-name)) @@ -337,30 +337,30 @@ This variable is relevant only if `org-bibtex-export-tags-as-keywords` is t." (lambda (pair) (format " %s={%s}" (car pair) (cdr pair))) (remove nil - (if (and org-bibtex-export-arbitrary-fields - org-bibtex-prefix) - (mapcar - (lambda (kv) - (let ((key (car kv)) (val (cdr kv))) - (when (and - (string-match org-bibtex-prefix key) - (not (string= - (downcase (concat org-bibtex-prefix - org-bibtex-type-property-name)) - (downcase key)))) - (cons (downcase (replace-regexp-in-string - org-bibtex-prefix "" key)) - val)))) - (org-entry-properties nil 'standard)) - (mapcar - (lambda (field) - (let ((value (or (org-bibtex-get (from field)) - (and (equal :title field) - (nth 4 (org-heading-components)))))) - (when value (cons (from field) value)))) - (flatten - (val :required (val (to type) org-bibtex-types)) - (val :optional (val (to type) org-bibtex-types)))))) + (if (and org-bibtex-export-arbitrary-fields + org-bibtex-prefix) + (mapcar + (lambda (kv) + (let ((key (car kv)) (val (cdr kv))) + (when (and + (string-match org-bibtex-prefix key) + (not (string= + (downcase (concat org-bibtex-prefix + org-bibtex-type-property-name)) + (downcase key)))) + (cons (downcase (replace-regexp-in-string + org-bibtex-prefix "" key)) + val)))) + (org-entry-properties nil 'standard)) + (mapcar + (lambda (field) + (let ((value (or (org-bibtex-get (from field)) + (and (equal :title field) + (nth 4 (org-heading-components)))))) + (when value (cons (from field) value)))) + (flatten + (val :required (val (to type) org-bibtex-types)) + (val :optional (val (to type) org-bibtex-types)))))) ",\n")))) (with-temp-buffer (insert entry) @@ -405,24 +405,26 @@ This variable is relevant only if `org-bibtex-export-tags-as-keywords` is t." (read-from-minibuffer "id: ")))) (defun org-bibtex-fleshout (type &optional optional) - "Fleshout the current heading, ensuring that all required fields are present. + "Fleshout current heading, ensuring all required fields are present. With optional argument OPTIONAL, also prompt for optional fields." - (org-flet ((val (key lst) (cdr (assoc key lst))) - (keyword (name) (intern (concat ":" (downcase name)))) - (name (keyword) (substring (symbol-name keyword) 1))) + (let ((val (lambda (key lst) (cdr (assoc key lst)))) + (keyword (lambda (name) (intern (concat ":" (downcase name))))) + (name (lambda (keyword) (substring (symbol-name keyword) 1)))) (dolist (field (append (if org-bibtex-treat-headline-as-title - (remove :title (val :required (val type org-bibtex-types))) - (val :required (val type org-bibtex-types))) - (when optional (val :optional (val type org-bibtex-types))))) + (remove :title (funcall val :required (funcall val type org-bibtex-types))) + (funcall val :required (funcall val type org-bibtex-types))) + (when optional (funcall val :optional (funcall val type org-bibtex-types))))) (when (consp field) ; or'd pair of fields e.g., (:editor :author) - (let ((present (first (remove nil - (mapcar - (lambda (f) (when (org-bibtex-get (name f)) f)) - field))))) - (setf field (or present (keyword (org-icompleting-read - "Field: " (mapcar #'name field))))))) - (let ((name (name field))) + (let ((present (first (remove + nil + (mapcar + (lambda (f) (when (org-bibtex-get (funcall name f)) f)) + field))))) + (setf field (or present (funcall keyword + (org-icompleting-read + "Field: " (mapcar name field))))))) + (let ((name (funcall name field))) (unless (org-bibtex-get name) (let ((prop (org-bibtex-ask field))) (when prop (org-bibtex-put name prop))))))) @@ -601,22 +603,23 @@ With a prefix arg, query for optional fields." "Read a bibtex entry and save to `org-bibtex-entries'. This uses `bibtex-parse-entry'." (interactive) - (org-flet ((keyword (str) (intern (concat ":" (downcase str)))) - (clean-space (str) (replace-regexp-in-string - "[[:space:]\n\r]+" " " str)) - (strip-delim (str) ; strip enclosing "..." and {...} - (dolist (pair '((34 . 34) (123 . 125) (123 . 125))) - (when (and (= (aref str 0) (car pair)) - (= (aref str (1- (length str))) (cdr pair))) - (setf str (substring str 1 (1- (length str)))))) str)) + (let ((keyword (lambda (str) (intern (concat ":" (downcase str))))) + (clean-space (lambda (str) (replace-regexp-in-string + "[[:space:]\n\r]+" " " str))) + (strip-delim + (lambda (str) ; strip enclosing "..." and {...} + (dolist (pair '((34 . 34) (123 . 125) (123 . 125))) + (when (and (= (aref str 0) (car pair)) + (= (aref str (1- (length str))) (cdr pair))) + (setf str (substring str 1 (1- (length str)))))) str))) (push (mapcar (lambda (pair) - (cons (let ((field (keyword (car pair)))) + (cons (let ((field (funcall keyword (car pair)))) (case field (:=type= :type) (:=key= :key) (otherwise field))) - (clean-space (strip-delim (cdr pair))))) + (funcall clean-space (funcall strip-delim (cdr pair))))) (save-excursion (bibtex-beginning-of-entry) (bibtex-parse-entry))) org-bibtex-entries))) @@ -626,29 +629,31 @@ This uses `bibtex-parse-entry'." (when (= (length org-bibtex-entries) 0) (error "No entries in `org-bibtex-entries'.")) (let ((entry (pop org-bibtex-entries)) - (org-special-properties nil)) ; avoids errors with `org-entry-put' - (org-flet ((val (field) (cdr (assoc field entry))) - (togtag (tag) (org-toggle-tag tag 'on))) - (org-insert-heading) - (insert (val :title)) - (org-bibtex-put "TITLE" (val :title)) - (org-bibtex-put org-bibtex-type-property-name (downcase (val :type))) - (dolist (pair entry) - (case (car pair) - (:title nil) - (:type nil) - (:key (org-bibtex-put org-bibtex-key-property (cdr pair))) - (:keywords (if org-bibtex-tags-are-keywords - (mapc - (lambda (kw) - (togtag - (replace-regexp-in-string - "[^[:alnum:]_@#%]" "" - (replace-regexp-in-string "[ \t]+" "_" kw)))) - (split-string (cdr pair) ", *")) - (org-bibtex-put (car pair) (cdr pair)))) - (otherwise (org-bibtex-put (car pair) (cdr pair))))) - (mapc #'togtag org-bibtex-tags)))) + (org-special-properties nil) ; avoids errors with `org-entry-put' + (val (lambda (field) (cdr (assoc field entry)))) + (togtag (lambda (tag) (org-toggle-tag tag 'on)))) + (org-insert-heading) + (insert (funcall val :title)) + (org-bibtex-put "TITLE" (funcall val :title)) + (org-bibtex-put org-bibtex-type-property-name + (downcase (funcall val :type))) + (dolist (pair entry) + (case (car pair) + (:title nil) + (:type nil) + (:key (org-bibtex-put org-bibtex-key-property (cdr pair))) + (:keywords (if org-bibtex-tags-are-keywords + (mapc + (lambda (kw) + (funcall + togtag + (replace-regexp-in-string + "[^[:alnum:]_@#%]" "" + (replace-regexp-in-string "[ \t]+" "_" kw)))) + (split-string (cdr pair) ", *")) + (org-bibtex-put (car pair) (cdr pair)))) + (otherwise (org-bibtex-put (car pair) (cdr pair))))) + (mapc togtag org-bibtex-tags))) (defun org-bibtex-yank () "If kill ring holds a bibtex entry yank it as an Org-mode headline." |