From: "Arne Babenhauserheide (IMK)" <arne.babenhauserheide@kit.edu>
To: Eric Schulte <eric.schulte@gmx.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: babel for ditaa-eps
Date: Thu, 13 Sep 2012 13:53:43 +0200 [thread overview]
Message-ID: <5051C947.2000505@kit.edu> (raw)
In-Reply-To: <87txv2o63m.fsf@gmx.com>
-----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)" <arne.babenhauserheide@kit.edu>
> 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-----
next prev parent reply other threads:[~2012-09-13 11:54 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-12 14:00 babel for ditaa-eps Arne Babenhauserheide (IMK)
2012-09-13 2:19 ` Luis Anaya
2012-09-13 3:08 ` Luis Anaya
2012-09-13 5:03 ` Thomas S. Dye
2012-09-13 5:16 ` Eric Schulte
2012-09-13 11:53 ` Arne Babenhauserheide (IMK) [this message]
2012-09-13 15:03 ` Eric Schulte
2012-09-13 23:28 ` Luis Anaya
2012-09-14 0:15 ` Eric Schulte
2012-09-14 2:51 ` Eric Schulte
2012-09-16 2:13 ` Luis Anaya
2012-09-16 14:13 ` Eric Schulte
2012-09-19 8:22 ` Bastien
2012-09-19 8:21 ` Bastien
2012-09-21 5:20 ` Thomas S. Dye
2012-09-21 13:29 ` Bastien
2012-09-22 8:48 ` Bastien
-- strict thread matches above, loose matches on Subject: below --
2012-09-14 3:05 Luis Anaya
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5051C947.2000505@kit.edu \
--to=arne.babenhauserheide@kit.edu \
--cc=emacs-orgmode@gnu.org \
--cc=eric.schulte@gmx.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).