|
@@ -1842,13 +1842,21 @@ block but are passed literally to the \"example-block\"."
|
|
|
(lang (nth 0 info))
|
|
|
(body (nth 1 info))
|
|
|
(comment (string= "noweb" (cdr (assoc :comments (nth 2 info)))))
|
|
|
- (new-body "") index source-name evaluate prefix)
|
|
|
+ (new-body "") index source-name evaluate prefix blocks-in-buffer)
|
|
|
(flet ((nb-add (text) (setq new-body (concat new-body text)))
|
|
|
(c-wrap (text)
|
|
|
(with-temp-buffer
|
|
|
(funcall (intern (concat lang "-mode")))
|
|
|
(comment-region (point) (progn (insert text) (point)))
|
|
|
- (org-babel-trim (buffer-string)))))
|
|
|
+ (org-babel-trim (buffer-string))))
|
|
|
+ (blocks () ;; return the info lists of all blocks in this buffer
|
|
|
+ (let (infos)
|
|
|
+ (save-restriction
|
|
|
+ (widen)
|
|
|
+ (org-babel-map-src-blocks nil
|
|
|
+ (setq infos (cons (org-babel-get-src-block-info 'light)
|
|
|
+ infos))))
|
|
|
+ (reverse infos))))
|
|
|
(with-temp-buffer
|
|
|
(insert body) (goto-char (point-min))
|
|
|
(setq index (point))
|
|
@@ -1873,35 +1881,32 @@ block but are passed literally to the \"example-block\"."
|
|
|
(if evaluate
|
|
|
(let ((raw (org-babel-ref-resolve source-name)))
|
|
|
(if (stringp raw) raw (format "%S" raw)))
|
|
|
- (or (nth 2 (assoc (intern source-name)
|
|
|
- org-babel-library-of-babel))
|
|
|
- (save-restriction
|
|
|
- (widen)
|
|
|
- (let ((point (org-babel-find-named-block
|
|
|
- source-name)))
|
|
|
- (if point
|
|
|
- (save-excursion
|
|
|
- (goto-char point)
|
|
|
- ;; possibly wrap body in comments
|
|
|
- (let* ((i (org-babel-get-src-block-info 'light))
|
|
|
- (body (org-babel-trim
|
|
|
- (org-babel-expand-noweb-references
|
|
|
- i))))
|
|
|
- (if comment
|
|
|
- ((lambda (cs) (concat (c-wrap (car cs)) "\n"
|
|
|
- body
|
|
|
- "\n" (c-wrap (cadr cs))))
|
|
|
- (org-babel-tangle-comment-links i))
|
|
|
- body)))
|
|
|
- ;; optionally raise an error if named
|
|
|
- ;; source-block doesn't exist
|
|
|
- (if (member lang org-babel-noweb-error-langs)
|
|
|
- (error "%s"
|
|
|
- (concat
|
|
|
+ (or
|
|
|
+ ;; retrieve from the library of babel
|
|
|
+ (nth 2 (assoc (intern source-name)
|
|
|
+ org-babel-library-of-babel))
|
|
|
+ ;; find the expansion of reference in this buffer
|
|
|
+ (or (mapconcat
|
|
|
+ (lambda (i)
|
|
|
+ (when (string= source-name
|
|
|
+ (or (cdr (assoc :noweb-ref (nth 2 i)))
|
|
|
+ (nth 4 i)))
|
|
|
+ (let ((body (org-babel-expand-noweb-references i)))
|
|
|
+ (if comment
|
|
|
+ ((lambda (cs) (concat (c-wrap (car cs)) "\n"
|
|
|
+ body "\n" (c-wrap (cadr cs))))
|
|
|
+ (org-babel-tangle-comment-links i))
|
|
|
+ body))))
|
|
|
+ (or blocks-in-buffer
|
|
|
+ (setq blocks-in-buffer (blocks)))
|
|
|
+ "")
|
|
|
+ ;; possibly raise an error if named block doesn't exist
|
|
|
+ (if (member lang org-babel-noweb-error-langs)
|
|
|
+ (error "%s" (concat
|
|
|
"<<" source-name ">> "
|
|
|
"could not be resolved (see "
|
|
|
"`org-babel-noweb-error-langs')"))
|
|
|
- ""))))))
|
|
|
+ ""))))
|
|
|
"[\n\r]") (concat "\n" prefix)))))
|
|
|
(nb-add (buffer-substring index (point-max)))))
|
|
|
new-body))
|