Browse Source

babel: ensure positional invariance of the `info' list

* contrib/babel/lisp/org-babel.el (org-babel-get-src-block-info):
  ensure that info always has the same number of arguments in the same
  order
Eric Schulte 15 years ago
parent
commit
cc1c446791
1 changed files with 24 additions and 20 deletions
  1. 24 20
      contrib/babel/lisp/org-babel.el

+ 24 - 20
contrib/babel/lisp/org-babel.el

@@ -398,7 +398,7 @@ the current subtree."
 (defun org-babel-get-src-block-info (&optional header-vars-only)
   "Get information of the current source block.
 Returns a list
- (language body header-arguments-alist switches name function-args).
+ (language body header-arguments-alist switches name function-args indent).
 Unless HEADER-VARS-ONLY is non-nil, any variable
 references provided in 'function call style' (i.e. in a
 parenthesised argument list following the src block name) are
@@ -411,25 +411,29 @@ added to the header-arguments-alist."
 	  (setq indent (car (last info)))
 	  (setq info (butlast info))
 	  (forward-line -1)
-	  (when (looking-at
-                 (concat org-babel-source-name-regexp
-                         "\\([^ ()\f\t\n\r\v]+\\)\\(\(\\(.*\\)\)\\|\\)"))
-	    (setq info (append info (list (org-babel-clean-text-properties
-					   (match-string 2)))))
-	    ;; Note that e.g. "name()" and "name( )" result in ((:var . "")).
-	    ;; We maintain that behaviour, and the resulting non-nil sixth
-	    ;; element is relied upon in org-babel-exp-code to detect
-	    ;; a functional-style block in those cases. However,
-	    ;; "name" without any parentheses would result in the same
-	    ;; thing, so we explicitly avoid that.
-	    (if (setq args (match-string 4))
-                (setq info
-                      (append info (list
-                                    (mapcar (lambda (ref) (cons :var ref))
-                                            (org-babel-ref-split-args args))))))
-	    (unless header-vars-only
-	      (setf (third info)
-		    (org-babel-merge-params (sixth info) (third info)))))
+	  (if (looking-at
+	       (concat org-babel-source-name-regexp
+		       "\\([^ ()\f\t\n\r\v]+\\)\\(\(\\(.*\\)\)\\|\\)"))
+	      (progn
+		(setq info (append info (list (org-babel-clean-text-properties
+					       (match-string 2)))))
+		;; Note that e.g. "name()" and "name( )" result in
+		;; ((:var . "")).  We maintain that behaviour, and the
+		;; resulting non-nil sixth element is relied upon in
+		;; org-babel-exp-code to detect a functional-style
+		;; block in those cases. However, "name" without any
+		;; parentheses would result in the same thing, so we
+		;; explicitly avoid that.
+		(if (setq args (match-string 4))
+		    (setq info
+			  (append info (list
+					(mapcar
+					 (lambda (ref) (cons :var ref))
+					 (org-babel-ref-split-args args))))))
+		(unless header-vars-only
+		  (setf (third info)
+			(org-babel-merge-params (sixth info) (third info)))))
+	    (setq info (append info (list nil nil))))
 	  (append info (list indent)))
       (if (save-excursion ;; inline source block
             (re-search-backward "[ \f\t\n\r\v]" nil t)