emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] babel for ditaa-eps


From: Arne Babenhauserheide (IMK)
Subject: Re: [O] babel for ditaa-eps
Date: Thu, 13 Sep 2012 13:53:43 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120828 Thunderbird/14.0

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Eric,

It’s much easier to answer, what this does not share with ob-ditaa.el :)

If I cut out the obvious renaming (to be able to use a ditaa-exp
source type), it’s just this diff (and the first half of that only
defines variables…):

- --- /usr/share/emacs/site-lisp/org-mode/ob-ditaa.el   2012-05-25
23:12:51.000000000 +0200
+++ ob-ditaa-eps.el     2012-09-12 15:37:50.942191587 +0200
@@ -44,6 +47,20 @@

- -(defvar org-ditaa-jar-path)
- -(defun org-babel-execute:ditaa (body params)
+(defcustom org-ditaa-eps-jar-path (expand-file-name
+                           "DitaaEps.jar"
+                           (file-name-as-directory
+                            (expand-file-name
+                             "scripts"
+                             (file-name-as-directory
+                              (expand-file-name
+                               "../contrib"
+                               (file-name-directory (find-library-name 
"org")))))))
+  "Path to the ditaa-eps jar executable."
+  :group 'org-babel
+  :type 'string)
+
+
+(defvar org-ditaa-eps-jar-path)
+(defun org-babel-execute:ditaa-eps (body params)
   "Execute a block of Ditaa code with org-babel.
 This function is called by `org-babel-execute-src-block'."
   (let* ((result-params (split-string (or (cdr (assoc :results
params)) "")))
@@ -55,14 +72,18 @@
         (cmdline (cdr (assoc :cmdline params)))
         (java (cdr (assoc :java params)))
         (in-file (org-babel-temp-file "ditaa-"))
- -      (cmd (concat "java " java " -jar "
+        (cmd0 (concat "java " java " -jar "
                      (shell-quote-argument
- -                    (expand-file-name org-ditaa-jar-path))
+                      (expand-file-name org-ditaa-eps-jar-path))
                      " " cmdline
                      " " (org-babel-process-file-name in-file)
- -                   " " (org-babel-process-file-name out-file))))
- -    (unless (file-exists-p org-ditaa-jar-path)
- -      (error "Could not find ditaa.jar at %s" org-ditaa-jar-path))
+                     " " (org-babel-process-file-name (concat in-file 
".eps"))))
+        (cmd1 (concat "epstopdf"
+                     " " (org-babel-process-file-name (concat in-file ".eps"))
+                     " -o=" (org-babel-process-file-name out-file))))
+    (unless (file-exists-p org-ditaa-eps-jar-path)
+      (error "Could not find ditaa.jar at %s" org-ditaa-eps-jar-path))
     (with-temp-file in-file (insert body))
- -    (message cmd) (shell-command cmd)
+    (message cmd0) (shell-command cmd0)
+    (message cmd1) (shell-command cmd1)
     nil)) ;; signal that output has already been written to file


Best wishes,
Arne

Am 13.09.2012 07:16, schrieb Eric Schulte:
> It sounds like there is a good deal of desire for this
> functionality. How much code does this file share with ob-ditaa?
> If it is a large percentage perhaps it would be possible to instead
> add a new header argument to ditaa code blocks to run ditaa-eps.
> Some code blocks (e.g., sql) already have an :engine header
> argument which may be used to change the back-end tool which
> executes the block.
> 
> Thanks for sharing!
> 
> "Arne Babenhauserheide (IMK)" <address@hidden>
> writes:
> 
>> Dear org hackers,
>> 
>> I don’t know if there’s already a babel-ditaa-option for using 
>> ditaa-eps, so I modified ob-ditaa.el to use ditaa-eps and convert
>> the result using epstopdf.
>> 
>> Feel free to use it.
>> 
>> ;;; ob-ditaa-eps.el --- org-babel functions for ditaa evaluation
>> 
>> ;; Copyright (C) 2009-2012  Free Software Foundation, Inc.
>> 
>> ;; Author: Eric Schulte und Arne Babenhauserheide ;; Keywords:
>> literate programming, reproducible research ;; Homepage:
>> http://orgmode.org
>> 
>> ;; This file is part of GNU Emacs.
>> 
>> ;; GNU Emacs 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 of
>> the License, or ;; (at your option) any later version.
>> 
>> ;; GNU Emacs 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.  If not, see
>> <http://www.gnu.org/licenses/>.
>> 
>> ;;; Commentary:
>> 
>> ;; Org-Babel support for evaluating ditaa source code as
>> eps/pdf. ;; ;; Almost verbatim copy from ob-ditaa, but with
>> ditaa-eps and epstopdf ;; as intermediate step. ;; ;; Ditaa
>> 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 'ob)
>> 
>> (defvar org-babel-default-header-args:ditaa-eps '((:results .
>> "file") (:exports . "results") (:java . 
>> "-Dfile.encoding=UTF-8")) "Default arguments for evaluating a
>> ditaa source block.")
>> 
>> (defcustom org-ditaa-eps-jar-path (expand-file-name 
>> "DitaaEps.jar" (file-name-as-directory (expand-file-name 
>> "scripts" (file-name-as-directory (expand-file-name "../contrib" 
>> (file-name-directory (find-library-name "org"))))))) "Path to the
>> ditaa-eps jar executable." :group 'org-babel :type 'string)
>> 
>> 
>> (defvar org-ditaa-eps-jar-path) (defun
>> org-babel-execute:ditaa-eps (body params) "Execute a block of
>> Ditaa code with org-babel. This function is called by
>> `org-babel-execute-src-block'." (let* ((result-params
>> (split-string (or (cdr (assoc :results params)) ""))) (out-file
>> ((lambda (el) (or el (error "ditaa code block requires :file
>> header argument"))) (cdr (assoc :file params)))) (cmdline (cdr
>> (assoc :cmdline params))) (java (cdr (assoc :java params))) 
>> (in-file (org-babel-temp-file "ditaa-")) (cmd0 (concat "java "
>> java " -jar " (shell-quote-argument (expand-file-name
>> org-ditaa-eps-jar-path)) " " cmdline " "
>> (org-babel-process-file-name in-file) " "
>> (org-babel-process-file-name (concat in-file ".eps")))) (cmd1
>> (concat "epstopdf" " " (org-babel-process-file-name (concat
>> in-file ".eps")) " -o=" (org-babel-process-file-name
>> out-file)))) (unless (file-exists-p org-ditaa-eps-jar-path) 
>> (error "Could not find ditaa.jar at %s" org-ditaa-eps-jar-path)) 
>> (with-temp-file in-file (insert body)) (message cmd0)
>> (shell-command cmd0) (message cmd1) (shell-command cmd1) nil)) ;;
>> signal that output has already been written to file
>> 
>> (defun org-babel-prep-session:ditaa-eps (session params) "Return
>> an error because ditaa does not support sessions." (error "Ditaa
>> does not support sessions"))
>> 
>> (defun ditaa-eps-mode () (artist-mode))
>> 
>> (provide 'ob-ditaa-eps)
>> 
>> ;;; ob-ditaa-eps.el ends here
>> 
>> Best wishes, Arne
>> 
> 

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJQUclHAAoJEFyD82SnDaCeim0IAJKYNMwE0vAsdYOk9Ur/V8Vk
JDMORPs3Riox5MC0vWZRpEwxA/MHUV9J/p40+gQSF67aAhAo0T2c1qhjA99xsn2S
7OCpbLdTPMTGe2e23LLwuPjiX6J0I9E3u39AOz+ePwUmlGBceCzCf26nQLg0ikLR
PUZvGFrB2UCBd5267BBJnCDE9rLdC3FrvnxH9o2uzti9b/h24UtoeVleGN9x7Wvl
taf/FILgtSS9Cp66xRadsovHrJda7mdopa+lQjA+dwboAUd0lhHDU5nOLL0DwIhH
yMJUEESHm+FWYZMY3m3Z9lqkTt0GN+WQUf2sXCIFGuHQuy4hdZmNtUnRMPk60uE=
=lcUh
-----END PGP SIGNATURE-----



reply via email to

[Prev in Thread] Current Thread [Next in Thread]