summaryrefslogtreecommitdiff
path: root/lisp/org
diff options
context:
space:
mode:
authorKyle Meyer <kyle@kyleam.com>2021-11-06 14:10:47 -0400
committerKyle Meyer <kyle@kyleam.com>2021-11-06 14:10:47 -0400
commitf05b8a939b7ad57e9526510d510ff24484dcb520 (patch)
tree1b4498a64600e22ef1e265038d00deb50ce795f4 /lisp/org
parent5e9b4e70ab433fe2eb33c20a02b045c83e70d074 (diff)
downloademacs-f05b8a939b7ad57e9526510d510ff24484dcb520.tar.gz
emacs-f05b8a939b7ad57e9526510d510ff24484dcb520.tar.bz2
emacs-f05b8a939b7ad57e9526510d510ff24484dcb520.zip
Update to Org 9.5-68-g77e2ec
Diffstat (limited to 'lisp/org')
-rw-r--r--lisp/org/oc-basic.el58
-rw-r--r--lisp/org/oc-csl.el18
-rw-r--r--lisp/org/oc-natbib.el6
-rw-r--r--lisp/org/oc.el22
-rw-r--r--lisp/org/org-macro.el2
-rw-r--r--lisp/org/org-version.el2
6 files changed, 68 insertions, 40 deletions
diff --git a/lisp/org/oc-basic.el b/lisp/org/oc-basic.el
index c51c7d301e4..7b09db5f8b4 100644
--- a/lisp/org/oc-basic.el
+++ b/lisp/org/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)
@@ -603,15 +619,7 @@ export communication channel, as a property list."
;; When using this style on citations with multiple references,
;; use global affixes and ignore local ones.
(`(,(or "numeric" "nb") . ,_)
- (let* ((references (org-cite-get-references citation))
- (prefix
- (or (org-element-property :prefix citation)
- (and (= 1 (length references))
- (org-element-property :prefix (car references)))))
- (suffix
- (or (org-element-property :suffix citation)
- (and (= 1 (length references))
- (org-element-property :suffix (car references))))))
+ (pcase-let ((`(,prefix . ,suffix) (org-cite-main-affixes citation)))
(org-export-data
(org-cite-concat
"(" prefix (org-cite-basic--citation-numbers citation info) suffix ")")
@@ -712,7 +720,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))))
diff --git a/lisp/org/oc-csl.el b/lisp/org/oc-csl.el
index 94de97e33a1..7cd63c3ff3a 100644
--- a/lisp/org/oc-csl.el
+++ b/lisp/org/oc-csl.el
@@ -487,21 +487,25 @@ INFO is the export state, as a property list."
(let ((global-prefix (org-element-property :prefix citation)))
(when global-prefix
(let* ((first (car cites))
- (prefix (org-element-property :prefix first)))
- (org-element-put-property
- first :prefix (org-cite-concat global-prefix prefix)))))
+ (prefix-item (assq 'prefix first)))
+ (setcdr prefix-item
+ (concat (org-element-interpret-data global-prefix)
+ " "
+ (cdr prefix-item))))))
;; Global suffix is appended to the suffix of the last reference.
(let ((global-suffix (org-element-property :suffix citation)))
(when global-suffix
(let* ((last (org-last cites))
- (suffix (org-element-property :suffix last)))
- (org-element-put-property
- last :suffix (org-cite-concat suffix global-suffix)))))
+ (suffix-item (assq 'suffix last)))
+ (setcdr suffix-item
+ (concat (cdr suffix-item)
+ " "
+ (org-element-interpret-data global-suffix))))))
;; Check if CITATION needs wrapping, i.e., it should be wrapped in
;; a footnote, but isn't yet.
(when (and (not footnote) (org-cite-csl--note-style-p info))
(org-cite-adjust-note citation info)
- (org-cite-wrap-citation citation info))
+ (setq footnote (org-cite-wrap-citation citation info)))
;; Return structure.
(apply #'citeproc-citation-create
`(:note-index
diff --git a/lisp/org/oc-natbib.el b/lisp/org/oc-natbib.el
index 13cac9ed0b9..bf086f36dff 100644
--- a/lisp/org/oc-natbib.el
+++ b/lisp/org/oc-natbib.el
@@ -119,11 +119,7 @@ If \"natbib\" package is already required in the document, e.g., through
(defun org-cite-natbib--build-optional-arguments (citation info)
"Build optional arguments for citation command.
CITATION is the citation object. INFO is the export state, as a property list."
- (let* ((origin (pcase (org-cite-get-references citation)
- (`(,reference) reference)
- (_ citation)))
- (suffix (org-element-property :suffix origin))
- (prefix (org-element-property :prefix origin)))
+ (pcase-let ((`(,prefix . ,suffix) (org-cite-main-affixes citation)))
(concat (and prefix (format "[%s]" (org-trim (org-export-data prefix info))))
(cond
(suffix (format "[%s]" (org-trim (org-export-data suffix info))))
diff --git a/lisp/org/oc.el b/lisp/org/oc.el
index dcda8d7d084..41fd688c060 100644
--- a/lisp/org/oc.el
+++ b/lisp/org/oc.el
@@ -638,6 +638,24 @@ in the current buffer. Positions include leading \"@\" character."
(re-search-forward org-element-citation-key-re end t)
(cons (match-beginning 0) (match-end 0)))))
+(defun org-cite-main-affixes (citation)
+ "Return main affixes for CITATION object.
+
+Some export back-ends only support a single pair of affixes per
+citation, even if it contains multiple keys. This function
+decides what affixes are the most appropriate.
+
+Return a pair (PREFIX . SUFFIX) where PREFIX and SUFFIX are
+parsed data."
+ (let ((source
+ ;; When there are multiple references, use global affixes.
+ ;; Otherwise, local affixes have priority.
+ (pcase (org-cite-get-references citation)
+ (`(,reference) reference)
+ (_ citation))))
+ (cons (org-element-property :prefix source)
+ (org-element-property :suffix source))))
+
(defun org-cite-supported-styles (&optional processors)
"List of supported citation styles and variants.
@@ -872,7 +890,9 @@ When non-nil, the return value if the footnote container."
INFO is the export state, as a property list.
White space before the citation, if any, are removed. The parse tree is
-modified by side-effect."
+modified by side-effect.
+
+Return newly created footnote object."
(let ((footnote
(list 'footnote-reference
(list :label nil
diff --git a/lisp/org/org-macro.el b/lisp/org/org-macro.el
index 1259430ae44..c38a07b69af 100644
--- a/lisp/org/org-macro.el
+++ b/lisp/org/org-macro.el
@@ -173,7 +173,7 @@ a file, \"input-file\" and \"modification-time\"."
modtime))))))))
;; Install generic macros.
'(("keyword" . (lambda (arg1 &rest _)
- (org-macro--find-keyword-value arg1)))
+ (org-macro--find-keyword-value arg1 t)))
("n" . (lambda (&optional arg1 arg2 &rest _)
(org-macro--counter-increment arg1 arg2)))
("property" . (lambda (arg1 &optional arg2 &rest _)
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index 55f186b4712..6427f30072e 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
(defun org-git-version ()
"The Git version of Org mode.
Inserted by installing Org or when a release is made."
- (let ((org-git-version "release_9.5-59-g52e6f1"))
+ (let ((org-git-version "release_9.5-68-g77e2ec"))
org-git-version))
(provide 'org-version)