| 
					
				 | 
			
			
				@@ -77,46 +77,59 @@ NOTE: by default string variable names are interpreted as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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* (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))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ((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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                "(" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                (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")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       "")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+example above. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+NOTE: it is also possible to pass header arguments to the code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+block.  In this case a table cell should hold the string value of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+the header argument which can then be passed before all variables 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+as shown in the example below. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+| 1 | 2 | :file nothing.png | nothing.png | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#+TBLFM: @1$4='(sbe test-sbe $3 (x $1) (y $2))" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (let* ((header-args (if (stringp (car variables)) (car variables) "")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 (variables (if (stringp (car variables)) (cdr variables) variables))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (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))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ((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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			   ,header-args " " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			   ":var results=" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			   ,source-block 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			   "(" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			   (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)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (provide 'ob-table) 
			 |