lang/plantuml: force ob-plantuml to build w/ plantuml-mode

It is more sophisticated and robust.
This commit is contained in:
Henrik Lissner 2019-10-22 18:50:33 -04:00
parent fa9001aacb
commit 0b1f3567a3
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 57 additions and 23 deletions

View file

@ -1,10 +1,49 @@
;;; lang/plantuml/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +plantuml/install ()
"Install plantuml.jar."
(interactive)
(if (file-exists-p plantuml-jar-path)
(user-error "plantuml.jar already installed")
(url-copy-file "https://downloads.sourceforge.net/project/plantuml/plantuml.jar"
plantuml-jar-path)))
(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)
(let* ((body (replace-regexp-in-string
"^[[:blank:]\n]*\\(@start\\)"
"\\\\\\1"
body))
(out-file (or (cdr (assoc :file params))
(concat doom-cache-dir
"ob-plantuml/"
(md5 str nil nil nil t)
".png")))
(in-file (org-babel-temp-file "plantuml-")))
(if (eq plantuml-default-exec-mode 'server)
(let* ((url-request-location ))
(with-current-buffer
(url-retrieve-synchronously (plantuml-server-encode-url body))
(goto-char (point-min))
;; skip the HTTP headers
(while (not (looking-at "\n")) (forward-line))
(kill-region (point-min) (+ 1 (point)))
(write-file (org-babel-process-file-name 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 org-plantuml-jar-path))
(error "Could not find plantuml.jar at %s" org-plantuml-jar-path))
((concat "java " (or (cdr (assoc :java params)) "") " -jar "
(shell-quote-argument (expand-file-name plantuml-executable-path)))))
(concat (if (string= (file-name-extension out-file) "svg")
" -tsvg" "")
(if (string= (file-name-extension out-file) "eps")
" -teps" "")
" -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 (concat "@startuml\n" body "\n@enduml")))
(message "%s" cmd)
(org-babel-eval cmd "")
nil)))) ;; signal that output has already been written to file