]> code.delx.au - gnu-emacs/blobdiff - lisp/org/ob-tangle.el
merge trunk
[gnu-emacs] / lisp / org / ob-tangle.el
index 7077a1571ebefdd7d7a513e09f8e50038b2e5567..c3b6a483ee6836ef76895a832683a5612176dc8b 100644 (file)
@@ -1,6 +1,6 @@
 ;;; ob-tangle.el --- extract source code from org-mode files
 
-;; Copyright (C) 2009-201 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2013 Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
@@ -38,7 +38,6 @@
 (declare-function org-babel-update-block-body "org" (new-body))
 (declare-function make-directory "files" (dir &optional parents))
 
-;;;###autoload
 (defcustom org-babel-tangle-lang-exts
   '(("emacs-lisp" . "el"))
   "Alist mapping languages to their file extensions.
@@ -372,6 +371,10 @@ code blocks by language."
           (unless (and language (not (string= language src-lang)))
            (let* ((info (org-babel-get-src-block-info))
                   (params (nth 2 info))
+                  (extra (nth 3 info))
+                  (cref-fmt (or (and (string-match "-l \"\\(.+\\)\"" extra)
+                                     (match-string 1 extra))
+                                org-coderef-label-format))
                   (link ((lambda (link)
                            (and (string-match org-bracket-link-regexp link)
                                 (match-string 1 link)))
@@ -389,6 +392,11 @@ code blocks by language."
                    ((lambda (body) ;; run the tangle-body-hook
                       (with-temp-buffer
                         (insert body)
+                        (when (string-match "-r" extra)
+                          (goto-char (point-min))
+                          (while (re-search-forward
+                                  (replace-regexp-in-string "%s" ".+" cref-fmt) nil t)
+                            (replace-match "")))
                         (run-hooks 'org-babel-tangle-body-hook)
                         (buffer-string)))
                     ((lambda (body) ;; expand the body in language specific manner
@@ -514,6 +522,8 @@ which enable the original code blocks to be found."
 
 (provide 'ob-tangle)
 
-
+;; Local variables:
+;; generated-autoload-file: "org-loaddefs.el"
+;; End:
 
 ;;; ob-tangle.el ends here