From bc76f526ae8e05951210230944cda03af500e7ee Mon Sep 17 00:00:00 2001 From: Andras Simonyi Date: Sun, 21 Jul 2024 19:27:24 +0200 Subject: [PATCH] Implement locator-date and locator-extra --- citeproc-cite.el | 20 +++++++++++++++++++- citeproc.el | 8 +++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/citeproc-cite.el b/citeproc-cite.el index 731a2be..3338b50 100644 --- a/citeproc-cite.el +++ b/citeproc-cite.el @@ -40,6 +40,9 @@ (require 'citeproc-formatters) (require 'citeproc-sort) (require 'citeproc-subbibs) +(require 'citeproc-date) +(require 'citeproc-biblatex) + (declare-function citeproc-style-category "citeproc-style" (style)) @@ -79,6 +82,20 @@ Each function takes a single argument, a rich-text, and returns a post-processed rich-text value. The functions are applied in the order they appear in the list.") +(defun citeproc-cite--internalize-locator (cite) + "Internalize a CITE locator by parsing it into several fields.' +If the \"|\" separator is present in the locator then parse it +into `locator', `locator-extra' and `locator-date' and update +CITE with these fields accordingly. Returns the possibly modified +CITE." + (when-let ((locator (alist-get 'locator cite)) + (separator-pos (cl-position ?| locator))) + (setf (alist-get 'locator cite) (substring locator 0 separator-pos)) + (push (cons 'locator-date (citeproc-date-parse (citeproc-blt--to-csl-date "1971-01-12"))) + cite) + (push (cons 'locator-extra (substring locator (1+ separator-pos))) cite)) + cite) + (defun citeproc-cite--varlist (cite) "Return the varlist belonging to CITE." (let* ((itd (alist-get 'itd cite)) @@ -89,7 +106,8 @@ order they appear in the list.") '(label locator suppress-author suppress-date stop-rendering-at position near-note first-reference-note-number ignore-et-al - bib-entry locator-only use-short-title)) + bib-entry locator-only use-short-title + locator-extra locator-date)) cite))) (nconc cite-vv item-vv))) diff --git a/citeproc.el b/citeproc.el index 44f26f5..6fa0116 100644 --- a/citeproc.el +++ b/citeproc.el @@ -1,6 +1,6 @@ ;;; citeproc.el --- A CSL 1.0.2 Citation Processor -*- lexical-binding: t; -*- -;; Copyright (C) 2017-2023 András Simonyi +;; Copyright (C) 2017-2024 András Simonyi ;; Author: András Simonyi ;; Maintainer: András Simonyi @@ -87,10 +87,12 @@ CITATIONS is a list of `citeproc-citation' structures." (new-ids (--remove (gethash it itemdata) uniq-ids))) ;; Add all new items in one pass (citeproc-proc-put-items-by-id proc new-ids) - ;; Add itemdata to the cite structs and add them to the cite queue. + ;; Internalize the cites dealing with locator-extra if present, add itemdata to + ;; the cite structs and add them to the cite queue. (dolist (citation citations) (setf (citeproc-citation-cites citation) - (--map (cons (cons 'itd (gethash (alist-get 'id it) itemdata)) it) + (--map (cons (cons 'itd (gethash (alist-get 'id it) itemdata)) + (citeproc-cite--internalize-locator it)) (citeproc-citation-cites citation))) (queue-append (citeproc-proc-citations proc) citation)) (setf (citeproc-proc-finalized proc) nil))))