1
1
;;; ob-ditaa.el --- org-babel functions for ditaa evaluation
3
;; Copyright (C) 2009-2013 Free Software Foundation, Inc.
3
;; Copyright (C) 2009-2014 Free Software Foundation, Inc.
5
5
;; Author: Eric Schulte
6
6
;; Keywords: literate programming, reproducible research
34
34
;; 3) we are adding the "file" and "cmdline" header arguments
36
36
;; 4) there are no variables (at least for now)
38
;; 5) it depends on a variable defined in org-exp-blocks (namely
39
;; `org-ditaa-jar-path') so be sure you have org-exp-blocks loaded
43
40
(require 'org-compat)
45
(defvar org-ditaa-jar-path) ;; provided by org-exp-blocks
47
42
(defvar org-babel-default-header-args:ditaa
48
43
'((:results . "file")
49
44
(:exports . "results")
50
45
(:java . "-Dfile.encoding=UTF-8"))
51
46
"Default arguments for evaluating a ditaa source block.")
48
(defcustom org-ditaa-jar-path (expand-file-name
50
(file-name-as-directory
53
(file-name-as-directory
56
(file-name-directory (org-find-library-dir "org")))))))
57
"Path to the ditaa jar executable."
61
(defcustom org-babel-ditaa-java-cmd "java"
62
"Java executable to use when evaluating ditaa blocks."
66
(defcustom org-ditaa-eps-jar-path
67
(expand-file-name "DitaaEps.jar" (file-name-directory org-ditaa-jar-path))
68
"Path to the DitaaEps.jar executable."
71
:package-version '(Org . "8.0")
53
74
(defcustom org-ditaa-jar-option "-jar"
54
75
"Option for the ditaa jar file.
55
76
Do not leave leading or trailing spaces in this string."
61
82
"Execute a block of Ditaa code with org-babel.
62
83
This function is called by `org-babel-execute-src-block'."
63
84
(let* ((result-params (split-string (or (cdr (assoc :results params)) "")))
64
(out-file ((lambda (el)
67
"ditaa code block requires :file header argument")))
68
(cdr (assoc :file params))))
85
(out-file (let ((el (cdr (assoc :file params))))
88
"ditaa code block requires :file header argument"))))
69
89
(cmdline (cdr (assoc :cmdline params)))
70
90
(java (cdr (assoc :java params)))
71
91
(in-file (org-babel-temp-file "ditaa-"))
72
(cmd (concat "java " java " " org-ditaa-jar-option " "
92
(eps (cdr (assoc :eps params)))
93
(cmd (concat org-babel-ditaa-java-cmd
94
" " java " " org-ditaa-jar-option " "
73
95
(shell-quote-argument
74
(expand-file-name org-ditaa-jar-path))
97
(if eps org-ditaa-eps-jar-path org-ditaa-jar-path)))
76
99
" " (org-babel-process-file-name in-file)
77
" " (org-babel-process-file-name out-file))))
100
" " (org-babel-process-file-name out-file)))
101
(pdf-cmd (when (and (or (string= (file-name-extension out-file) "pdf")
102
(cdr (assoc :pdf params))))
105
" " (org-babel-process-file-name (concat in-file ".eps"))
106
" -o=" (org-babel-process-file-name out-file)))))
78
107
(unless (file-exists-p org-ditaa-jar-path)
79
108
(error "Could not find ditaa.jar at %s" org-ditaa-jar-path))
80
109
(with-temp-file in-file (insert body))
81
110
(message cmd) (shell-command cmd)
111
(when pdf-cmd (message pdf-cmd) (shell-command pdf-cmd))
82
112
nil)) ;; signal that output has already been written to file
84
114
(defun org-babel-prep-session:ditaa (session params)