ox-texinfo.el: Refactor caption code

* lisp/ox-texinfo.el (org-texinfo--wrap-float): New function.
(org-texinfo--inline-image): Use new function.
This commit is contained in:
Nicolas Goaziou 2015-05-26 09:37:43 +02:00
parent 20a3b61865
commit deb4fe7838

View file

@ -492,6 +492,44 @@ are not significant. Also remove the following characters: @
Special characters are: @ { }"
(replace-regexp-in-string "[@{}]" "@\\&" text))
(defun org-texinfo--wrap-float (value info &optional type label caption short)
"Wrap string VALUE within a @float command.
INFO is the current export state, as a plist. TYPE is float
type, as a string. LABEL is the cross reference label for the
float, as a string. CAPTION and SHORT are, respectively, the
caption and shortcaption used for the float, as secondary
strings (e.g., returned by `org-export-get-caption')."
(let* ((backend
(org-export-create-backend
:parent 'texinfo
:transcoders '((link . (lambda (object c i) c))
(radio-target . (lambda (object c i) c))
(target . ignore))))
(short-backend
(org-export-create-backend
:parent 'texinfo
:transcoders '((footnote-reference . ignore)
(inline-src-block . ignore)
(link . (lambda (object c i) c))
(radio-target . (lambda (object c i) c))
(target . ignore)
(verbatim . ignore))))
(short-str
(if (and short caption)
(format "@shortcaption{%s}\n"
(org-export-data-with-backend short short-backend info))
""))
(caption-str
(if (or short caption)
(format "@caption{%s}\n"
(org-export-data-with-backend
(or caption short)
(if (equal short-str "") short-backend backend)
info))
"")))
(format "@float %s%s\n%s\n%s%s@end float"
type (if label (concat "," label) "") value caption-str short-str)))
;;; Template
(defun org-texinfo-template (contents info)
@ -1005,38 +1043,12 @@ current state of the export, as a plist."
(image (format "@image{%s,%s,%s,%s,%s}"
filename width height alt extension)))
(if (not (or caption shortcaption)) image
(let* ((label (org-element-property :name parent))
(backend
(org-export-create-backend
:parent 'texinfo
:transcoders '((link . (lambda (object c i) c))
(radio-target . (lambda (object c i) c))
(target . ignore))))
(short-backend
(org-export-create-backend
:parent 'texinfo
:transcoders '((footnote-reference . ignore)
(inline-src-block . ignore)
(link . (lambda (object c i) c))
(radio-target . (lambda (object c i) c))
(target . ignore)
(verbatim . ignore))))
(shortcaption-str
(if (and shortcaption caption)
(format "@shortcaption{%s}\n"
(org-export-data-with-backend
shortcaption short-backend info))
""))
(caption (org-export-data-with-backend
(or caption shortcaption)
(if (equal shortcaption-str "") short-backend backend)
info)))
(format "@float %s%s\n%s\n@caption{%s}\n%s@end float"
(org-export-translate "Figure" :utf-8 info)
(if label (concat "," label) "")
image
caption
shortcaption-str)))))
(org-texinfo--wrap-float image
info
(org-export-translate "Figure" :utf-8 info)
(org-element-property :name parent)
caption
shortcaption))))
;;;; Menu