mirror of https://github.com/Chizi123/.emacs.d.git

Chizi123
2018-11-18 76bbd07de7add0f9d13c6914f158d19630fe2f62
commit | author | age
76bbd0 1 ;;; ob-ditaa.el --- Babel Functions for ditaa        -*- lexical-binding: t; -*-
C 2
3 ;; Copyright (C) 2009-2018 Free Software Foundation, Inc.
4
5 ;; Author: Eric Schulte
6 ;; Keywords: literate programming, reproducible research
7 ;; Homepage: https://orgmode.org
8
9 ;; This file is part of GNU Emacs.
10
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation, either version 3 of the License, or
14 ;; (at your option) any later version.
15
16 ;; GNU Emacs is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 ;; GNU General Public License for more details.
20
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
23
24 ;;; Commentary:
25
26 ;; Org-Babel support for evaluating ditaa source code.
27 ;;
28 ;; This differs from most standard languages in that
29 ;;
30 ;; 1) there is no such thing as a "session" in ditaa
31 ;;
32 ;; 2) we are generally only going to return results of type "file"
33 ;;
34 ;; 3) we are adding the "file" and "cmdline" header arguments
35 ;;
36 ;; 4) there are no variables (at least for now)
37
38 ;;; Code:
39 (require 'ob)
40 (require 'org-compat)
41
42 (defvar org-babel-default-header-args:ditaa
43   '((:results . "file")
44     (:exports . "results")
45     (:java . "-Dfile.encoding=UTF-8"))
46   "Default arguments for evaluating a ditaa source block.")
47
48 (defcustom org-ditaa-jar-path (expand-file-name
49                    "ditaa.jar"
50                    (file-name-as-directory
51                 (expand-file-name
52                  "scripts"
53                  (file-name-as-directory
54                   (expand-file-name
55                    "../contrib"
56                    (file-name-directory (org-find-library-dir "org")))))))
57   "Path to the ditaa jar executable."
58   :group 'org-babel
59   :type 'string)
60
61 (defcustom org-babel-ditaa-java-cmd "java"
62   "Java executable to use when evaluating ditaa blocks."
63   :group 'org-babel
64   :type 'string)
65
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."
69   :group 'org-babel
70   :version "24.4"
71   :package-version '(Org . "8.0")
72   :type 'string)
73
74 (defcustom org-ditaa-jar-option "-jar"
75   "Option for the ditaa jar file.
76 Do not leave leading or trailing spaces in this string."
77   :group 'org-babel
78   :version "24.1"
79   :type 'string)
80
81 (defun org-babel-execute:ditaa (body params)
82   "Execute a block of Ditaa code with org-babel.
83 This function is called by `org-babel-execute-src-block'."
84   (let* ((out-file (or (cdr (assq :file params))
85                (error
86             "ditaa code block requires :file header argument")))
87      (cmdline (cdr (assq :cmdline params)))
88      (java (cdr (assq :java params)))
89      (in-file (org-babel-temp-file "ditaa-"))
90      (eps (cdr (assq :eps params)))
91      (eps-file (when eps
92              (org-babel-process-file-name (concat in-file ".eps"))))
93      (pdf-cmd (when (and (or (string= (file-name-extension out-file) "pdf")
94                  (cdr (assq :pdf params))))
95             (concat
96              "epstopdf"
97              " " eps-file
98              " -o=" (org-babel-process-file-name out-file))))
99      (cmd (concat org-babel-ditaa-java-cmd
100               " " java " " org-ditaa-jar-option " "
101               (shell-quote-argument
102                (expand-file-name
103             (if eps org-ditaa-eps-jar-path org-ditaa-jar-path)))
104               " " cmdline
105               " " (org-babel-process-file-name in-file)
106               " " (if pdf-cmd
107                   eps-file
108                 (org-babel-process-file-name out-file)))))
109     (unless (file-exists-p org-ditaa-jar-path)
110       (error "Could not find ditaa.jar at %s" org-ditaa-jar-path))
111     (with-temp-file in-file (insert body))
112     (message cmd) (shell-command cmd)
113     (when pdf-cmd (message pdf-cmd) (shell-command pdf-cmd))
114     nil)) ;; signal that output has already been written to file
115
116 (defun org-babel-prep-session:ditaa (_session _params)
117   "Return an error because ditaa does not support sessions."
118   (error "Ditaa does not support sessions"))
119
120 (provide 'ob-ditaa)
121
122
123
124 ;;; ob-ditaa.el ends here