Merging master into results: required manual conflict resolution.

results had upgraded to using org-babel-merge-params (although
apparently not yet in org-babel-parse-inline-src-block-match).
This commit is contained in:
Dan Davison 2009-07-16 23:22:25 -04:00
commit 64a5c0e379
6 changed files with 199 additions and 42 deletions

View File

@ -0,0 +1,70 @@
;;; org-babel-ditaa.el --- org-babel functions for ditaa 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 ditaa source code.
;;
;; This differs from most standard languages in that
;;
;; 1) there is no such thing as a "session" in ditaa
;;
;; 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 "ditaa")
(add-to-list 'org-babel-tangle-langs '("ditaa" "ditaa"))
(defvar org-babel-default-header-args:ditaa '((:results . "file"))
"Default arguments to use when evaluating a ditaa source block.")
(defun org-babel-execute:ditaa (body params)
"Execute a block of Ditaa code with org-babel. This function is
called by `org-babel-execute-src-block'."
(message "executing Ditaa 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-ditaa")))
(unless (file-exists-p org-ditaa-jar-path)
(error (format "Could not find ditaa.jar at %s" org-ditaa-jar-path)))
(with-temp-file in-file (insert body))
(message (concat "java -jar " org-ditaa-jar-path " " cmdline " " in-file " " out-file))
(shell-command (concat "java -jar " org-ditaa-jar-path " " cmdline " " in-file " " out-file))
out-file))
(defun org-babel-prep-session:ditaa (session params)
(error "Ditaa does not support sessions"))
(provide 'org-babel-ditaa)
;;; org-babel-ditaa.el ends here

View File

@ -0,0 +1,52 @@
;;; org-babel-gnuplot.el --- org-babel functions for gnuplot 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 gnuplot source code.
;;
;; This differs from most standard languages in that
;;
;; 1) we are generally only going to return results of type "file"
;;
;; 2) we are adding the "file" and "cmdline" header arguments
;;; Code:
(require 'org-babel)
(org-babel-add-interpreter "gnuplot")
(add-to-list 'org-babel-tangle-langs '("gnuplot" "gnuplot"))
(defun org-babel-execute:gnuplot (body params)
"Execute a block of Gnuplot code with org-babel. This function is
called by `org-babel-execute-src-block'."
(message "executing Gnuplot source code block"))
(defun org-babel-prep-session:gnuplot (session params))
(provide 'org-babel-gnuplot)
;;; org-babel-gnuplot.el ends here

View File

@ -58,6 +58,7 @@
(require 'org-babel-sh)
(require 'org-babel-lisp)
(require 'org-babel-R)
(require 'org-babel-ditaa)
(provide 'org-babel-init)
;;; org-babel-init.el ends here

View File

@ -44,7 +44,6 @@ org-mode formatted FILE. This function will first export the
source code using `org-babel-tangle' and then load the resulting
file using `load-file'."
(let ((loadable-file (first (org-babel-tangle-file file "emacs-lisp"))))
(message "loading %s" loadable-file)
(unless (file-exists-p loadable-file)
(error "can't load file that doesn't exist"))
(load-file loadable-file)

View File

@ -307,18 +307,25 @@ of the following form. (language body header-arguments-alist)"
(goto-char (match-end 0)))))
(defun org-babel-parse-src-block-match ()
(list (org-babel-clean-text-properties (match-string 1))
(org-babel-strip-protective-commas (org-babel-clean-text-properties (match-string 4)))
(org-babel-merge-params org-babel-default-header-args
(org-babel-parse-header-arguments
(org-babel-clean-text-properties (or (match-string 3) ""))))))
(defun org-babel-parse-inline-src-block-match ()
(let* ((lang (org-babel-clean-text-properties (match-string 1)))
(lang-headers (intern (concat "org-babel-default-header-args:" lang))))
(list (org-babel-clean-text-properties (match-string 1))
(org-babel-strip-protective-comas (org-babel-clean-text-properties (match-string 4)))
(org-babel-merge-params
org-babel-default-header-args
(if (boundp lang-headers) (eval lang-headers) nil)
(org-babel-parse-header-arguments (org-babel-clean-text-properties (or (match-string 3) "")))))))
(defun org-babel-parse-inline-src-block-match ()
(list (org-babel-clean-text-properties (match-string 1))
(org-babel-strip-protective-commas (org-babel-clean-text-properties (match-string 4)))
(org-combine-plists org-babel-default-inline-header-args
(org-babel-parse-header-arguments
(org-babel-clean-text-properties (or (match-string 3) ""))))))
(let* ((lang (org-babel-clean-text-properties (match-string 1)))
(lang-headers (intern (concat "org-babel-default-header-args:" lang))))
(list lang
(org-babel-strip-protective-comas (org-babel-clean-text-properties (match-string 4)))
(org-combine-plists
org-babel-default-inline-header-args
(if (boundp lang-headers) (eval lang-headers) nil)
(org-babel-parse-header-arguments (org-babel-clean-text-properties (or (match-string 3) "")))))))
(defun org-babel-parse-header-arguments (arg-string)
"Parse a string of header arguments returning an alist."
@ -497,7 +504,7 @@ relies on `org-babel-insert-result'."
RESULT, and the display being the `file-name-nondirectory' if
non-nil."
(let ((name (file-name-nondirectory result)))
(concat "[[" result (if name (concat "][" name "]]") "]]"))))
(concat "[[file:" result (if name (concat "][" name "]]") "]]"))))
(defun org-babel-examplize-region (beg end)
"Comment out region using the ': ' org example quote."

View File

@ -199,7 +199,6 @@ would then be [[#sandbox][the sandbox]].
#+end_src
* Tasks [29/47]
** TODO make tangle files read-only?
With a file-local variable setting?
@ -848,6 +847,11 @@ $0
waiting for guidance from those more familiar with yasnippets
** DONE LoB: allow output in buffer
** DONE allow default header arguments by language
org-babel-default-header-args:lang-name
An example of when this is useful is for languages which always return
files as their results (e.g. [[*** ditaa][ditaa]], and [[*** gnuplot][gnuplot]]).
** DONE singe-function tangling and loading elisp from literate org-mode file [3/3]
This function should tangle the org-mode file for elisp, and then call
@ -1948,7 +1952,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 [0/5]
** TODO Add languages [1/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.
@ -1961,9 +1965,33 @@ This could probably be added to [[file:lisp/org-babel-script.el][org-babel-scrip
*** TODO java
*** TODO ditaa
*** DONE ditaa
(see [[* file result types][file result types]])
#+srcname: implementing-ditaa
#+begin_src ditaa :results replace :file blue.png :cmdline -r
+---------+
| cBLU |
| |
| +----+
| |cPNK|
| | |
+----+----+
#+end_src
#+resname: implementing-ditaa
[[file:blue.png][blue.png]]
*** STARTED gnuplot
(see [[* file result types][file result types]])
- a required =file= header argument
- a =cmdline= header argument
- to add variables
- scalar variables should be replaced in the body of the gnuplot code
- vector variables should be exported to tab-separated files, and
the variable names should be replaced with the path to the files
*** TODO dot
(see [[* file result types][file result types]])
@ -2466,47 +2494,47 @@ of these tests may fail.
| basic evaluation | | | | | pass |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| emacs lisp | basic-elisp | | 5 | 5 | pass |
| shell | basic-shell | | 6 | 6 | pass |
| ruby | basic-ruby | | org-babel | org-babel | pass |
| shell | basic-shell | | 6 | 6 | pass |
| ruby | basic-ruby | | org-babel | org-babel | pass |
| python | basic-python | | hello world | hello world | pass |
| R | basic-R | | 13 | 13 | pass |
| R | basic-R | | 13 | 13 | pass |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| tables | | | | | pass |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| emacs lisp | table-elisp | | 3 | 3 | pass |
| ruby | table-ruby | | 1-2-3 | 1-2-3 | pass |
| python | table-python | | 5 | 5 | pass |
| R | table-R | | 3.5 | 3.5 | pass |
| emacs lisp | table-elisp | | 3 | 3 | pass |
| ruby | table-ruby | | 1-2-3 | 1-2-3 | pass |
| python | table-python | | 5 | 5 | pass |
| R | table-R | | 3.5 | 3.5 | pass |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| source block references | | | | | pass |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| all languages | chained-ref-last | | Array | Array | pass |
| all languages | chained-ref-last | | Array | Array | pass |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| source block functions | | | | | pass |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| emacs lisp | defun-fibb | | fibbd | fibbd | pass |
| run over | Fibonacci | 0 | 1 | 1 | pass |
| a | Fibonacci | 1 | 1 | 1 | pass |
| variety | Fibonacci | 2 | 2 | 2 | pass |
| of | Fibonacci | 3 | 3 | 3 | pass |
| different | Fibonacci | 4 | 5 | 5 | pass |
| arguments | Fibonacci | 5 | 8 | 8 | pass |
| emacs lisp | defun-fibb | | fibbd | fibbd | pass |
| run over | Fibonacci | 0 | 1 | 1 | pass |
| a | Fibonacci | 1 | 1 | 1 | pass |
| variety | Fibonacci | 2 | 2 | 2 | pass |
| of | Fibonacci | 3 | 3 | 3 | pass |
| different | Fibonacci | 4 | 5 | 5 | pass |
| arguments | Fibonacci | 5 | 8 | 8 | pass |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| bugs and tasks | | | | | pass |
|-------------------------+----------------------------+-----+-------------+-------------+------| | |
| simple ruby arrays | ruby-array-test | | 3 | 3 | |
| R number evaluation | bug-R-number-evaluation | | 2 | | |
| multi-line ruby blocks | multi-line-ruby-test | | 2 | | |
| forcing vector results | test-forced-vector-results | | Array | | |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| sessions | | | | | |
| simple ruby arrays | ruby-array-test | | 3 | 3 | pass |
| 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 |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| set ruby session | set-ruby-session-var | | :set | | |
| get from ruby session | get-ruby-session-var | | 3 | | |
| set python session | set-python-session-var | | set | | |
| get from python session | get-python-session-var | | 4 | | |
| set R session | set-R-session-var | | set | | |
| get from R session | get-R-session-var | | 5 | | |
| sessions | | | | | pass |
|-------------------------+----------------------------+-----+-------------+-------------+------|
| set ruby session | set-ruby-session-var | | :set | :set | pass |
| get from ruby session | get-ruby-session-var | | 3 | 3 | pass |
| set python session | set-python-session-var | | set | set | pass |
| get from python session | get-python-session-var | | 4 | 4 | pass |
| set R session | set-R-session-var | | set | set | pass |
| get from R session | get-R-session-var | | 5 | 5 | pass |
#+TBLFM: $5='(if (= (length $3) 1) (progn (message (format "running %S" '(sbe $2 (n $3)))) (sbe $2 (n $3))) (sbe $2))::$6='(if (string= $4 $5) "pass" (format "expected %S but was %S" $4 $5))
** basic tests