org-table: Fix LaTeX snippets in radio tables

* lisp/org-table.el (orgtbl-to-generic): Call back-end specific filters.
* testing/lisp/test-org-table.el (test-org-table/to-latex): Add test.

Reported-by: Uwe Brauer <oub@mat.ucm.es>
<http://permalink.gmane.org/gmane.emacs.orgmode/105876>
This commit is contained in:
Nicolas Goaziou 2016-03-24 13:51:40 +01:00
parent 6f439a29b1
commit a5623bc502
2 changed files with 27 additions and 10 deletions

View File

@ -54,11 +54,13 @@
(declare-function org-export-create-backend "org-export" (&rest rest))
(declare-function org-export-data-with-backend "org-export" (arg1 arg2 arg3))
(declare-function org-export-first-sibling-p "org-export" (arg1 arg2))
(declare-function org-export-get-backend "org-export" (arg1))
(declare-function org-export-filter-apply-functions "org-export" (&optional filters value info))
(declare-function org-export-first-sibling-p "org-export" (blob info))
(declare-function org-export-get-backend "org-export" (name))
(declare-function org-export-get-environment "org-export" (&optional arg1 arg2 arg3))
(declare-function org-export-table-has-special-column-p "org-export" (arg1))
(declare-function org-export-table-row-is-special-p "org-export" (arg1 arg2))
(declare-function org-export-install-filters "org-export" (info))
(declare-function org-export-table-has-special-column-p "org-export" (table))
(declare-function org-export-table-row-is-special-p "org-export" (table-row info))
(declare-function calc-eval "calc" (str &optional separator &rest args))
@ -4849,10 +4851,21 @@ This may be either a string or a function of two arguments:
((consp e)
(princ "| ") (dolist (c e) (princ c) (princ " |"))
(princ "\n")))))
;; Add back-end specific filters, but not user-defined ones. In
;; particular, make sure to call parse-tree filters on the
;; table.
(setq info
(let ((org-export-filters-alist nil))
(org-export-install-filters
(org-combine-plists
(org-export-get-environment backend nil params)
`(:back-end ,(org-export-get-backend backend))))))
(setq data
(org-element-map (org-element-parse-buffer) 'table
#'identity nil t))
(setq info (org-export-get-environment backend nil params)))
(org-export-filter-apply-functions
(plist-get info :filter-parse-tree)
(org-element-map (org-element-parse-buffer) 'table
#'identity nil t)
info)))
(when (and backend (symbolp backend) (not (org-export-get-backend backend)))
(user-error "Unknown :backend value"))
(when (or (not backend) (plist-get info :raw)) (require 'ox-org))
@ -4895,9 +4908,9 @@ This may be either a string or a function of two arguments:
(push datum ignore))))
(setq info (plist-put info :ignore-list ignore)))
;; We use a low-level mechanism to export DATA so as to skip all
;; usual pre-processing and post-processing, i.e., hooks, filters,
;; Babel code evaluation, include keywords and macro expansion,
;; and filters.
;; usual pre-processing and post-processing, i.e., hooks, Babel
;; code evaluation, include keywords and macro expansion. Only
;; back-end specific filters are retained.
(let ((output (org-export-data-with-backend data custom-backend info)))
;; Remove final newline.
(if (org-string-nw-p output) (substring-no-properties output 0 -1) ""))))

View File

@ -1473,6 +1473,10 @@ See also `test-org-table/copy-field'."
(should
(org-string-match-p
"\\toprule" (orgtbl-to-latex (org-table-to-lisp "| a |") '(:booktabs t))))
;; Handle LaTeX snippets.
(should
(equal "\\begin{tabular}{l}\n\\(x\\)\\\\\n\\end{tabular}"
(orgtbl-to-latex (org-table-to-lisp "| $x$ |") nil)))
;; Test pseudo objects and :raw parameter.
(should
(org-string-match-p