org-export-reference: Document `org-export-with-backend' function
authorNicolas Goaziou <n.goaziou@gmail.com>
Mon, 5 Nov 2012 12:35:21 +0000 (13:35 +0100)
committerNicolas Goaziou <n.goaziou@gmail.com>
Mon, 5 Nov 2012 12:35:21 +0000 (13:35 +0100)
dev/org-export-reference.org

index 5d00b97..3c8e8f7 100644 (file)
@@ -2084,6 +2084,36 @@ by the exporter.
    See also: [[#format-code][~org-export-format-code~]],
    [[#format-code-default][~org-export-format-code-default~]], [[#get-loc][~org-export-get-loc~]].
 
+** ~org-export-with-backend~
+   :PROPERTIES:
+   :CUSTOM_ID: with-backend
+   :END:
+
+   Export an element or object using locally another back-end.
+
+   In a derived back-end, it may be used as a fall-back function once
+   all specific cases have been handled.  Thus, =e-beamer= back-end,
+   derived from =e-latex=, takes care of every internal link type and
+   delagates everything else to its parent back-end:
+
+   #+BEGIN_SRC emacs-lisp
+   (let ((type (org-element-property :type link))
+         (path (org-element-property :path link)))
+     (cond
+      ;; Handle every internal link type, but be careful to ignore "id"
+      ;; type links pointing to external files.
+      ((equal type "radio") ...)
+      ((and (member type '("custom-id" "fuzzy" "id"))
+            (let ((destination (if (string= type "fuzzy")
+                                   (org-export-resolve-fuzzy-link link info)
+                                 (org-export-resolve-id-link link info))))
+              (case (org-element-type destination)
+                (headline ...)
+                (target ...)))))
+      ;; Otherwise, use `e-latex' back-end.
+      (t (org-export-with-backend 'e-latex link contents info))))
+   #+END_SRC
+
 
 # Local Variables:
 # sentence-end-double-space: t