Browse Source

Merge branch 'master' of git+ssh://repo.or.cz/srv/git/org-mode

Carsten Dominik 16 years ago
parent
commit
1886c46d9d
1 changed files with 36 additions and 23 deletions
  1. 36 23
      contrib/babel/lisp/org-babel.el

+ 36 - 23
contrib/babel/lisp/org-babel.el

@@ -888,10 +888,14 @@ parameters when merging lists."
   "This function expands Noweb style references in the body of
 the current source-code block.  For example the following
 reference would be replaced with the body of the source-code
-block named 'example-block' (assuming the '#' character starts a
-comment) .
+block named 'example-block'.
 
-# <<example-block>>
+<<example-block>>
+
+Note that any text preceding the <<foo>> construct on a line will
+be interposed between the lines of the replacement text.  So for
+example if <<foo>> is placed behind a comment, then the entire
+replacement text will also be commented.
 
 This function must be called from inside of the buffer containing
 the source-code block which holds BODY.
@@ -899,21 +903,22 @@ the source-code block which holds BODY.
 In addition the following syntax can be used to insert the
 results of evaluating the source-code block named 'example-block'.
 
-# <<example-block()>>
+<<example-block()>>
 
 Any optional arguments can be passed to example-block by placing
 the arguments inside the parenthesis following the convention
 defined by `org-babel-lob'.  For example
 
-# <<example-block(a=9)>>
+<<example-block(a=9)>>
 
 would set the value of argument \"a\" equal to \"9\".  Note that
-these arguments are not evaluated in the current source-code block but are passed literally to the \"example-block\"."
+these arguments are not evaluated in the current source-code
+block but are passed literally to the \"example-block\"."
   (let* ((parent-buffer (or parent-buffer (current-buffer)))
          (info (or info (org-babel-get-src-block-info)))
          (lang (first info))
          (body (second info))
-         (new-body "") index source-name evaluate)
+         (new-body "") index source-name evaluate prefix)
     (flet ((nb-add (text)
                    (setq new-body (concat new-body text))))
       (with-temp-buffer
@@ -926,6 +931,10 @@ these arguments are not evaluated in the current source-code block but are passe
         (while (and (re-search-forward "<<\\(.+?\\)>>" nil t))
           (save-match-data (setf source-name (match-string 1)))
           (save-match-data (setq evaluate (string-match "\(.*\)" source-name)))
+          (save-match-data
+            (setq prefix (buffer-substring (match-beginning 0)
+                                           (save-excursion
+                                             (move-beginning-of-line 1) (point)))))
           ;; add interval to new-body (removing noweb reference)
           (goto-char (match-beginning 0))
           (nb-add (buffer-substring index (point)))
@@ -933,22 +942,26 @@ these arguments are not evaluated in the current source-code block but are passe
           (setq index (point))
           (nb-add (save-excursion
                     (set-buffer parent-buffer)
-                    (if evaluate
-                        (let ((raw (org-babel-ref-resolve-reference
-                                    source-name nil)))
-                          (if (stringp raw) raw (format "%S" raw)))
-                      (let ((point (org-babel-find-named-block source-name)))
-                        (if point
-                            (save-excursion
-                              (goto-char point)
-                              (org-babel-trim (org-babel-expand-noweb-references
-                                               (org-babel-get-src-block-info))))
-                          ;; optionally raise an error if named source-block doesn't exist
-                          (if (member lang org-babel-noweb-error-langs)
-                              (error
-                               "<<%s>> could not be resolved (see `org-babel-noweb-error-langs')"
-                               source-name)
-                            "")))))))
+                    (mapconcat ;; interpose `prefix' between every line
+                     #'identity
+                     (split-string
+                      (if evaluate
+                          (let ((raw (org-babel-ref-resolve-reference
+                                      source-name nil)))
+                            (if (stringp raw) raw (format "%S" raw)))
+                        (let ((point (org-babel-find-named-block source-name)))
+                          (if point
+                              (save-excursion
+                                (goto-char point)
+                                (org-babel-trim (org-babel-expand-noweb-references
+                                                 (org-babel-get-src-block-info))))
+                            ;; optionally raise an error if named
+                            ;; source-block doesn't exist
+                            (if (member lang org-babel-noweb-error-langs)
+                                (error
+                                 "<<%s>> could not be resolved (see `org-babel-noweb-error-langs')"
+                                 source-name)
+                              "")))) "[\n\r]") (concat "\n" prefix)))))
         (nb-add (buffer-substring index (point-max)))))
     new-body))