diff --git a/lisp/langs/org-babel-dot.el b/lisp/langs/org-babel-dot.el new file mode 100644 index 000000000..ac6ec6a96 --- /dev/null +++ b/lisp/langs/org-babel-dot.el @@ -0,0 +1,70 @@ +;;; org-babel-dot.el --- org-babel functions for dot evaluation + +;; Copyright (C) 2009 Eric Schulte + +;; Author: Eric Schulte +;; Keywords: literate programming, reproducible research +;; Homepage: http://orgmode.org +;; Version: 0.01 + +;;; License: + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; Org-Babel support for evaluating dot source code. +;; +;; For information on dot see http://www.graphviz.org/ +;; +;; This differs from most standard languages in that +;; +;; 1) there is no such thing as a "session" in dot +;; +;; 2) we are generally only going to return results of type "file" +;; +;; 3) we are adding the "file" and "cmdline" header arguments +;; +;; 4) there are no variables (at least for now) + +;;; Code: +(require 'org-babel) + +(org-babel-add-interpreter "dot") + +(add-to-list 'org-babel-tangle-langs '("dot" "dot")) + +(defvar org-babel-default-header-args:dot '((:results . "file") (:exports . "results")) + "Default arguments to use when evaluating a dot source block.") + +(defun org-babel-execute:dot (body params) + "Execute a block of Dot code with org-babel. This function is +called by `org-babel-execute-src-block'." + (message "executing Dot source code block") + (let ((result-params (split-string (or (cdr (assoc :results params)) ""))) + (out-file (cdr (assoc :file params))) + (cmdline (cdr (assoc :cmdline params))) + (in-file (make-temp-file "org-babel-dot"))) + (with-temp-file in-file (insert body)) + (message (concat "dot " in-file " " cmdline " -o " out-file)) + (shell-command (concat "dot " in-file " " cmdline " -o " out-file)) + out-file)) + +(defun org-babel-prep-session:dot (session params) + (error "Dot does not support sessions")) + +(provide 'org-babel-dot) +;;; org-babel-dot.el ends here diff --git a/org-babel.org b/org-babel.org index 0abdf2b3d..5f6deb831 100644 --- a/org-babel.org +++ b/org-babel.org @@ -2141,7 +2141,7 @@ This is currently working only with emacs lisp as in the following example in the [[* emacs lisp source reference][emacs lisp source reference]]. -** TODO Add languages [2/6] +** TODO Add languages [3/6] I'm sure there are many more that aren't listed here. Please add them, and bubble any that you particularly care about up to the top. @@ -2277,9 +2277,21 @@ plot data using 1:2 with lines #+resname: [[file:session.png][session.png]] -*** TODO dot +*** DONE dot (see [[* file result types][file result types]]) +#+srcname: implementing-dot-support +#+begin_src dot :file test-dot.png :cmdline -Tpng +digraph data_relationships { + "data_requirement" [shape=Mrecord, label="{DataRequirement|description\lformat\l}"] + "data_product" [shape=Mrecord, label="{DataProduct|name\lversion\lpoc\lformat\l}"] + "data_requirement" -> "data_product" +} +#+end_src + +#+resname: +[[file:test-dot.png][test-dot.png]] + *** TODO asymptote (see [[* file result types][file result types]]) @@ -3524,7 +3536,7 @@ of these tests may fail. | R number evaluation | bug-R-number-evaluation | | 2 | 2 | pass | | multi-line ruby blocks | multi-line-ruby-test | | 2 | 2 | pass | | forcing vector results | test-forced-vector-results | | Array | Array | pass | -| deeply nested arguments | deeply-nested-args-bug | | 8 | 8 | pass | +| deeply nested arguments | deeply-nested-args-bug | | 4 | 4 | pass | |-------------------------+----------------------------+-----+-------------+-------------+------| | sessions | | | | | pass | |-------------------------+----------------------------+-----+-------------+-------------+------|