Bläddra i källkod

ob-plantuml.el support for evaluating plantuml scripts

Zhang Weize 14 år sedan
förälder
incheckning
810bb09ef3
1 ändrade filer med 52 tillägg och 0 borttagningar
  1. 52 0
      lisp/ob-plantuml.el

+ 52 - 0
lisp/ob-plantuml.el

@@ -0,0 +1,52 @@
+;;; ob-plantuml.el --- org-babel functions for plantuml evaluation
+
+;; Author: Zhang Weize
+
+;;; Commentary:
+
+;; 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
+
+;;; Code:
+(require 'ob)
+
+(defvar org-babel-default-header-args:plantuml
+  '((:results . "file") (:exports . "results"))
+  "Default arguments for evaluating a plantuml source block.")
+
+(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)
+(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")))
+    (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))
+    out-file))
+
+(defun org-babel-prep-session:plantuml (session params)
+  "Return an error because plantuml does not support sessions."
+  (error "Plantuml does not support sessions"))
+
+(provide 'ob-plantuml)
+
+;;; ob-plantuml.el ends here