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

This commit is contained in:
Carsten Dominik 2009-12-18 09:39:26 +01:00
commit 1886c46d9d
1 changed files with 36 additions and 23 deletions

View File

@ -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))