diff --git a/lisp/ox.el b/lisp/ox.el index 07239a0ab..26bcb1944 100644 --- a/lisp/ox.el +++ b/lisp/ox.el @@ -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 diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el index b5a4d3a5e..d532eb540 100644 --- a/testing/lisp/test-ox.el +++ b/testing/lisp/test-ox.el @@ -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."