From a89dc43e835515eff9dd6bd864e015a3729cd63c Mon Sep 17 00:00:00 2001 From: Eric Schulte Date: Thu, 26 Aug 2010 09:36:08 -0600 Subject: [PATCH] integrating ob-plantuml -- Thanks to Zhang Weize for this contribution! * Makefile (LISPF): now compiling and installing ob-plantuml.el * contrib/scripts/.gitignore : ignores the plantuml.jar file, so that it can be located next to ditaa.jar * lisp/ob-plantuml.el: adding copyright notice and FSF attribution (org-plantuml-jar-path): now a defcustom (org-babel-execute:plantuml): now using org-babel-eval which displays error messages * lisp/org.el (org-babel-load-languages): ob-plantuml is now part of org-babel-load-languages --- Makefile | 5 ++-- contrib/scripts/.gitignore | 1 + lisp/ob-plantuml.el | 57 +++++++++++++++++++++++++++----------- lisp/org.el | 1 + 4 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 contrib/scripts/.gitignore diff --git a/Makefile b/Makefile index 3229f4657..e5e51b2b5 100644 --- a/Makefile +++ b/Makefile @@ -147,7 +147,8 @@ LISPF = org.el \ ob-css.el \ ob-gnuplot.el \ ob-octave.el \ - ob-screen.el + ob-screen.el \ + ob-plantuml.el LISPFILES0 = $(LISPF:%=lisp/%) LISPFILES = $(LISPFILES0) lisp/org-install.el @@ -444,4 +445,4 @@ lisp/org-timer.elc: lisp/org.el lisp/org-vm.elc: lisp/org.el lisp/org-w3m.elc: lisp/org.el lisp/org-wl.elc: lisp/org.el -lisp/org-xoxo.elc: lisp/org-exp.el \ No newline at end of file +lisp/org-xoxo.elc: lisp/org-exp.el diff --git a/contrib/scripts/.gitignore b/contrib/scripts/.gitignore new file mode 100644 index 000000000..20d5925c6 --- /dev/null +++ b/contrib/scripts/.gitignore @@ -0,0 +1 @@ +plantuml.jar diff --git a/lisp/ob-plantuml.el b/lisp/ob-plantuml.el index 889fa9615..9959f4025 100644 --- a/lisp/ob-plantuml.el +++ b/lisp/ob-plantuml.el @@ -1,6 +1,26 @@ ;;; ob-plantuml.el --- org-babel functions for plantuml evaluation +;; Copyright (C) 2010 Free Software Foundation, Inc. + ;; Author: Zhang Weize +;; Keywords: literate programming, reproducible research +;; Homepage: http://orgmode.org +;; Version: 7.01trans + +;; 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: @@ -9,8 +29,14 @@ ;; Inspired by Ian Yang's org-export-blocks-format-plantuml ;; http://www.emacswiki.org/emacs/org-export-blocks-format-plantuml.el +;;; Requirements: + +;; plantuml | http://plantuml.sourceforge.net/ +;; plantuml.jar | `org-plantuml-jar-path' should point to the jar file + ;;; Code: (require 'ob) +(require 'ob-eval) (defvar org-babel-default-header-args:plantuml '((:results . "file") (:exports . "results")) @@ -19,28 +45,25 @@ (defun org-babel-expand-body:plantuml (body params &optional processed-params) "Expand BODY according to PARAMS, return the expanded body." body) -(defvar org-plantuml-jar-path) +(defcustom org-plantuml-jar-path nil + "Path to the plantuml.jar file." + :group 'org-babel + :type 'string) + (defun org-babel-execute:plantuml (body params) "Execute a block of plantuml 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 (cdr (assoc :file params))) - (cmdline (cdr (assoc :cmdline params))) - (in-file (make-temp-file "org-babel-plantuml"))) + (let* ((result-params (split-string (or (cdr (assoc :results params)) ""))) + (out-file (cdr (assoc :file params))) + (cmdline (cdr (assoc :cmdline params))) + (in-file (org-babel-temp-file "plantuml-")) + (cmd (concat "java -jar " + (shell-quote-argument org-plantuml-jar-path) + " -p " cmdline " < " in-file " > " out-file))) (unless (file-exists-p org-plantuml-jar-path) (error "Could not find plantuml.jar at %s" org-plantuml-jar-path)) (with-temp-file in-file (insert (concat "@startuml\n" body "\n@enduml"))) - (message (concat "java -jar " org-plantuml-jar-path - " -p " cmdline " < " in-file " > " out-file)) - (shell-command (concat "java -jar " (shell-quote-argument org-plantuml-jar-path) - " -p " cmdline " < " in-file " > " out-file)) - ; The method below will produce error when exporting the buffer. - ;; (with-temp-buffer - ;; (call-process-shell-command - ;; (concat "java -jar " org-plantuml-jar-path " -p " cmdline) - ;; in-file - ;; '(t nil)) - ;; (write-region nil nil out-file)) + (message "%s" cmd) (org-babel-eval cmd "") out-file)) (defun org-babel-prep-session:plantuml (session params) @@ -49,4 +72,6 @@ This function is called by `org-babel-execute-src-block'." (provide 'ob-plantuml) +;; arch-tag: 451f50c5-e779-407e-ad64-70e0e8f161d1 + ;;; ob-plantuml.el ends here diff --git a/lisp/org.el b/lisp/org.el index 6a6278743..89fcdae86 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -161,6 +161,7 @@ requirements) is loaded." (const :tag "Ocaml" ocaml) (const :tag "Octave" octave) (const :tag "Perl" perl) + (const :tag "PlantUML" plantuml) (const :tag "Python" python) (const :tag "Ruby" ruby) (const :tag "Sass" sass)