X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=doi-utils.org;h=442aaa7e91aae7adad83ac1eeeaf30f5b7587388;hp=900d12b217dc0d121d081cf52ffbe251b2959672;hb=a646c41c18b7dd968d596dc64df3a0cb8ab98225;hpb=b65c5766ee17ae233a630fa77255bf63b2c80758 diff --git a/doi-utils.org b/doi-utils.org index 900d12b..442aaa7 100644 --- a/doi-utils.org +++ b/doi-utils.org @@ -487,7 +487,7 @@ Next, we need to define the different bibtex types. Each type has a bibtex type #+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' @@ -495,10 +495,9 @@ without changing the results." (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 @@ -516,7 +515,7 @@ when the `:type' parameter in the JSON metadata is contained in (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, @@ -535,17 +534,21 @@ when the `:type' parameter in the JSON metadata is contained in (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: