Browse Source

Cleaner implementation of org-babel-execute:babel.

It now searches for a srcname first in the current buffer, and then in
the lob.
Dan Davison 16 years ago
parent
commit
04be81dfe4
1 changed files with 11 additions and 23 deletions
  1. 11 23
      lisp/org-babel-lob.el

+ 11 - 23
lisp/org-babel-lob.el

@@ -33,6 +33,11 @@
 
 (org-babel-add-interpreter "babel")
 
+(setq org-babel-library-of-babel
+      (progn (set-buffer
+	      (find-file-noselect "../library-of-babel.org"))
+	     (org-babel-get-all-src-block-infos)))
+
 (defun org-babel-execute:babel (body params)
   "Execute a library-of-babel block.
 
@@ -49,28 +54,11 @@
   This function is called by `org-babel-execute-src-block'."
   (message "executing babel source code block...")
   (save-window-excursion
-    (save-excursion
-      (org-babel-find-named-block (cdr (assoc :srcname params))))
-    (let ((block (match-string 0)))
-      (search-forward "#+end_src" nil t)
-      (forward-line 1)
-      (insert "\n")
-      (insert block)
-      (beginning-of-line)
-      (org-babel-execute-src-block nil nil params))))
-
-(defun org-babel-lob-parse-buffer ()
-  "Read all source-code blocks in buffer into memory."
-  (save-excursion
-    (goto-char (point-min))
-    (let ((blocks (make-hash-table)))
-      (while (re-search-forward
-	      org-babel-named-src-block-regexp nil t)
-	(puthash (match-string-no-properties 1)        ;; srcname
-		 (list (cons :lang (match-string-no-properties 2))
-		       (cons :body (match-string-no-properties 5))
-		       (cons :params (match-string-no-properties 3)))
-		 blocks))
-      blocks)))
+    (let* ((srcname (cdr (assoc :srcname params)))
+	   (info (or (save-excursion
+		       (goto-char (org-babel-find-named-block srcname))
+		       (org-babel-get-src-block-info))
+		     (gethash srcname org-babel-library-of-babel))))
+      (org-babel-execute-src-block nil info params))))
 
 (provide 'org-babel-lob)