From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Arne Babenhauserheide (IMK)" Subject: Re: babel for ditaa-eps Date: Thu, 13 Sep 2012 13:53:43 +0200 Message-ID: <5051C947.2000505@kit.edu> References: <50509584.30704@kit.edu> <87txv2o63m.fsf@gmx.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([208.118.235.92]:39895) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TC7zX-0002dk-73 for emacs-orgmode@gnu.org; Thu, 13 Sep 2012 07:54:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TC7zQ-0004oJ-EH for emacs-orgmode@gnu.org; Thu, 13 Sep 2012 07:53:55 -0400 Received: from mailout.scc.kit.edu ([129.13.185.202]:33335) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TC7zQ-0004o4-4o for emacs-orgmode@gnu.org; Thu, 13 Sep 2012 07:53:48 -0400 In-Reply-To: <87txv2o63m.fsf@gmx.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Eric Schulte Cc: emacs-orgmode@gnu.org -----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)" > 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 >> . >> >> ;;; 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-----