ox: Fix `org-export-with-backend'

* lisp/ox.el (org-export-with-backend): Ensure function will use
  provided back-end.
* testing/lisp/test-ox.el: Add test.
This commit is contained in:
Nicolas Goaziou 2013-10-07 16:47:51 +02:00
parent 35e5e5b8b0
commit 58b157956c
2 changed files with 22 additions and 5 deletions

View File

@ -3450,10 +3450,16 @@ the communication channel used for export, as a plist."
(org-export-barf-if-invalid-backend backend)
(let ((type (org-element-type data)))
(if (memq type '(nil org-data)) (error "No foreign transcoder available")
(let ((transcoder
(cdr (assq type (org-export-get-all-transcoders backend)))))
(if (functionp transcoder) (funcall transcoder data contents info)
(error "No foreign transcoder available"))))))
(let* ((all-transcoders (org-export-get-all-transcoders backend))
(transcoder (cdr (assq type all-transcoders))))
(if (not (functionp transcoder))
(error "No foreign transcoder available")
(funcall
transcoder data contents
(org-combine-plists
info (list :back-end backend
:translate-alist all-transcoders
:exported-data (make-hash-table :test 'eq :size 401)))))))))
;;;; For Export Snippets

View File

@ -1082,7 +1082,18 @@ body\n")))
'((plain-text . (lambda (text contents info) "Failure"))))
(org-export-define-backend 'test2
'((plain-text . (lambda (text contents info) "Success"))))
(org-export-with-backend 'test2 "Test")))))
(org-export-with-backend 'test2 "Test"))))
;; Provide correct back-end if transcoder needs to use recursive
;; calls anyway.
(should
(equal "Success"
(let (org-export--registered-backends)
(org-export-define-backend 'test
'((plain-text . (lambda (bold contents info) "Success"))
(headline . (lambda (headline contents info)
(org-export-data
(org-element-property :title headline))))))
(org-export-with-backend 'test "* Test")))))
(ert-deftest test-org-export/data-with-backend ()
"Test `org-export-data-with-backend' specifications."