emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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-----

  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).