Browse Source

org-element: Fix parsing recursive babel calls

* lisp/org-element.el (org-element-babel-call-parser): Fix parsing
  recursive babel calls.

* testing/lisp/test-org-element.el (test-org-element/babel-call-parser): Add test.
Nicolas Goaziou 9 years ago
parent
commit
1221715a74
2 changed files with 6 additions and 2 deletions
  1. 1 1
      lisp/org-element.el
  2. 5 1
      testing/lisp/test-org-element.el

+ 1 - 1
lisp/org-element.el

@@ -1633,7 +1633,7 @@ containing `:call', `:inside-header', `:arguments',
 		       (if (eobp) (point) (line-beginning-position))))
 		       (if (eobp) (point) (line-beginning-position))))
 	   (valid-value
 	   (valid-value
 	    (string-match
 	    (string-match
-	     "\\([^()\n]+?\\)\\(?:\\[\\(.*?\\)\\]\\)?(\\(.*?\\))[ \t]*\\(.*\\)"
+	     "\\([^()\n]+?\\)\\(?:\\[\\(.*?\\)\\]\\)?(\\(.*\\))[ \t]*\\(.*\\)"
 	     value)))
 	     value)))
       (list 'babel-call
       (list 'babel-call
 	    (nconc
 	    (nconc

+ 5 - 1
testing/lisp/test-org-element.el

@@ -410,11 +410,15 @@ Some other text
    (equal ":results output"
    (equal ":results output"
 	  (org-test-with-temp-text "#+CALL: test[:results output]()"
 	  (org-test-with-temp-text "#+CALL: test[:results output]()"
 	    (org-element-property :inside-header (org-element-at-point)))))
 	    (org-element-property :inside-header (org-element-at-point)))))
-  ;; Parse arguments.
+  ;; Parse arguments, which can be nested.
   (should
   (should
    (equal "n=4"
    (equal "n=4"
 	  (org-test-with-temp-text "#+CALL: test(n=4)"
 	  (org-test-with-temp-text "#+CALL: test(n=4)"
 	    (org-element-property :arguments (org-element-at-point)))))
 	    (org-element-property :arguments (org-element-at-point)))))
+  (should
+   (equal "test()"
+	  (org-test-with-temp-text "#+CALL: test(test())"
+	    (org-element-property :arguments (org-element-at-point)))))
   ;; Parse end header.
   ;; Parse end header.
   (should
   (should
    (equal ":results html"
    (equal ":results html"