]> code.delx.au - gnu-emacs/blobdiff - lisp/org/ob-table.el
Install org-mode version 7.3
[gnu-emacs] / lisp / org / ob-table.el
index f15065508293c96f824314a6141ac6f73fca4c48..cdc7a6250fe64b2f81a2b2634521455736c030af 100644 (file)
@@ -5,7 +5,7 @@
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
 ;; Homepage: http://orgmode.org
-;; Version: 7.01
+;; Version: 7.3
 
 ;; This file is part of GNU Emacs.
 
@@ -79,13 +79,24 @@ references to source-code blocks, to force interpretation of a
 cell's value as a string, prefix the identifier with two \"$\"s
 rather than a single \"$\" (i.e. \"$$2\" instead of \"$2\" in the
 example above."
-  (let ((variables (mapcar
-                    (lambda (var)
-                      (if (and (= 3 (length var)) (eq (nth 1 var) '$))
-                          (list (car var) (format "\"%s\"" (last var)))
-                        var))
-                    variables)))
-    (unless (stringp source-block) (setq source-block (symbol-name source-block)))
+  (let* (quote
+        (variables
+         (mapcar
+          (lambda (var)
+            ;; ensure that all cells prefixed with $'s are strings
+            (cons (car var)
+                  (delq nil (mapcar
+                             (lambda (el)
+                               (if (eq '$ el)
+                                   (setq quote t)
+                                 (prog1 (if quote
+                                            (format "\"%s\"" el)
+                                          (org-babel-clean-text-properties el))
+                                   (setq quote nil))))
+                             (cdr var)))))
+          variables)))
+    (unless (stringp source-block)
+      (setq source-block (symbol-name source-block)))
     (org-babel-table-truncate-at-newline ;; org-table cells can't be multi-line
      (if (and source-block (> (length source-block) 0))
          (let ((params
@@ -93,13 +104,18 @@ example above."
                         (concat ":var results="
                                 ,source-block
                                 "("
-                                (mapconcat (lambda (var-spec)
-                                             (format "%S=%s" (nth 0 var-spec) (nth 1 var-spec)))
-                                           ',variables ", ")
+                                (mapconcat
+                                (lambda (var-spec)
+                                  (if (> (length (cdr var-spec)) 1)
+                                      (format "%S='%S"
+                                              (car var-spec)
+                                              (mapcar #'read (cdr var-spec)))
+                                    (format "%S=%s"
+                                            (car var-spec) (cadr var-spec))))
+                                ',variables ", ")
                                 ")")))))
            (org-babel-execute-src-block
-            nil (list "emacs-lisp" "results"
-                      (org-babel-merge-params '((:results . "silent")) params))))
+            nil (list "emacs-lisp" "results" params) '((:results . "silent"))))
        ""))))
 
 (provide 'ob-table)