;;; lang/plantuml/autoload.el -*- lexical-binding: t; -*- ;;;###autoload (defun +plantuml-org-babel-execute:plantuml-a (body params) "Execute a block of plantuml code with org-babel. This function is called by `org-babel-execute-src-block'." (require 'plantuml-mode) ;; REVIEW Refactor me (let* ((body (replace-regexp-in-string "^[[:blank:]\n]*\\(@start\\)" "\\\\\\1" body)) (fullbody (org-babel-plantuml-make-body body params)) (out-file (or (cdr (assq :file params)) (org-babel-temp-file "plantuml-" ".png"))) (in-file (org-babel-temp-file "plantuml-"))) (if (eq plantuml-default-exec-mode 'server) (if (bound-and-true-p org-export-current-backend) (user-error "Exporting plantuml diagrams in server mode is not supported (see `plantuml-default-exec-mode')") (save-current-buffer (save-match-data (with-current-buffer (url-retrieve-synchronously (plantuml-server-encode-url body) nil t) (goto-char (point-min)) ;; skip the HTTP headers (while (not (looking-at "\n")) (forward-line)) (delete-region (point-min) (+ 1 (point))) (write-file out-file))))) (let* ((cmd (concat (cond ((eq plantuml-default-exec-mode 'executable) (unless (executable-find plantuml-executable-path) (error "Could not find plantuml at %s" (executable-find plantuml-executable-path))) (concat (shell-quote-argument (executable-find plantuml-executable-path)) " --headless")) ((not (file-exists-p plantuml-jar-path)) (error "Could not find plantuml.jar at %s" plantuml-jar-path)) ((concat "java " (cdr (assoc :java params)) " -jar " (shell-quote-argument (expand-file-name plantuml-jar-path))))) " " (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")) " " " -p " (cdr (assoc :cmdline params)) " < " (org-babel-process-file-name in-file) " > " (org-babel-process-file-name out-file)))) (with-temp-file in-file (insert fullbody)) (message "%s" cmd) (org-babel-eval cmd ""))) (unless (cdr (assq :file params)) out-file)))