From 7cc7047516970d9e7da32e23bb11b35c8dbfae6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20Simonyi?= Date: Mon, 20 Sep 2021 12:41:20 +0200 Subject: [PATCH] oc-csl: Use citeproc-el to create CSL processor itemgetters * lisp/oc-csl.el (org-cite-csl--processor): Citeproc-el now provides an itemgetter constructor with all the required functionality and some more, so we use it to create the itemgetter instead of `org-cite-csl--itemgetter' to avoid code duplication and make use of the additional features, in particular the ability to access bibliographies in `org-bibtex' format (see ). (org-cite-csl--itemgetter): Is removed since it is no longer used. --- lisp/oc-csl.el | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/lisp/oc-csl.el b/lisp/oc-csl.el index b5074dcf1..645b1c0f9 100644 --- a/lisp/oc-csl.el +++ b/lisp/oc-csl.el @@ -99,6 +99,7 @@ (declare-function citeproc-append-citations "ext:citeproc") (declare-function citeproc-render-citations "ext:citeproc") (declare-function citeproc-render-bib "ext:citeproc") +(declare-function citeproc-hash-itemgetter-from-any "ext:citeproc") (declare-function org-element-interpret-data "org-element" (data)) (declare-function org-element-map "org-element" (data types fun &optional info first-match no-recursion with-affiliated)) @@ -336,34 +337,6 @@ or raise an error if the variable is unset." (other (user-error "Cannot handle relative style file name" other)))) -(defun org-cite-csl--itemgetter (bibliography) - "Return Citeproc's \"itemgetter\" function for BIBLIOGRAPHY files. -The function handles \".bib\", \".bibtex\" and \".json\" files." - (let ((cache (make-hash-table :test #'equal))) - (dolist (file bibliography) - (pcase (file-name-extension file) - ("json" - (let ((json-array-type 'list) - (json-key-type 'symbol)) - (dolist (item (json-read-file file)) - (puthash (cdr (assq 'id item)) item cache)))) - ((and (or "bib" "bibtex") ext) - (with-temp-buffer - (insert-file-contents file) - (goto-char (point-min)) - (bibtex-set-dialect (if (string= ext "bib") 'biblatex 'BibTeX) t) - (bibtex-map-entries - (lambda (key &rest _) - (puthash key - (citeproc-bt-entry-to-csl (bibtex-parse-entry)) - cache))))) - (ext - (user-error "Unknown bibliography extension: %S" ext)))) - (lambda (itemids) - (mapcar (lambda (id) - (cons id (gethash id cache))) - itemids)))) - (defun org-cite-csl--locale-getter () "Return a locale getter. The getter looks for locales in `org-cite-csl-locales-dir' directory. If it @@ -391,7 +364,7 @@ property in INFO." (processor (citeproc-create (org-cite-csl--style-file info) - (org-cite-csl--itemgetter bibliography) + (citeproc-hash-itemgetter-from-any bibliography) (org-cite-csl--locale-getter) locale))) (plist-put info :cite-citeproc-processor processor) -- 2.25.1