From: "András Simonyi" <andras.simonyi@gmail.com>
To: emacs-orgmode list <emacs-orgmode@gnu.org>
Subject: [PATCH] org-cite: Use citeproc-el to create CSL processor itemgetters
Date: Mon, 20 Sep 2021 13:56:31 +0200 [thread overview]
Message-ID: <CAOWRwxAAp=G80fqrbZsU=33Q6T511jmAFyKj_tYcTCgZhrzUSg@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 543 bytes --]
Dear All,
this is the first item in a series of oc-csl patches which I've
accumulated and am planning to send this week. (My first attempt to
send a patch, so please be patient and forgiving :-) )
This particular change removes the itemgetter constructor function
defined in oc-csl.el and uses the one now provided by citeproc-el
which has the same functionality but also supports org-bibtex
bibliographies. In addition to being a bit more featureful this change
also avoids unnecessary code duplication.
best wishes,
András
[-- Attachment #2: 0035-oc-csl-Use-citeproc-el-to-create-CSL-processor-itemg.patch --]
[-- Type: text/x-patch, Size: 3233 bytes --]
From 7cc7047516970d9e7da32e23bb11b35c8dbfae6e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A1s=20Simonyi?= <andras.simonyi@gmail.com>
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 <https://gewhere.github.io/org-bibtex>).
(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
next reply other threads:[~2021-09-20 12:05 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-20 11:56 András Simonyi [this message]
2021-09-20 12:29 ` [PATCH] org-cite: Use citeproc-el to create CSL processor itemgetters Timothy
2021-09-20 14:22 ` András Simonyi
2021-09-26 10:37 ` Bastien
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAOWRwxAAp=G80fqrbZsU=33Q6T511jmAFyKj_tYcTCgZhrzUSg@mail.gmail.com' \
--to=andras.simonyi@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).