]> code.delx.au - gnu-emacs/blobdiff - lisp/org/ob-table.el
Update copyright year to 2014 by running admin/update-copyright.
[gnu-emacs] / lisp / org / ob-table.el
index f636415d987208e9ed5cda62f2cddeb63958be75..f7c5526d4381a503000768d94fc273b12b039424 100644 (file)
@@ -1,6 +1,6 @@
 ;;; ob-table.el --- support for calling org-babel functions from tables
 
-;; Copyright (C) 2009-201 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
@@ -50,7 +50,7 @@
 ;; #+TBLFM: $2='(sbe 'fibbd (n $1))
 
 ;;; Code:
-(require 'ob)
+(require 'ob-core)
 
 (defun org-babel-table-truncate-at-newline (string)
   "Replace newline character with ellipses.
@@ -60,7 +60,7 @@ character and replace it with ellipses."
       (concat (substring string 0 (match-beginning 0))
              (if (match-string 1 string) "...")) string))
 
-(defmacro sbe (source-block &rest variables)
+(defmacro sbe (source-block &rest variables) ;FIXME: Namespace prefix!
   "Return the results of calling SOURCE-BLOCK with VARIABLES.
 Each element of VARIABLES should be a two
 element list, whose first element is the name of the variable and
@@ -85,6 +85,7 @@ as shown in the example below.
 
 | 1 | 2 | :file nothing.png | nothing.png |
 #+TBLFM: @1$4='(sbe test-sbe $3 (x $1) (y $2))"
+  (declare (debug (form form)))
   (let* ((header-args (if (stringp (car variables)) (car variables) ""))
         (variables (if (stringp (car variables)) (cdr variables) variables)))
     (let* (quote
@@ -97,39 +98,41 @@ as shown in the example below.
                                (lambda (el)
                                  (if (eq '$ el)
                                      (prog1 nil (setq quote t))
-                                   (prog1 (if quote
-                                              (format "\"%s\"" el)
-                                            (org-babel-clean-text-properties el))
+                                   (prog1
+                                       (cond
+                                        (quote (format "\"%s\"" el))
+                                        ((stringp el) (org-no-properties el))
+                                        (t el))
                                      (setq quote nil))))
                                (cdr var)))))
             variables)))
       (unless (stringp source-block)
        (setq source-block (symbol-name source-block)))
-      ((lambda (result)
-        (org-babel-trim (if (stringp result) result (format "%S" result))))
-       (if (and source-block (> (length source-block) 0))
-          (let ((params
-                 (eval `(org-babel-parse-header-arguments
-                         (concat
-                          ":var results="
-                          ,source-block
-                          "[" ,header-args "]"
-                          "("
-                          (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" params)
-             '((:results . "silent"))))
-        "")))))
-(def-edebug-spec sbe (form form))
+      (let ((result
+             (if (and source-block (> (length source-block) 0))
+                 (let ((params
+                        ;; FIXME: Why `eval'?!?!?
+                        (eval `(org-babel-parse-header-arguments
+                                (concat
+                                 ":var results="
+                                 ,source-block
+                                 "[" ,header-args "]"
+                                 "("
+                                 (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" params)
+                    '((:results . "silent"))))
+               "")))
+        (org-babel-trim (if (stringp result) result (format "%S" result)))))))
 
 (provide 'ob-table)