#+BEGIN_SRC emacs-lisp :tangle doi-utils.el :results none
(setq doi-utils-bibtex-type-generators nil)
-(defun concat-prepare (lst &optional acc)
+(defun doi-utils-concat-prepare (lst &optional acc)
"Given a list `lst' of strings and other expressions, which are
intented to passed to `concat', concat any subsequent strings,
minimising the number of arguments being passed to `concat'
(cond ((null lst) (nreverse acc))
((and (stringp (car lst))
(stringp (car acc)))
- (concat-prepare (cdr lst) (cons (concat (car acc) (car lst))
+ (doi-utils-concat-prepare (cdr lst) (cons (concat (car acc) (car lst))
(cdr acc))))
- (t (concat-prepare (cdr lst) (cons (car lst) acc)))))
-
+ (t (doi-utils-concat-prepare (cdr lst) (cons (car lst) acc)))))
(defmacro doi-utils-def-bibtex-type (name matching-types &rest fields)
"Define a BibTeX type identified by (symbol) `name' with
(error "unknown bibtex field type %s" field))))
fields)
(concat
- ,@(concat-prepare
+ ,@(doi-utils-concat-prepare
(-flatten
(list (concat "@" (symbol-name name) "{,\n")
;; there seems to be some bug with mapcan,
(doi-utils-def-bibtex-type book ("book")
author title series publisher year pages doi url)
+
+(doi-utils-def-bibtex-type inbook ("book-chapter")
+ author title booktitle series publisher year pages doi url)
+
#+END_SRC
With the code generating the bibtex entry in place, we can glue it to the json retrieval code.
#+BEGIN_SRC emacs-lisp :tangle doi-utils.el
(defun doi-utils-doi-to-bibtex-string (doi)
- "return a bibtex entry as a string for the doi. Only articles are currently supported"
+ "return a bibtex entry as a string for the doi. Not all types are supported yet."
(let* ((results (doi-utils-get-json-metadata doi))
(type (plist-get results :type)))
- (format "%s" results) ; json-data
+ ;(format "%s" results) ; json-data
(or (some (lambda (g) (funcall g type results)) doi-utils-bibtex-type-generators)
- (message-box "%s not supported yet." type))))
+ (message "%s not supported yet\n%S." type results))))
#+END_SRC
#+RESULTS: