| 
					
				 | 
			
			
				@@ -31,7 +31,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;;; 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 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -83,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 
			 |