Skip to content

Commit

Permalink
Implement locator-date and locator-extra
Browse files Browse the repository at this point in the history
  • Loading branch information
andras-simonyi committed Jul 21, 2024
1 parent cfa30b6 commit bc76f52
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
20 changes: 19 additions & 1 deletion citeproc-cite.el
Original file line number Diff line number Diff line change
Expand Up @@ -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))

Expand Down Expand Up @@ -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))
Expand All @@ -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)))

Expand Down
8 changes: 5 additions & 3 deletions citeproc.el
Original file line number Diff line number Diff line change
@@ -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 <andras.simonyi@gmail.com>
;; Maintainer: András Simonyi <andras.simonyi@gmail.com>
Expand Down Expand Up @@ -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))))
Expand Down

0 comments on commit bc76f52

Please sign in to comment.