mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2025-02-02 20:55:13 +00:00
babel: noweb insertions are now placed behind the line prefix of the <<>> reference
So, for example since the following <<example>> noweb reference appears behind the SQL comment syntax the entire inserted body will also be SQL commented -- <<example>> expands to -- this is the -- multi-line body of example Note that noweb replacement text which does *not* contain any newlines will not be affected by this change, so it is still possible to use inline noweb references. Thanks to Sébastien Vauban for this idea.
This commit is contained in:
parent
30d179c85e
commit
904a37a850
@ -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))
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user