>From 9e8addc14e628dc7c9c25d96d0cfd630ad15134e Mon Sep 17 00:00:00 2001 From: thibault Date: Fri, 9 Dec 2016 22:43:32 -0600 Subject: [PATCH] ob-plantuml.el: Add support for prologue and header variables * lisp/ob-plantuml.el (org-babel-execute:plantuml) Include prologue and header variables to temporary file body. (org-babel-plantuml-make-body): New function. Return content of temporary file used as input to PlantUML program. (org-babel-variable-assignments:plantuml): New function. Build list of variable assignments for source block. * testing/lisp/test-ob-plantuml.el: New file. Test body text produced by `org-babel-plantuml-make-body'. --- lisp/ob-plantuml.el | 28 ++++++++++++++- testing/lisp/test-ob-plantuml.el | 73 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 testing/lisp/test-ob-plantuml.el diff --git a/lisp/ob-plantuml.el b/lisp/ob-plantuml.el index 9ce65a9..01739c8 100644 --- a/lisp/ob-plantuml.el +++ b/lisp/ob-plantuml.el @@ -46,6 +46,31 @@ :version "24.1" :type '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 +contain multiple entries for the key `:var'. `:var' entries in PARAMS +are expected to be scalar variables." + (mapcar + (lambda (pair) + (format "!define %s %s" + (car pair) + (replace-regexp-in-string "\"" "" (cdr pair)))) + (org-babel--get-vars params))) + +(defun org-babel-plantuml-make-body (body params) + "Return PlantUML input string. +BODY is the content of the source block and PARAMS is a property list +of source block parameters. This function relies on the +`org-babel-expand-body:generic' function to extract `:var' entries +from PARAMS and on the `org-babel-variable-assignments:plantuml' +function to convert variables to PlantUML assignments." + (concat + "@startuml\n" + (org-babel-expand-body:generic + body params (org-babel-variable-assignments:plantuml params)) + "address@hidden")) + (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'." @@ -54,6 +79,7 @@ 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)) "")) + (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 " @@ -85,7 +111,7 @@ This function is called by `org-babel-execute-src-block'." (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)) - (with-temp-file in-file (insert (concat "@startuml\n" body "address@hidden"))) + (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 diff --git a/testing/lisp/test-ob-plantuml.el b/testing/lisp/test-ob-plantuml.el new file mode 100644 index 0000000..794d313 --- /dev/null +++ b/testing/lisp/test-ob-plantuml.el @@ -0,0 +1,73 @@ +;;; test-ob-plantuml.el --- tests for ob-plantuml.el + +;; Copyright (c) 2016 Thibault Marin +;; Authors: Thibault Marin + +;; This file is not part of GNU Emacs. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Code: +(unless (featurep 'ob-plantuml) + (signal 'missing-test-dependency "Support for PlantUML code blocks")) + +(ert-deftest test-ob-plantuml/single-var () + "Test file output with input variable." + (should + (string= + "@startuml +!define CLASSNAME test_class +class CLASSNAME address@hidden" + (let ((org-plantuml-jar-path nil)) + (org-test-with-temp-text + "#+name: variable_value +: test_class + +#+header: :file tmp.puml +#+header: :var CLASSNAME=variable_value +#+begin_src plantuml +class CLASSNAME +#+end_src" + (org-babel-next-src-block) + (let ((src-block-info (cdr (org-babel-get-src-block-info)))) + (org-babel-plantuml-make-body + (car src-block-info) + (car (cdr src-block-info))))))))) + + +(ert-deftest test-ob-plantuml/prologue () + "Test file output with prologue." + (should + (string= + "@startuml +skinparam classBackgroundColor #FF0000 +class test_class address@hidden" + (let ((org-plantuml-jar-path nil)) + (org-test-with-temp-text + "#+header: :file tmp.puml +#+header: :prologue skinparam classBackgroundColor #FF0000 +#+begin_src plantuml +class test_class +#+end_src" + (org-babel-next-src-block) + (let ((src-block-info (cdr (org-babel-get-src-block-info)))) + (org-babel-plantuml-make-body + (car src-block-info) + (car (cdr src-block-info))))))))) + +(provide 'test-ob-plantuml) + +;;; test-ob-plantuml.el ends here -- 2.9.3