summaryrefslogtreecommitdiff
path: root/lisp/org/ob-plantuml.el
diff options
context:
space:
mode:
authorBastien Guerry <bzg@gnu.org>2020-12-13 13:44:15 +0100
committerBastien Guerry <bzg@gnu.org>2020-12-13 13:44:15 +0100
commitf22856a5c54d99867cd24c08a14bbda23d5c6229 (patch)
treeb6bd688963531eccb8b9d18195df0edfc34ba59d /lisp/org/ob-plantuml.el
parent6aa9fe3e1b4052b2acde86404a90e35893ebfa00 (diff)
downloademacs-f22856a5c54d99867cd24c08a14bbda23d5c6229.tar.gz
Update to Org 9.4.1
Diffstat (limited to 'lisp/org/ob-plantuml.el')
-rw-r--r--lisp/org/ob-plantuml.el107
1 files changed, 66 insertions, 41 deletions
diff --git a/lisp/org/ob-plantuml.el b/lisp/org/ob-plantuml.el
index 5bf9e2beee4..e692bf7cdbe 100644
--- a/lisp/org/ob-plantuml.el
+++ b/lisp/org/ob-plantuml.el
@@ -26,12 +26,12 @@
;; Org-Babel support for evaluating plantuml script.
;;
;; Inspired by Ian Yang's org-export-blocks-format-plantuml
-;; http://www.emacswiki.org/emacs/org-export-blocks-format-plantuml.el
+;; https://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
+;; plantuml.jar | `org-plantuml-jar-path' should point to the jar file (when exec mode is `jar')
;;; Code:
(require 'ob)
@@ -46,6 +46,31 @@
:version "24.1"
:type 'string)
+(defcustom org-plantuml-exec-mode 'jar
+ "Method to use for PlantUML diagram generation.
+`jar' means to use java together with the JAR.
+The JAR can be configured via `org-plantuml-jar-path'.
+
+`plantuml' means to use the PlantUML executable.
+The executable can be configured via `org-plantuml-executable-path'.
+You can also configure extra arguments via `org-plantuml-executable-args'."
+ :group 'org-babel
+ :package-version '(Org . "9.4")
+ :type 'symbol
+ :options '(jar plantuml))
+
+(defcustom org-plantuml-executable-path "plantuml"
+ "File name of the PlantUML executable."
+ :group 'org-babel
+ :package-version '(Org . "9.4")
+ :type 'string)
+
+(defcustom org-plantuml-executable-args (list "-headless")
+ "The arguments passed to plantuml executable when executing PlantUML."
+ :group 'org-babel
+ :package-version '(Org . "9.4")
+ :type '(repeat string))
+
(defun org-babel-variable-assignments:plantuml (params)
"Return a list of PlantUML statements assigning the block's variables.
PARAMS is a property list of source block parameters, which may
@@ -69,10 +94,11 @@ function to convert variables to PlantUML assignments.
If BODY does not contain @startXXX ... @endXXX clauses, @startuml
... @enduml will be added."
- (let ((assignments (org-babel-variable-assignments:plantuml params)))
- (if (string-prefix-p "@start" body t) assignments
- (format "@startuml\n%s\n@enduml"
- (org-babel-expand-body:generic body params assignments)))))
+ (let ((full-body
+ (org-babel-expand-body:generic
+ body params (org-babel-variable-assignments:plantuml params))))
+ (if (string-prefix-p "@start" body t) full-body
+ (format "@startuml\n%s\n@enduml" full-body))))
(defun org-babel-execute:plantuml (body params)
"Execute a block of plantuml code with org-babel.
@@ -82,40 +108,41 @@ This function is called by `org-babel-execute-src-block'."
(cmdline (cdr (assq :cmdline params)))
(in-file (org-babel-temp-file "plantuml-"))
(java (or (cdr (assq :java params)) ""))
+ (executable (cond ((eq org-plantuml-exec-mode 'plantuml) org-plantuml-executable-path)
+ (t "java")))
+ (executable-args (cond ((eq org-plantuml-exec-mode 'plantuml) org-plantuml-executable-args)
+ ((string= "" org-plantuml-jar-path)
+ (error "`org-plantuml-jar-path' is not set"))
+ ((not (file-exists-p org-plantuml-jar-path))
+ (error "Could not find plantuml.jar at %s" org-plantuml-jar-path))
+ (t (list java
+ "-jar"
+ (shell-quote-argument (expand-file-name org-plantuml-jar-path))))))
(full-body (org-babel-plantuml-make-body body params))
- (cmd (if (string= "" org-plantuml-jar-path)
- (error "`org-plantuml-jar-path' is not set")
- (concat "java " java " -jar "
- (shell-quote-argument
- (expand-file-name org-plantuml-jar-path))
- (if (string= (file-name-extension out-file) "png")
- " -tpng" "")
- (if (string= (file-name-extension out-file) "svg")
- " -tsvg" "")
- (if (string= (file-name-extension out-file) "eps")
- " -teps" "")
- (if (string= (file-name-extension out-file) "pdf")
- " -tpdf" "")
- (if (string= (file-name-extension out-file) "tex")
- " -tlatex" "")
- (if (string= (file-name-extension out-file) "vdx")
- " -tvdx" "")
- (if (string= (file-name-extension out-file) "xmi")
- " -txmi" "")
- (if (string= (file-name-extension out-file) "scxml")
- " -tscxml" "")
- (if (string= (file-name-extension out-file) "html")
- " -thtml" "")
- (if (string= (file-name-extension out-file) "txt")
- " -ttxt" "")
- (if (string= (file-name-extension out-file) "utxt")
- " -utxt" "")
- " -p " cmdline " < "
- (org-babel-process-file-name in-file)
- " > "
- (org-babel-process-file-name out-file)))))
- (unless (file-exists-p org-plantuml-jar-path)
- (error "Could not find plantuml.jar at %s" org-plantuml-jar-path))
+ (cmd (mapconcat #'identity
+ (append
+ (list executable)
+ executable-args
+ (pcase (file-name-extension out-file)
+ ("png" '("-tpng"))
+ ("svg" '("-tsvg"))
+ ("eps" '("-teps"))
+ ("pdf" '("-tpdf"))
+ ("tex" '("-tlatex"))
+ ("vdx" '("-tvdx"))
+ ("xmi" '("-txmi"))
+ ("scxml" '("-tscxml"))
+ ("html" '("-thtml"))
+ ("txt" '("-ttxt"))
+ ("utxt" '("-utxt")))
+ (list
+ "-p"
+ cmdline
+ "<"
+ (org-babel-process-file-name in-file)
+ ">"
+ (org-babel-process-file-name out-file)))
+ " ")))
(with-temp-file in-file (insert full-body))
(message "%s" cmd) (org-babel-eval cmd "")
nil)) ;; signal that output has already been written to file
@@ -126,6 +153,4 @@ This function is called by `org-babel-execute-src-block'."
(provide 'ob-plantuml)
-
-
;;; ob-plantuml.el ends here