emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals-release/org 37c99e0 1/3: oc-basic: Also extract year fr


From: ELPA Syncer
Subject: [elpa] externals-release/org 37c99e0 1/3: oc-basic: Also extract year from "date" field
Date: Wed, 3 Nov 2021 11:57:24 -0400 (EDT)

branch: externals-release/org
commit 37c99e0874703dd94b0940b1028c30342816214b
Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
Commit: Nicolas Goaziou <mail@nicolasgoaziou.fr>

    oc-basic: Also extract year from "date" field
    
    * lisp/oc-basic.el (org-cite-basic--get-year): Try extracting year
    from "date" field when "year" field is empty.  Add optional argument
    to prevent disambiguation mechanism.
    (org-cite-basic--print-entry):
    (org-cite-basic--key-completion-table): Use `org-cite-basic--get-year'
    instead of `org-cite-basic--get-field'.
---
 lisp/oc-basic.el | 48 ++++++++++++++++++++++++++++++++----------------
 1 file changed, 32 insertions(+), 16 deletions(-)

diff --git a/lisp/oc-basic.el b/lisp/oc-basic.el
index c51c7d3..b49f379 100644
--- a/lisp/oc-basic.el
+++ b/lisp/oc-basic.el
@@ -325,15 +325,19 @@ This is used for disambiguation."
                         ((= n 27) (throw :complete (cons 0 (cons 0 result))))
                         (t nil))))))))
 
-(defun org-cite-basic--get-year (entry-or-key info)
+(defun org-cite-basic--get-year (entry-or-key info &optional no-suffix)
   "Return year associated to ENTRY-OR-KEY.
 
 ENTRY-OR-KEY is either an association list, as returned by
-`org-cite-basic--get-entry', or a string representing a citation key.  INFO is
-the export state, as a property list.
+`org-cite-basic--get-entry', or a string representing a citation
+key.  INFO is the export state, as a property list.
 
-Unlike `org-cite-basic--get-field', this function disambiguates author-year
-patterns."
+Year is obtained from the \"year\" field, if available, or from
+the \"date\" field if it starts with a year pattern.
+
+Unlike `org-cite-basic--get-field', this function disambiguates
+author-year patterns by adding a letter suffix to the year when
+necessary, unless optional argument NO-SUFFIX is non-nil."
   ;; The cache is an association list with the following structure:
   ;;
   ;;    (AUTHOR-YEAR . KEY-SUFFIX-ALIST).
@@ -345,7 +349,16 @@ patterns."
   ;; the cite key, as a string, and SUFFIX is the generated suffix
   ;; string, or the empty string.
   (let* ((author (org-cite-basic--get-field 'author entry-or-key info 'raw))
-         (year (org-cite-basic--get-field 'year entry-or-key info 'raw))
+         (year
+          (or (org-cite-basic--get-field 'year entry-or-key info 'raw)
+              (let ((date
+                     (org-cite-basic--get-field 'date entry-or-key info t)))
+                (and (stringp date)
+                     (string-match (rx string-start
+                                       (group (= 4 digit))
+                                       (or string-end (not digit)))
+                                   date)
+                     (match-string 1 date)))))
          (cache-key (cons author year))
          (key
           (pcase entry-or-key
@@ -359,11 +372,13 @@ patterns."
          (plist-put info :cite-basic/author-date-cache (cons value cache))
          year))
       (`(,_ . ,alist)
-       (concat year
-               (or (cdr (assoc key alist))
-                   (let ((new (org-cite-basic--number-to-suffix (1- (length 
alist)))))
-                     (push (cons key new) alist)
-                     new)))))))
+       (let ((suffix
+              (or (cdr (assoc key alist))
+                  (let ((new (org-cite-basic--number-to-suffix
+                              (1- (length alist)))))
+                    (push (cons key new) alist)
+                    new))))
+         (if no-suffix year (concat year suffix)))))))
 
 (defun org-cite-basic--print-entry (entry style &optional info)
   "Format ENTRY according to STYLE string.
@@ -371,7 +386,6 @@ ENTRY is an alist, as returned by 
`org-cite-basic--get-entry'.
 Optional argument INFO is the export state, as a property list."
   (let ((author (org-cite-basic--get-field 'author entry info))
         (title (org-cite-basic--get-field 'title entry info))
-        (year (org-cite-basic--get-field 'year entry info))
         (from
          (or (org-cite-basic--get-field 'publisher entry info)
              (org-cite-basic--get-field 'journal entry info)
@@ -379,10 +393,12 @@ Optional argument INFO is the export state, as a property 
list."
              (org-cite-basic--get-field 'school entry info))))
     (pcase style
       ("plain"
-       (org-cite-concat
-        author ". " title (and from (list ", " from)) ", " year "."))
+       (let ((year (org-cite-basic--get-year entry info 'no-suffix)))
+         (org-cite-concat
+          author ". " title (and from (list ", " from)) ", " year ".")))
       ("numeric"
-       (let ((n (org-cite-basic--key-number (cdr (assq 'id entry)) info)))
+       (let ((n (org-cite-basic--key-number (cdr (assq 'id entry)) info))
+             (year (org-cite-basic--get-year entry info 'no-suffix)))
          (org-cite-concat
           (format "[%d] " n) author ", "
           (org-cite-emphasize 'italic title)
@@ -712,7 +728,7 @@ reference.  Values are the cite key."
                        org-cite-basic-author-column-end nil ?\s)
                     (make-string org-cite-basic-author-column-end ?\s)))
                 org-cite-basic-column-separator
-                (let ((date (org-cite-basic--get-field 'year key nil t)))
+                (let ((date (org-cite-basic--get-year key nil 'no-suffix)))
                   (format "%4s" (or date "")))
                 org-cite-basic-column-separator
                 (org-cite-basic--get-field 'title key nil t))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]