From c981f6d697c087b87bc90e417ccdb4dea59532a4 Mon Sep 17 00:00:00 2001 From: Eric Schulte Date: Thu, 17 Jun 2010 09:01:24 -0700 Subject: [PATCH] babel: simplifying handling of tangle langs - Removed the org-babel-tangle-langs variable. - Added the org-babel-tangle-lang-exts alist for associating languages with file extensions - Comments now only added when the :comments header argument is set to yes * lisp/babel/ob-tangle.el (org-babel-tangle-w-comments): this is now a defcustom (org-babel-tangle-lang-exts): alist associating languages with file extension, this is also a defcustom (org-babel-spec-to-string): no longer using the complex tangle-lang variables --- lisp/babel/ob-tangle.el | 51 ++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/lisp/babel/ob-tangle.el b/lisp/babel/ob-tangle.el index 40978813b..30a962307 100644 --- a/lisp/babel/ob-tangle.el +++ b/lisp/babel/ob-tangle.el @@ -33,19 +33,25 @@ (eval-when-compile (require 'cl)) -(defvar org-babel-tangle-langs nil - "List of languages supported by `org-babel-tangle'. The first -element of each language's list is a string indicating the name -of the language, the second element should be the file extension -of the language, an optional third element the shebang(#!) line -to use when writing out the language to file, and an optional -fourth element is a flag which when true indicates that the -language does not support comments.") - -(defvar org-babel-tangle-w-comments nil +(defcustom org-babel-tangle-w-comments nil "Control the insertion of comments into tangled code. Non-nil value will result in the insertion of comments for those -languages with comment support.") +languages with comment support." + :group 'org-babel-tangle + :type 'boolean) + +(defcustom org-babel-tangle-lang-exts + '(("emacs-lisp" . "el")) + "Alist mapping languages to their file extensions. +The key is the language name, the value is the string that should +be inserted as the extension commonly used to identify files +written in this language. If no entry is found in this list, +then the name of the language is used." + :group 'org-babel-tangle + :type '(repeat + (cons + (string "Language name") + (string "File Extension")))) (defun org-babel-load-file (file) "Load the contents of the Emacs Lisp source code blocks in the @@ -101,6 +107,7 @@ exported source code blocks by language." (lambda (by-lang) (let* ((lang (car by-lang)) (specs (cdr by-lang)) + (ext (or (cdr (assoc lang org-babel-tangle-lang-exts)) lang)) (lang-f (intern (concat (or (and (cdr (assoc lang org-src-lang-modes)) @@ -108,19 +115,14 @@ exported source code blocks by language." (cdr (assoc lang org-src-lang-modes)))) lang) "-mode"))) - (lang-specs (cdr (assoc lang org-babel-tangle-langs))) - (ext (nth 0 lang-specs)) - (she-bang (nth 1 lang-specs)) - (commentable (and (fboundp lang-f) (not (nth 2 lang-specs)))) she-banged) (mapc (lambda (spec) (flet ((get-spec (name) (cdr (assoc name (nth 2 spec))))) (let* ((tangle (get-spec :tangle)) - (she-bang (if (> (length (get-spec :shebang)) 0) - (get-spec :shebang) - she-bang)) + (she-bang ((lambda (sheb) (when (> (length sheb) 0) sheb)) + (get-spec :shebang))) (base-name (or (cond ((string= "yes" tangle) (file-name-sans-extension @@ -219,18 +221,13 @@ code blocks by language." (cdr (assoc :noweb params)))) (org-babel-expand-noweb-references info) - (nth 1 info))) - (nth 2 - (cdr (assoc src-lang - org-babel-tangle-langs)))) + (nth 1 info)))) by-lang)) blocks)))))) ;; ensure blocks in the correct order (setq blocks (mapcar (lambda (by-lang) (cons (car by-lang) (reverse (cdr by-lang)))) blocks)) - ;; blocks should contain all source-blocks organized by language - ;; (message "blocks=%S" blocks) ;; debugging blocks)) (defun org-babel-spec-to-string (spec) @@ -243,11 +240,7 @@ form (let ((link (nth 0 spec)) (source-name (nth 1 spec)) (body (nth 3 spec)) - (commentable (not (if (> (length (cdr (assoc :comments (nth 2 spec)))) - 0) - (string= (cdr (assoc :comments (nth 2 spec))) - "no") - (nth 4 spec))))) + (commentable (string= (cdr (assoc :comments (nth 2 spec))) "yes"))) (flet ((insert-comment (text) (when (and commentable org-babel-tangle-w-comments)