Skip to content

Instantly share code, notes, and snippets.

@lurdan
Last active February 4, 2016 10:40
Show Gist options
  • Select an option

  • Save lurdan/eabb2cc5033964acf5da to your computer and use it in GitHub Desktop.

Select an option

Save lurdan/eabb2cc5033964acf5da to your computer and use it in GitHub Desktop.
(require 'ob)
(require 'ob-eval)
(defvar org-babel-default-header-args:blockdiag
'((:results . "file") (:exports . "results"))
"Default arguments to use when evaluating a blockdiag source block.")
(defun org-babel-expand-body:blockdiag (body params)
"Expand BODY according to PARAMS, return the expanded body."
(let ((vars (mapcar #'cdr (org-babel--get-vars params))))
(mapc
(lambda (pair)
(let ((name (symbol-name (car pair)))
(value (cdr pair)))
(setq body
(replace-regexp-in-string
(concat "\$" (regexp-quote name))
(if (stringp value) value (format "%S" value))
body))))
vars)
body))
(defun org-babel-execute:blockdiag (body params)
"Execute a block of Blockdiag code with org-babel.
This function is called by `org-babel-execute-src-block'."
(let* ((result-params (cdr (assoc :result-params params)))
(out-file (cdr (assoc :file params)))
(cmdline (or (cdr (assoc :cmdline params))
(format "-T%s" (file-name-extension out-file))))
(cmd (or (cdr (assoc :cmd params)) "blockdiag"))
(in-file (org-babel-temp-file "blockdiag-")))
(with-temp-file in-file
(insert (org-babel-expand-body:blockdiag body params)))
(org-babel-eval
(concat cmd
" " (org-babel-process-file-name in-file)
" " cmdline
" -o " (org-babel-process-file-name out-file)) "")
nil)) ;; signal that output has already been written to file
(defun org-babel-prep-session:blockdiag (session params)
"Return an error because Blockdiag does not support sessions."
(error "Blockdiag does not support sessions"))
(provide 'ob-blockdiag)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment