Function: org-cite-supported-styles
org-cite-supported-styles is a byte-compiled function defined in
oc.el.gz.
Signature
(org-cite-supported-styles &optional PROCESSORS)
Documentation
List of supported citation styles and variants.
Supported styles are those handled by export processors from
org-cite-export-processors, or in PROCESSORS, as a list of symbols,
when non-nil.
Return value is a list with the following items:
((STYLE . SHORTCUTS) . VARIANTS))
where STYLE is a string, SHORTCUTS a list of strings, and VARIANTS is a list of pairs (VARIANT . SHORTCUTS), VARIANT being a string and SHORTCUTS a list of strings.
Source Code
;; Defined in /usr/src/emacs/lisp/org/oc.el.gz
(defun org-cite-supported-styles (&optional processors)
"List of supported citation styles and variants.
Supported styles are those handled by export processors from
`org-cite-export-processors', or in PROCESSORS, as a list of symbols,
when non-nil.
Return value is a list with the following items:
((STYLE . SHORTCUTS) . VARIANTS))
where STYLE is a string, SHORTCUTS a list of strings, and VARIANTS is a list of
pairs (VARIANT . SHORTCUTS), VARIANT being a string and SHORTCUTS a list of
strings."
(let ((collection
(seq-mapcat
(lambda (name)
(org-cite-processor-cite-styles (org-cite--get-processor name)))
(or processors
(mapcar (pcase-lambda (`(,_ . (,name . ,_))) name)
org-cite-export-processors))))
(result nil))
;; Merge duplicate styles. Each style full name is guaranteed to
;; be unique, and associated to all shortcuts and all variants in
;; the initial collection.
(pcase-dolist (`((,style . ,shortcuts) . ,variants) collection)
(let ((entry (assoc style result)))
(if (not entry)
(push (list style shortcuts variants) result)
(setf (nth 1 entry)
(seq-uniq (append shortcuts (nth 1 entry))))
(setf (nth 2 entry)
(append variants (nth 2 entry))))))
;; Return value with the desired format.
(nreverse
(mapcar (pcase-lambda (`(,style ,shortcuts ,variants))
(cons (cons style (nreverse shortcuts))
;; Merge variant shortcuts.
(let ((result nil))
(pcase-dolist (`(,variant . ,shortcuts) variants)
(let ((entry (assoc variant result)))
(if (not entry)
(push (cons variant shortcuts) result)
(setf (cdr entry)
(seq-uniq (append shortcuts (cdr entry)))))))
result)))
result))))