ox-latex: Refactor source block transcode fun sigs

* lisp/ox-latex.el (org-latex-src-block--listings,
org-latex-src-block--engraved, org-latex-src-block--minted,
org-latex-src-block--custom): Refactor these --backend functions to use
cl-defun with keys instead of having an 11-argument signature.
(org-latex-src-block): Adjust for the change in signature of the
--backend functions, and refactor the `cond' statement to use `pcase'.
This commit is contained in:
TEC 2022-05-07 14:02:44 +08:00
parent bbba45a07f
commit e07b89c31c
Signed by: tec
GPG Key ID: 779591AFDB81F06C
1 changed files with 38 additions and 42 deletions

View File

@ -3186,37 +3186,37 @@ CONTENTS holds the contents of the item. INFO is a plist holding
contextual information."
(when (org-string-nw-p (org-element-property :value src-block))
(let* ((lang (org-element-property :language src-block))
(caption (org-element-property :caption src-block))
(caption-above-p (org-latex--caption-above-p src-block info))
(label (org-element-property :name src-block))
(custom-env (and lang
(cadr (assq (intern lang)
org-latex-custom-lang-environments))))
(num-start (org-export-get-loc src-block info))
(retain-labels (org-element-property :retain-labels src-block))
(attributes (org-export-read-attribute :attr_latex src-block))
(float (plist-get attributes :float))
(listings (plist-get info :latex-listings)))
(cond
((or (not lang) (not listings))
(org-latex-src-block--verbatim src-block info lang caption caption-above-p label
num-start retain-labels attributes float))
(custom-env
(org-latex-src-block--custom src-block info lang caption caption-above-p label
num-start retain-labels attributes float custom-env))
((eq listings 'minted)
(org-latex-src-block--minted src-block info lang caption caption-above-p label
num-start retain-labels attributes float))
((eq listings 'engraved)
(org-latex-src-block--engraved src-block info lang caption caption-above-p label
num-start retain-labels attributes float))
(t
(org-latex-src-block--listings src-block info lang caption caption-above-p label
num-start retain-labels attributes float))))))
(caption (org-element-property :caption src-block))
(caption-above-p (org-latex--caption-above-p src-block info))
(label (org-element-property :name src-block))
(custom-env (and lang
(cadr (assq (intern lang)
org-latex-custom-lang-environments))))
(num-start (org-export-get-loc src-block info))
(retain-labels (org-element-property :retain-labels src-block))
(attributes (org-export-read-attribute :attr_latex src-block))
(float (plist-get attributes :float))
(listings (plist-get info :latex-listings)))
(funcall
(pcase listings
((or (pred not) (guard (not lang))) #'org-latex-src-block--verbatim)
((guard custom-env) #'org-latex-src-block--custom)
('minted #'org-latex-src-block--minted)
('engraved #'org-latex-src-block--engraved)
(_ #'org-latex-src-block--listings))
:src-block src-block
:info info
:lang lang
:caption caption
:caption-above-p caption-above-p
:label label
:num-start num-start
:retain-labels retain-labels
:attributes attributes
:float float))))
(defun org-latex-src-block--verbatim
(src-block info _lang caption caption-above-p _label
_num-start _retain-labels _attributes float)
(cl-defun org-latex-src-block--verbatim
(&key src-block info caption caption-above-p float &allow-other-keys)
"Transcode a SRC-BLOCK element from Org to LaTeX, using verbatim.
LANG, CAPTION, CAPTION-ABOVE-P, LABEL, NUM-START, RETAIN-LABELS, ATTRIBUTES
and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
@ -3235,9 +3235,8 @@ and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
(if caption-above-p "" (concat "\n" caption-str))))
(t verbatim))))
(defun org-latex-src-block--custom
(src-block info _lang caption caption-above-p _label
_num-start _retain-labels attributes float custom-env)
(cl-defun org-latex-src-block--custom
(&key src-block info caption caption-above-p attributes float custom-env &allow-other-keys)
"Transcode a SRC-BLOCK element from Org to LaTeX, using a custom environment.
LANG, CAPTION, CAPTION-ABOVE-P, LABEL, NUM-START, RETAIN-LABELS, ATTRIBUTES
and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
@ -3257,9 +3256,8 @@ and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
(?l . ,(org-latex--label src-block info))
(?o . ,(or (plist-get attributes :options) "")))))))
(defun org-latex-src-block--minted
(src-block info lang caption caption-above-p _label
num-start retain-labels attributes float)
(cl-defun org-latex-src-block--minted
(&key src-block info lang caption caption-above-p num-start retain-labels attributes float &allow-other-keys)
"Transcode a SRC-BLOCK element from Org to LaTeX, using minted.
LANG, CAPTION, CAPTION-ABOVE-P, LABEL, NUM-START, RETAIN-LABELS, ATTRIBUTES
and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
@ -3345,9 +3343,8 @@ and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
engraved-code)
(user-error "Cannot engrave code as `engrave-faces-latex' is unavailible.")))
(defun org-latex-src-block--engraved
(src-block info lang caption caption-above-p _label
num-start retain-labels attributes float)
(cl-defun org-latex-src-block--engraved
(&key src-block info lang caption caption-above-p num-start retain-labels attributes float &allow-other-keys)
"Transcode a SRC-BLOCK element from Org to LaTeX, using engrave-faces-latex.
LANG, CAPTION, CAPTION-ABOVE-P, LABEL, NUM-START, RETAIN-LABELS, ATTRIBUTES
and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
@ -3407,9 +3404,8 @@ and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."
(org-latex-src--engrave-code content lang))))
(format float-env body)))
(defun org-latex-src-block--listings
(src-block info lang caption caption-above-p label
num-start retain-labels attributes float)
(cl-defun org-latex-src-block--listings
(&key src-block info lang caption caption-above-p label num-start retain-labels attributes float &allow-other-keys)
"Transcode a SRC-BLOCK element from Org to LaTeX, using listings.
LANG, CAPTION, CAPTION-ABOVE-P, LABEL, NUM-START, RETAIN-LABELS, ATTRIBUTES
and FLOAT are extracted from SRC-BLOCK and INFO in `org-latex-src-block'."