summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Schulte <eric.schulte@gmx.com>2011-12-29 12:46:42 -0700
committerEric Schulte <eric.schulte@gmx.com>2011-12-29 12:51:03 -0700
commit18708a2b5aa683b602534e41990877f4facd747d (patch)
tree3994cfccea8b5d194089f2ffb4148cd60dfb5603
parent44bd38556c15c760de90d3504456c757ea4ad41c (diff)
downloadorg-mode-18708a2b5aa683b602534e41990877f4facd747d.tar.gz
Resolve :noweb-ref when set at the property level during noweb expansion
* lisp/ob.el (org-babel-expand-noweb-references): Rather than using a pure regexp solution to resolve noweb references, actually check the information of every code block in the buffer. This will cause a slowdown in noweb reference expansion, but is necessary for correct behavior.
-rw-r--r--lisp/ob.el26
1 files changed, 13 insertions, 13 deletions
diff --git a/lisp/ob.el b/lisp/ob.el
index 9919416..a392c23 100644
--- a/lisp/ob.el
+++ b/lisp/ob.el
@@ -2014,8 +2014,6 @@ 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)))))
- (rx-prefix (concat "\\(" org-babel-src-name-regexp "\\|"
- ":noweb-ref[ \t]+" "\\)"))
(new-body "") index source-name evaluate prefix blocks-in-buffer)
(flet ((nb-add (text) (setq new-body (concat new-body text)))
(c-wrap (text)
@@ -2056,19 +2054,21 @@ block but are passed literally to the \"example-block\"."
(when (org-babel-ref-goto-headline-id source-name)
(org-babel-ref-headline-body)))
;; find the expansion of reference in this buffer
- (let ((rx (concat rx-prefix source-name))
- expansion)
+ (let (expansion)
(save-excursion
(goto-char (point-min))
- (while (re-search-forward rx nil t)
- (let* ((i (org-babel-get-src-block-info 'light))
- (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))
- (setq expansion (concat expansion body))))))
+ (org-babel-map-src-blocks nil
+ (let ((i (org-babel-get-src-block-info 'light)))
+ (when (equal (or (cdr (assoc :noweb-ref (nth 2 i)))
+ (nth 4 i))
+ source-name)
+ (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))
+ (setq expansion (concat expansion body))))))))
expansion)
;; possibly raise an error if named block doesn't exist
(if (member lang org-babel-noweb-error-langs)