From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [babel] maxima support? Date: Tue, 15 Mar 2011 09:32:41 -0600 Message-ID: <87oc5c1js6.fsf@gmail.com> References: <5rbp23p04b.fsf@kana.aer.mw.tum.de> <87bp21ohkt.fsf@pinto.chemeng.ucl.ac.uk> <8762s7ipr7.fsf@gmail.com> <87y6503zkk.fsf@ucl.ac.uk> <874o75wfzf.fsf@gmail.com> <871v28slsr.fsf@ucl.ac.uk> <87r5a834lc.fsf@gmail.com> <87fwqompb6.fsf@ucl.ac.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from [140.186.70.92] (port=54061 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PzWEu-0007Rc-R4 for emacs-orgmode@gnu.org; Tue, 15 Mar 2011 11:32:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PzWEp-00053R-5K for emacs-orgmode@gnu.org; Tue, 15 Mar 2011 11:32:52 -0400 Received: from mail-iw0-f169.google.com ([209.85.214.169]:62437) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PzWEp-000539-0Q for emacs-orgmode@gnu.org; Tue, 15 Mar 2011 11:32:47 -0400 Received: by iwl42 with SMTP id 42so892153iwl.0 for ; Tue, 15 Mar 2011 08:32:46 -0700 (PDT) In-Reply-To: <87fwqompb6.fsf@ucl.ac.uk> (Eric S. Fraga's message of "Tue, 15 Mar 2011 14:27:41 +0000") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Eric S Fraga Cc: Litvinov Sergey , emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Eric S Fraga writes: > "Eric Schulte" writes: > > [...] > >> >> Ah, I see the problem, I used let instead of let*. Please try this >> updated version of the patch. Sorry I would test this myself, but I >> don't have Maxima installed. > > No problem at all! I'm happy to test this as many times as necessary. > > In any case, this works fine in that maxima is indeed evaluated and > output is returned. However, two problems arise: > > 1. lines of the form "rat: replaced XXX by YYY = ZZZ" are not deleted > (as used to be by the grep -v replaced hack I had in the original > ob-maxima). Essentially, we need to ignore output lines that match > the regex "^rat: replaced .*$" (I think this should do it...). > > 2. The output is converted to an org table: > The attached should fix both of these problems. Please let me know how this works. Thanks -- Eric --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-adding-support-for-Maxima-code-blocks-thanks-to-Eric.patch >From 839612902cc1a0887f4e12cf408f3c8594b01599 Mon Sep 17 00:00:00 2001 From: Eric Schulte Date: Mon, 14 Mar 2011 15:20:05 -0600 Subject: [PATCH] adding support for Maxima code blocks -- thanks to Eric Fraga --- lisp/ob-maxima.el | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lisp/org.el | 1 + 2 files changed, 81 insertions(+), 0 deletions(-) create mode 100644 lisp/ob-maxima.el diff --git a/lisp/ob-maxima.el b/lisp/ob-maxima.el new file mode 100644 index 0000000..e8b2df4 --- /dev/null +++ b/lisp/ob-maxima.el @@ -0,0 +1,80 @@ +;;; org-babel-maxima.el --- org-babel functions for maxima evaluation + +;; Copyright (c) 2009, 2010, 2011 Eric S Fraga, Eric Schulte + +;; Author: Eric S Fraga, Eric Schulte +;; Keywords: literate programming, reproducible research, maxima +;; Homepage: http://orgmode.org +;; Version: 0.01 + +;;; License: + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; Org-Babel support for evaluating maxima entries. +;; +;; This differs from most standard languages in that +;; +;; 1) there is no such thing as a "session" in maxima +;; +;; 2) we are generally only going to return output from maxima +;; +;; 3) we are adding the "cmdline" header argument +;; +;; 4) there are no variables + +;;; Code: +(require 'ob) + +(defvar org-babel-default-header-args:maxima '()) + +(defun org-babel-maxima-expand (body params) + "Expand a block of Maxima code according to its header arguments." + body) + +(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)) + (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))) "\n")) + (org-babel-eval cmd "")))) + +(defun org-babel-prep-session:maxima (session params) + (error "Maxima does not support sessions")) + +(provide 'ob-maxima) + +;; arch-tag: d86c97ac-7eab-4349-8d8b-302dd09779a8 + +;;; org-babel-maxima.el ends here diff --git a/lisp/org.el b/lisp/org.el index 96ad8ff..ae0ef5e 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -164,6 +164,7 @@ requirements) is loaded." (const :tag "Javascript" js) (const :tag "Latex" latex) (const :tag "Ledger" ledger) + (const :tag "Maxima" maxima) (const :tag "Matlab" matlab) (const :tag "Mscgen" mscgen) (const :tag "Ocaml" ocaml) -- 1.7.1 --=-=-= Content-Type: text/plain > > *** simple test > #+begin_src maxima :results value > programmode: false; > eq: x**2-1 = 0; > solution: solve(eq, x); > print(solution); > #+end_src > > #+results: > | solve: | solution: | x | = | - | 1 | x | = | 1 | [%t1, | %t2] | > > This isn't necessary appropriate in this case... but I guess this is > now a matter of adding all the normal frills given that the basic > functionality is there? > > Thanks! --=-=-=--