--- a/ob-maxima.el 2011-03-17 08:37:24.977544600 +0100 +++ b/ob-maxima.el 2011-03-23 14:13:26.780223600 +0100 @@ -47,29 +47,48 @@ "Expand a block of Maxima code according to its header arguments." body) +;; This function expands the body of a source code block by doing +;; things like prepending argument definitions to the body, it should +;; be called by the `org-babel-execute:maxima' function below. +(defun org-babel-expand-body:maxima (body params &optional processed-params) + "Expand BODY according to PARAMS, return the expanded body." + (concat + (mapconcat ;; define any variables + (lambda (pair) + (format "%s : %s;" + (car pair) (org-babel-maxima-var-to-maxima (cdr pair)))) + (mapcar #'cdr (org-babel-get-header params :var)) "\n") "\n" body "\n")) + (defun org-babel-execute:maxima (body params) "Execute a block of Maxima entries with org-babel. This function is called by `org-babel-execute-src-block'." (message "executing Maxima source code block") (let* ((result-params (split-string (or (cdr (assoc :results params)) ""))) - (cmdline (cdr (assoc :cmdline params))) - (in-file (org-babel-temp-file "maxima-")) - (cmd (format "maxima --very-quiet -r 'batchload(%S)$' %s" - in-file cmdline))) - (with-temp-file in-file (insert body)) + (cmdline (cdr (assoc :cmdline params))) + (in-file (org-babel-temp-file "maxima-")) + (cmd (format "maxima --very-quiet -r 'batchload(%S)$' %s" + in-file cmdline))) + (with-temp-file in-file + (insert (org-babel-expand-body:maxima body params))) (message cmd) ((lambda (raw) ;; " | grep -v batch | grep -v 'replaced' | sed '/^$/d' " (mapconcat - #'identity - (delq nil - (mapcar (lambda (line) - (unless (or (string-match "batch" line) - (string-match "^rat: replaced .*$" line) - (= 0 (length line))) - line)) - (split-string raw "[\r\n]"))) "\n")) + #'identity + (delq nil + (mapcar (lambda (line) + (unless (or (string-match "batch" line) + (string-match "^rat: replaced .*$" line) + (= 0 (length line))) + line)) + (split-string raw "[\r\n]"))) "\n")) (org-babel-eval cmd "")))) + +(defun org-babel-maxima-var-to-maxima (var) + "Convert an elisp var into a string of template source code +specifying a var of the same value." + (format "%s" var)) + (defun org-babel-prep-session:maxima (session params) (error "Maxima does not support sessions"))