Browse Source

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.
Eric Schulte 6 years ago
parent
commit
1471af0b44
1 changed files with 13 additions and 13 deletions
  1. 13 13
      lisp/ob.el

+ 13 - 13
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)