Browse Source

suggesting a new function org-export-string

The attached patch adds a new functions org-export-string.

,----
| org-export-string is a Lisp function in `org-exp.el'.
|
| (org-export-string STRING FMT &optional DIR)
|
| Export STRING to FMT using existing export facilities.
| During export STRING is saved to a temporary file whose location
| could vary.  Optional argument DIR can be used to force the
| directory in which the temporary file is created during export
| which can be useful for resolving relative paths.  Dir defaults
| to the value of `temporary-file-directory'.
`----

This function should be useful in user code, and can already reduce the
amount of code in ob-org.el and org-mime.el.

>From e51017e4d7051aad31384a470f0a695dca0d6716 Mon Sep 17 00:00:00 2001
From: Eric Schulte <schulte.eric@gmail.com>
Date: Sun, 17 Oct 2010 15:17:13 -0600
Subject: [PATCH] org-export-string -- exports a string of org-mode markup text

* lisp/org-exp.el (org-export-string): new function org-export-string
  can be used to convert a string of test in org-mode markup to a
  specified format

* contrib/lisp/org-mime.el (org-mime-htmlize): now using new
  org-export-string function for exportation

* lisp/ob-org.el (org-babel-execute:org): now using new
  org-export-string function for exportation
Eric Schulte 14 years ago
parent
commit
e6c9936373
3 changed files with 27 additions and 42 deletions
  1. 1 19
      contrib/lisp/org-mime.el
  2. 4 23
      lisp/ob-org.el
  3. 22 0
      lisp/org-exp.el

+ 1 - 19
contrib/lisp/org-mime.el

@@ -175,7 +175,7 @@ export that region, otherwise export the entire body."
                        (point-max)))
                        (point-max)))
          (raw-body (buffer-substring html-start html-end))
          (raw-body (buffer-substring html-start html-end))
          (tmp-file (make-temp-name (expand-file-name "mail" temporary-file-directory)))
          (tmp-file (make-temp-name (expand-file-name "mail" temporary-file-directory)))
-         (body (org-mime-org-export "org" raw-body tmp-file))
+         (body (org-export-string raw-body "org" (file-name-directory tmp-file)))
          ;; because we probably don't want to skip part of our mail
          ;; because we probably don't want to skip part of our mail
          (org-export-skip-text-before-1st-heading nil)
          (org-export-skip-text-before-1st-heading nil)
          ;; because we probably don't want to export a huge style file
          ;; because we probably don't want to export a huge style file
@@ -198,24 +198,6 @@ export that region, otherwise export the entire body."
       (insert (org-mime-multipart body html)
       (insert (org-mime-multipart body html)
               (mapconcat 'identity html-images "\n")))))
               (mapconcat 'identity html-images "\n")))))
 
 
-(defun org-mime-org-export (fmt body tmp-file)
-  "Org-Export BODY to format FMT with the file name set to
-TMP-FILE during export."
-  (save-excursion
-    (with-temp-buffer
-      (insert org-mime-default-header)
-      (insert body)
-      (write-file tmp-file)
-      (org-load-modules-maybe)
-      (unless org-local-vars
-        (setq org-local-vars (org-get-local-variables)))
-      (substring
-       (eval ;; convert to fmt -- mimicing `org-run-like-in-org-mode'
-        (list 'let org-local-vars 
-              (list (intern (concat "org-export-as-" fmt))
-                    nil nil nil ''string t)))
-       (if (string= fmt "org") (length org-mime-default-header) 0)))))
-
 (defun org-mime-apply-html-hook (html)
 (defun org-mime-apply-html-hook (html)
   (if org-mime-html-hook
   (if org-mime-html-hook
       (with-temp-buffer
       (with-temp-buffer

+ 4 - 23
lisp/ob-org.el

@@ -30,8 +30,7 @@
 ;;; Code:
 ;;; Code:
 (require 'ob)
 (require 'ob)
 
 
-(declare-function org-load-modules-maybe "org" (&optional force))
-(declare-function org-get-local-variables "org" ())
+(declare-function org-export-string "org-exp" (string fmt &optional dir))
 
 
 (defvar org-babel-default-header-args:org
 (defvar org-babel-default-header-args:org
   '((:results . "raw silent") (:exports . "results"))
   '((:results . "raw silent") (:exports . "results"))
@@ -47,29 +46,11 @@ This function is called by `org-babel-execute-src-block'."
   (let ((result-params (split-string (or (cdr (assoc :results params)) "")))
   (let ((result-params (split-string (or (cdr (assoc :results params)) "")))
 	(body (replace-regexp-in-string "^," "" body)))
 	(body (replace-regexp-in-string "^," "" body)))
     (cond
     (cond
-     ((member "latex" result-params) (org-babel-org-export body "latex"))
-     ((member "html" result-params)  (org-babel-org-export body "html"))
-     ((member "ascii" result-params) (org-babel-org-export body "ascii"))
+     ((member "latex" result-params) (org-export-string body "latex"))
+     ((member "html" result-params)  (org-export-string body "html"))
+     ((member "ascii" result-params) (org-export-string body "ascii"))
      (t body))))
      (t body))))
 
 
-(defvar org-local-vars)
-(defun org-babel-org-export (body fmt)
-  "Export BODY to FMT using Org-mode's export facilities. "
-  (when (get-buffer " org-mode-tmp")
-    (error "Nested call to org-export: from org code block exporting results"))
-  (let ((tmp-file (org-babel-temp-file "org-")))
-    (with-temp-buffer
-      (insert org-babel-org-default-header)
-      (insert body)
-      (write-file tmp-file)
-      (org-load-modules-maybe)
-      (unless org-local-vars
-	(setq org-local-vars (org-get-local-variables)))
-      (eval ;; convert to fmt -- mimicking `org-run-like-in-org-mode'
-       (list 'let org-local-vars 
-	     (list (intern (concat "org-export-as-" fmt))
-		   nil nil nil ''string t))))))
-
 (defun org-babel-prep-session:org (session params)
 (defun org-babel-prep-session:org (session params)
   "Return an error because org does not support sessions."
   "Return an error because org does not support sessions."
   (error "Org does not support sessions"))
   (error "Org does not support sessions"))

+ 22 - 0
lisp/org-exp.el

@@ -2613,6 +2613,28 @@ command."
 
 
 (defvar org-export-htmlized-org-css-url) ;; defined in org-html.el
 (defvar org-export-htmlized-org-css-url) ;; defined in org-html.el
 
 
+(defun org-export-string (string fmt &optional dir)
+  "Export STRING to FMT using existing export facilities.
+During export STRING is saved to a temporary file whose location
+could vary.  Optional argument DIR can be used to force the
+directory in which the temporary file is created during export
+which can be useful for resolving relative paths.  Dir defaults
+to the value of `temporary-file-directory'."
+  (let ((temporary-file-directory (or dir temporary-file-directory))
+	(tmp-file (make-temp-file "org-")))
+    (unwind-protect
+	(with-temp-buffer
+	  (insert body)
+	  (write-file tmp-file)
+	  (org-load-modules-maybe)
+	  (unless org-local-vars
+	    (setq org-local-vars (org-get-local-variables)))
+	  (eval ;; convert to fmt -- mimicing `org-run-like-in-org-mode'
+	   (list 'let org-local-vars
+		 (list (intern (concat "org-export-as-" fmt))
+		       nil nil nil ''string t))))
+      (delete-file tmp-file))))
+
 ;;;###autoload
 ;;;###autoload
 (defun org-export-as-org (arg &optional hidden ext-plist
 (defun org-export-as-org (arg &optional hidden ext-plist
 			      to-buffer body-only pub-dir)
 			      to-buffer body-only pub-dir)