1
0
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-11-24 07:20:29 +00:00
org-mode/lisp/ob-maxima.el

193 lines
7.9 KiB
EmacsLisp
Raw Permalink Normal View History

Activate lexical binding in some libraries * lisp/ob-C.el (org-babel-prep-session:C): (org-babel-load-session:C): * lisp/ob-J.el: (org-babel-expand-body:J): (org-babel-execute:J): * lisp/ob-R.el: (org-babel-expand-body:R): * lisp/ob-abc.el: (org-babel-execute:abc): (org-babel-prep-session:abc): * lisp/ob-asymptote.el: (org-babel-execute:asymptote): (org-babel-prep-session:asymptote): * lisp/ob-awk.el: (org-babel-expand-body:awk): * lisp/ob-calc.el: (org-babel-expand-body:calc): * lisp/ob-clojure.el: * lisp/ob-comint.el: (org-babel-comint-in-buffer): (org-babel-comint-with-output): (org-babel-comint-eval-invisibly-and-wait-for-file): * lisp/ob-coq.el: * lisp/ob-css.el: (org-babel-execute:css): (org-babel-prep-session:css): * lisp/ob-ditaa.el: (org-babel-execute:ditaa): (org-babel-prep-session:ditaa): * lisp/ob-dot.el: (org-babel-execute:dot): (org-babel-prep-session:dot): * lisp/ob-ebnf.el: * lisp/ob-emacs-lisp.el: * lisp/ob-eval.el: * lisp/ob-forth.el: * lisp/ob-fortran.el: (org-babel-execute:fortran): (org-babel-prep-session:fortran): (org-babel-load-session:fortran): * lisp/ob-gnuplot.el: (org-babel-expand-body:gnuplot): (org-babel-prep-session:gnuplot): (org-babel-gnuplot-initiate-session): * lisp/ob-groovy.el: (org-babel-prep-session:groovy): (org-babel-groovy-initiate-session): * lisp/ob-haskell.el: (org-babel-haskell-initiate-session): * lisp/ob-io.el: (org-babel-prep-session:io): (org-babel-io-initiate-session): * lisp/ob-java.el: (org-babel-execute:java): * lisp/ob-js.el: * lisp/ob-keys.el: * lisp/ob-latex.el: (org-babel-prep-session:latex): * lisp/ob-ledger.el: (org-babel-execute:ledger): (org-babel-prep-session:ledger): * lisp/ob-lilypond.el: (org-babel-lilypond-commands): (org-babel-lilypond-process-basic): (org-babel-prep-session:lilypond): (org-babel-lilypond-parse-line-num): * lisp/ob-lisp.el: * lisp/ob-makefile.el: (org-babel-execute:makefile): (org-babel-prep-session:makefile): * lisp/ob-matlab.el: * lisp/ob-maxima.el: (org-babel-prep-session:maxima): * lisp/ob-mscgen.el: (org-babel-prep-session:mscgen): * lisp/ob-ocaml.el: (org-babel-execute:ocaml): (org-babel-prep-session:ocaml): * lisp/ob-octave.el: (org-babel-execute:octave): (org-babel-octave-initiate-session): * lisp/ob-org.el: (org-babel-prep-session:org): * lisp/ob-perl.el: (org-babel-prep-session:perl): (org-babel-perl--var-to-perl): (org-babel-perl-initiate-session): * lisp/ob-picolisp.el: (org-babel-expand-body:picolisp): (org-babel-execute:picolisp): * lisp/ob-plantuml.el: (org-babel-execute:plantuml): (org-babel-prep-session:plantuml): * lisp/ob-processing.el: (org-babel-prep-session:processing): * lisp/ob-python.el: (org-babel-python-initiate-session): * lisp/ob-ref.el: (org-babel-ref-resolve): * lisp/ob-ruby.el: (org-babel-ruby-initiate-session): * lisp/ob-sass.el: (org-babel-execute:sass): (org-babel-prep-session:sass): * lisp/ob-scala.el: (org-babel-execute:scala): (org-babel-prep-session:scala): (org-babel-scala-initiate-session): * lisp/ob-scheme.el: * lisp/ob-screen.el: (org-babel-prep-session:screen): (org-babel-screen-session-write-temp-file): (org-babel-screen-test): * lisp/ob.el: * lisp/org-colview.el: (org-columns-todo): (org-columns-set-tags-or-toggle): (org-columns-new): (org-columns-uncompile-format): (org-agenda-colview-summarize): * lisp/org-footnote.el: (electric-indent-mode): * lisp/org-indent.el: (org-indent-refresh-maybe): * lisp/org-list.el: * lisp/org-macro.el: (org-macro--collect-macros): * lisp/org-src.el: * lisp/org-table.el: (sort-fold-case): (org-table-create): (org-table-field-info): (org-table-transpose-table-at-point): (org-table-remove-rectangle-highlight): (orgtbl-create-or-convert-from-region): (org-define-lookup-function): * lisp/ox-ascii.el: (org-ascii-format-drawer-function): (org-ascii--has-caption-p): (org-ascii-bold): (org-ascii-center-block): (org-ascii-clock): (org-ascii-code): (org-ascii-dynamic-block): (org-ascii-entity): (org-ascii-example-block): (org-ascii-export-snippet): (org-ascii-export-block): (org-ascii-fixed-width): (org-ascii-footnote-reference): (org-ascii-horizontal-rule): (org-ascii-inline-src-block): (org-ascii-format-inlinetask-default): (org-ascii-italic): (org-ascii-keyword): (org-ascii-latex-environment): (org-ascii-latex-fragment): (org-ascii-line-break): (org-ascii-node-property): (org-ascii-planning): (org-ascii-quote-block): (org-ascii-radio-target): (org-ascii-special-block): (org-ascii-src-block): (org-ascii-statistics-cookie): (org-ascii-subscript): (org-ascii-superscript): (org-ascii-strike-through): (org-ascii-timestamp): (org-ascii-underline): (org-ascii-verbatim): (org-ascii-verse-block): (org-ascii-filter-headline-blank-lines): (org-ascii-filter-paragraph-spacing): (org-ascii-filter-comment-spacing): Use lexical binding.
2015-10-26 00:56:00 +00:00
;;; ob-maxima.el --- Babel Functions for Maxima -*- lexical-binding: t; -*-
;; Copyright (C) 2009-2024 Free Software Foundation, Inc.
;; Author: Eric S Fraga
2012-04-01 22:53:28 +00:00
;; Eric Schulte
;; Keywords: literate programming, reproducible research, maxima
;; URL: https://orgmode.org
;; This file is part of GNU Emacs.
;; GNU Emacs 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.
;; GNU Emacs 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. If not, see <https://www.gnu.org/licenses/>.
;;; 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 adding the "cmdline" header argument
;;; Code:
(require 'org-macs)
(org-assert-version)
(require 'ob)
* lisp/ob-maxima.el: enable use of `batch' loader and `draw' * (org-babel-header-args:maxima): Document the two new header arguments (batch and graphics-pkg) that are specific to ob-maxima. * (org-babel-maxima--command-arguments-default): A new variable storing the default command-line argument(s). This value was hard-coded in `org-babel-maxima:execute'. * (org-babel-maxima--graphic-package-options): A new variable that stores an alist of Maxima graphics packages and the Maxima code to set up that package. * (org-babel-maxima--default-epilogue): A new variable that stores an alist of the clean-up code that is run at end of a `graphical-output' or `non-graphical-output' source block. * (org-babel-maxima--output-filter-regexps): A new variable that stores a list of regexps to identify "bad" output lines to be removed from Maxima's output. Source-code comments document each regexp's purpose. Two additional regexps have been added: one filters un-wanted output from `batch' and the other removes empty input lines that `batch'-ed output may spuriously produce (actual empty input lines are syntax errors, see the new tests below). * (org-babel-maxima--output-filter): A new function that takes a single line of Maxima output. It returns nil if the line has zero length or matches a regexp in `org-babel-maxima--output-filter-regexps'; otherwise, it returns the line. This function and regexp replace the hard-coded filter in `org-babel-execute:maxima'. * (org-babel-maxima-expand): Prepare the source block for execution, depending on whether it is producing graphical output or not. In case of graphical output, use the `graphics-pkg' header to set the graphics package and use `org-babel-maxima--graphic-package-options' to set-up the package. Grovel the graphics terminal from the output filename. * (org-babel-execute:maxima): Use the :batch header argument and `org-babel-maxima--command-arguments-default' to execute the source block. Replace the existing, in-line output filter and its regexps with `org-babel-maxima--output-filter' and `org-babel-maxima--output-filter-regexps'. * testing/examples/ob-maxima-test.org: Add test examples. Include examples of the batch-related tests from testing/lisp/test-ob-maxima.el. Provide an example of the `:graphics-pkg' header argument with the `draw' package. * testing/lisp/test-ob-maxima.el: Introduce six new, batch-related test functions. Each test exercises the :batch header argument. The response to unusual inputs is tested (empty strings, strings with just whitespace, input with the `:lisp' reader, and two syntax-related errors). link: https://list.orgmode.org/87cyz1ivzw.fsf@t14.reltub.ca/
2023-09-19 18:36:06 +00:00
(defconst org-babel-header-args:maxima
'((batch . ((batchload batch load)))
(graphics-pkg . ((plot draw))))
* lisp/ob-maxima.el: enable use of `batch' loader and `draw' * (org-babel-header-args:maxima): Document the two new header arguments (batch and graphics-pkg) that are specific to ob-maxima. * (org-babel-maxima--command-arguments-default): A new variable storing the default command-line argument(s). This value was hard-coded in `org-babel-maxima:execute'. * (org-babel-maxima--graphic-package-options): A new variable that stores an alist of Maxima graphics packages and the Maxima code to set up that package. * (org-babel-maxima--default-epilogue): A new variable that stores an alist of the clean-up code that is run at end of a `graphical-output' or `non-graphical-output' source block. * (org-babel-maxima--output-filter-regexps): A new variable that stores a list of regexps to identify "bad" output lines to be removed from Maxima's output. Source-code comments document each regexp's purpose. Two additional regexps have been added: one filters un-wanted output from `batch' and the other removes empty input lines that `batch'-ed output may spuriously produce (actual empty input lines are syntax errors, see the new tests below). * (org-babel-maxima--output-filter): A new function that takes a single line of Maxima output. It returns nil if the line has zero length or matches a regexp in `org-babel-maxima--output-filter-regexps'; otherwise, it returns the line. This function and regexp replace the hard-coded filter in `org-babel-execute:maxima'. * (org-babel-maxima-expand): Prepare the source block for execution, depending on whether it is producing graphical output or not. In case of graphical output, use the `graphics-pkg' header to set the graphics package and use `org-babel-maxima--graphic-package-options' to set-up the package. Grovel the graphics terminal from the output filename. * (org-babel-execute:maxima): Use the :batch header argument and `org-babel-maxima--command-arguments-default' to execute the source block. Replace the existing, in-line output filter and its regexps with `org-babel-maxima--output-filter' and `org-babel-maxima--output-filter-regexps'. * testing/examples/ob-maxima-test.org: Add test examples. Include examples of the batch-related tests from testing/lisp/test-ob-maxima.el. Provide an example of the `:graphics-pkg' header argument with the `draw' package. * testing/lisp/test-ob-maxima.el: Introduce six new, batch-related test functions. Each test exercises the :batch header argument. The response to unusual inputs is tested (empty strings, strings with just whitespace, input with the `:lisp' reader, and two syntax-related errors). link: https://list.orgmode.org/87cyz1ivzw.fsf@t14.reltub.ca/
2023-09-19 18:36:06 +00:00
"Maxima-specific header arguments.")
(defvar org-babel-tangle-lang-exts)
(add-to-list 'org-babel-tangle-lang-exts '("maxima" . "max"))
(defvar org-babel-default-header-args:maxima '())
(defcustom org-babel-maxima-command
(if (boundp 'maxima-command) maxima-command "maxima")
"Command used to call maxima on the shell."
:group 'org-babel
:type 'string)
* lisp/ob-maxima.el: enable use of `batch' loader and `draw' * (org-babel-header-args:maxima): Document the two new header arguments (batch and graphics-pkg) that are specific to ob-maxima. * (org-babel-maxima--command-arguments-default): A new variable storing the default command-line argument(s). This value was hard-coded in `org-babel-maxima:execute'. * (org-babel-maxima--graphic-package-options): A new variable that stores an alist of Maxima graphics packages and the Maxima code to set up that package. * (org-babel-maxima--default-epilogue): A new variable that stores an alist of the clean-up code that is run at end of a `graphical-output' or `non-graphical-output' source block. * (org-babel-maxima--output-filter-regexps): A new variable that stores a list of regexps to identify "bad" output lines to be removed from Maxima's output. Source-code comments document each regexp's purpose. Two additional regexps have been added: one filters un-wanted output from `batch' and the other removes empty input lines that `batch'-ed output may spuriously produce (actual empty input lines are syntax errors, see the new tests below). * (org-babel-maxima--output-filter): A new function that takes a single line of Maxima output. It returns nil if the line has zero length or matches a regexp in `org-babel-maxima--output-filter-regexps'; otherwise, it returns the line. This function and regexp replace the hard-coded filter in `org-babel-execute:maxima'. * (org-babel-maxima-expand): Prepare the source block for execution, depending on whether it is producing graphical output or not. In case of graphical output, use the `graphics-pkg' header to set the graphics package and use `org-babel-maxima--graphic-package-options' to set-up the package. Grovel the graphics terminal from the output filename. * (org-babel-execute:maxima): Use the :batch header argument and `org-babel-maxima--command-arguments-default' to execute the source block. Replace the existing, in-line output filter and its regexps with `org-babel-maxima--output-filter' and `org-babel-maxima--output-filter-regexps'. * testing/examples/ob-maxima-test.org: Add test examples. Include examples of the batch-related tests from testing/lisp/test-ob-maxima.el. Provide an example of the `:graphics-pkg' header argument with the `draw' package. * testing/lisp/test-ob-maxima.el: Introduce six new, batch-related test functions. Each test exercises the :batch header argument. The response to unusual inputs is tested (empty strings, strings with just whitespace, input with the `:lisp' reader, and two syntax-related errors). link: https://list.orgmode.org/87cyz1ivzw.fsf@t14.reltub.ca/
2023-09-19 18:36:06 +00:00
(defvar org-babel-maxima--command-arguments-default
"--very-quiet"
"Command-line arguments sent to Maxima by default.
If the `:batch' header argument is set to `batchload' or unset,
then the `:cmdline' header argument is appended to this default;
otherwise, if the `:cmdline' argument is set, it over-rides this
default. See `org-babel-maxima-command' and
`org-babel-execute:maxima'.")
(defvar org-babel-maxima--graphic-package-options
'((plot . "(set_plot_option ('[gnuplot_term, %s]), set_plot_option ('[gnuplot_out_file, %S]))$")
(draw . "(load(draw), set_draw_defaults(terminal='%s,file_name=%S))$"))
"An alist of graphics packages and Maxima code.
Each element is a cons (PACKAGE-NAME . FORMAT-STRING).
FORMAT-STRING contains Maxima code to configure the graphics
package; it must contain `%s' to set the terminal and `%S' to set
the filename, in that order. The default graphics package is
`plot'; `draw' is also supported. See
`org-babel-maxima-expand'.")
(defvar org-babel-maxima--default-epilogue
'((graphical-output . "gnuplot_close ()$")
(non-graphical-output . ""))
"The final Maxima code executed in a source block.
An alist with the epilogue for graphical and non-graphical
output. See `org-babel-maxima-expand'.")
(defun org-babel-maxima-expand (body params)
"Expand Maxima BODY according to its header arguments from PARAMS."
* lisp/ob-maxima.el: enable use of `batch' loader and `draw' * (org-babel-header-args:maxima): Document the two new header arguments (batch and graphics-pkg) that are specific to ob-maxima. * (org-babel-maxima--command-arguments-default): A new variable storing the default command-line argument(s). This value was hard-coded in `org-babel-maxima:execute'. * (org-babel-maxima--graphic-package-options): A new variable that stores an alist of Maxima graphics packages and the Maxima code to set up that package. * (org-babel-maxima--default-epilogue): A new variable that stores an alist of the clean-up code that is run at end of a `graphical-output' or `non-graphical-output' source block. * (org-babel-maxima--output-filter-regexps): A new variable that stores a list of regexps to identify "bad" output lines to be removed from Maxima's output. Source-code comments document each regexp's purpose. Two additional regexps have been added: one filters un-wanted output from `batch' and the other removes empty input lines that `batch'-ed output may spuriously produce (actual empty input lines are syntax errors, see the new tests below). * (org-babel-maxima--output-filter): A new function that takes a single line of Maxima output. It returns nil if the line has zero length or matches a regexp in `org-babel-maxima--output-filter-regexps'; otherwise, it returns the line. This function and regexp replace the hard-coded filter in `org-babel-execute:maxima'. * (org-babel-maxima-expand): Prepare the source block for execution, depending on whether it is producing graphical output or not. In case of graphical output, use the `graphics-pkg' header to set the graphics package and use `org-babel-maxima--graphic-package-options' to set-up the package. Grovel the graphics terminal from the output filename. * (org-babel-execute:maxima): Use the :batch header argument and `org-babel-maxima--command-arguments-default' to execute the source block. Replace the existing, in-line output filter and its regexps with `org-babel-maxima--output-filter' and `org-babel-maxima--output-filter-regexps'. * testing/examples/ob-maxima-test.org: Add test examples. Include examples of the batch-related tests from testing/lisp/test-ob-maxima.el. Provide an example of the `:graphics-pkg' header argument with the `draw' package. * testing/lisp/test-ob-maxima.el: Introduce six new, batch-related test functions. Each test exercises the :batch header argument. The response to unusual inputs is tested (empty strings, strings with just whitespace, input with the `:lisp' reader, and two syntax-related errors). link: https://list.orgmode.org/87cyz1ivzw.fsf@t14.reltub.ca/
2023-09-19 18:36:06 +00:00
(let* ((vars (org-babel--get-vars params))
(graphic-file (ignore-errors (org-babel-graphical-output-file params)))
(epilogue (cdr (assq :epilogue params)))
(prologue (cdr (assq :prologue params))))
(mapconcat 'identity
* lisp/ob-maxima.el: enable use of `batch' loader and `draw' * (org-babel-header-args:maxima): Document the two new header arguments (batch and graphics-pkg) that are specific to ob-maxima. * (org-babel-maxima--command-arguments-default): A new variable storing the default command-line argument(s). This value was hard-coded in `org-babel-maxima:execute'. * (org-babel-maxima--graphic-package-options): A new variable that stores an alist of Maxima graphics packages and the Maxima code to set up that package. * (org-babel-maxima--default-epilogue): A new variable that stores an alist of the clean-up code that is run at end of a `graphical-output' or `non-graphical-output' source block. * (org-babel-maxima--output-filter-regexps): A new variable that stores a list of regexps to identify "bad" output lines to be removed from Maxima's output. Source-code comments document each regexp's purpose. Two additional regexps have been added: one filters un-wanted output from `batch' and the other removes empty input lines that `batch'-ed output may spuriously produce (actual empty input lines are syntax errors, see the new tests below). * (org-babel-maxima--output-filter): A new function that takes a single line of Maxima output. It returns nil if the line has zero length or matches a regexp in `org-babel-maxima--output-filter-regexps'; otherwise, it returns the line. This function and regexp replace the hard-coded filter in `org-babel-execute:maxima'. * (org-babel-maxima-expand): Prepare the source block for execution, depending on whether it is producing graphical output or not. In case of graphical output, use the `graphics-pkg' header to set the graphics package and use `org-babel-maxima--graphic-package-options' to set-up the package. Grovel the graphics terminal from the output filename. * (org-babel-execute:maxima): Use the :batch header argument and `org-babel-maxima--command-arguments-default' to execute the source block. Replace the existing, in-line output filter and its regexps with `org-babel-maxima--output-filter' and `org-babel-maxima--output-filter-regexps'. * testing/examples/ob-maxima-test.org: Add test examples. Include examples of the batch-related tests from testing/lisp/test-ob-maxima.el. Provide an example of the `:graphics-pkg' header argument with the `draw' package. * testing/lisp/test-ob-maxima.el: Introduce six new, batch-related test functions. Each test exercises the :batch header argument. The response to unusual inputs is tested (empty strings, strings with just whitespace, input with the `:lisp' reader, and two syntax-related errors). link: https://list.orgmode.org/87cyz1ivzw.fsf@t14.reltub.ca/
2023-09-19 18:36:06 +00:00
(delq nil
(list
;; Any code from the specified prologue at the start.
prologue
;; graphic output
(if graphic-file
(let* ((graphics-pkg (intern (or (cdr (assq :graphics-pkg params)) "plot")))
(graphic-format-string (cdr (assq graphics-pkg org-babel-maxima--graphic-package-options)))
(graphic-terminal (file-name-extension graphic-file))
(graphic-file (if (eq graphics-pkg 'plot) graphic-file (file-name-sans-extension graphic-file))))
(format graphic-format-string graphic-terminal graphic-file)))
;; variables
(mapconcat 'org-babel-maxima-var-to-maxima vars "\n")
;; body
body
;; Any code from the specified epilogue at the end.
epilogue
(if graphic-file
(cdr (assq :graphical-output org-babel-maxima--default-epilogue))
(cdr (assq :non-graphical-output org-babel-maxima--default-epilogue)))))
"\n")))
* lisp/ob-maxima.el: enable use of `batch' loader and `draw' * (org-babel-header-args:maxima): Document the two new header arguments (batch and graphics-pkg) that are specific to ob-maxima. * (org-babel-maxima--command-arguments-default): A new variable storing the default command-line argument(s). This value was hard-coded in `org-babel-maxima:execute'. * (org-babel-maxima--graphic-package-options): A new variable that stores an alist of Maxima graphics packages and the Maxima code to set up that package. * (org-babel-maxima--default-epilogue): A new variable that stores an alist of the clean-up code that is run at end of a `graphical-output' or `non-graphical-output' source block. * (org-babel-maxima--output-filter-regexps): A new variable that stores a list of regexps to identify "bad" output lines to be removed from Maxima's output. Source-code comments document each regexp's purpose. Two additional regexps have been added: one filters un-wanted output from `batch' and the other removes empty input lines that `batch'-ed output may spuriously produce (actual empty input lines are syntax errors, see the new tests below). * (org-babel-maxima--output-filter): A new function that takes a single line of Maxima output. It returns nil if the line has zero length or matches a regexp in `org-babel-maxima--output-filter-regexps'; otherwise, it returns the line. This function and regexp replace the hard-coded filter in `org-babel-execute:maxima'. * (org-babel-maxima-expand): Prepare the source block for execution, depending on whether it is producing graphical output or not. In case of graphical output, use the `graphics-pkg' header to set the graphics package and use `org-babel-maxima--graphic-package-options' to set-up the package. Grovel the graphics terminal from the output filename. * (org-babel-execute:maxima): Use the :batch header argument and `org-babel-maxima--command-arguments-default' to execute the source block. Replace the existing, in-line output filter and its regexps with `org-babel-maxima--output-filter' and `org-babel-maxima--output-filter-regexps'. * testing/examples/ob-maxima-test.org: Add test examples. Include examples of the batch-related tests from testing/lisp/test-ob-maxima.el. Provide an example of the `:graphics-pkg' header argument with the `draw' package. * testing/lisp/test-ob-maxima.el: Introduce six new, batch-related test functions. Each test exercises the :batch header argument. The response to unusual inputs is tested (empty strings, strings with just whitespace, input with the `:lisp' reader, and two syntax-related errors). link: https://list.orgmode.org/87cyz1ivzw.fsf@t14.reltub.ca/
2023-09-19 18:36:06 +00:00
(defvar org-babel-maxima--output-filter-regexps
'("batch" ;; remove the `batch' or `batchload' line
"^rat: replaced .*$" ;; remove notices from `rat'
"^;;; Loading #P" ;; remove notices from the lisp implementation
"^read and interpret" ;; remove notice from `batch'
"^(%\\([i]-?[0-9]+\\))[ ]$" ;; remove empty input lines from `batch'-ing
)
"Regexps to remove extraneous lines from Maxima's output.
See `org-babel-maxima--output-filter'.")
(defun org-babel-maxima--output-filter (line)
"Filter empty or undesired lines from Maxima output.
Return nil if LINE is zero-length or it matches a regexp in
`org-babel-maxima--output-filter'; otherwise, return LINE."
(unless (or (= 0 (length line))
(cl-some #'(lambda(r) (string-match r line))
org-babel-maxima--output-filter-regexps))
line))
(defun org-babel-execute:maxima (body params)
"Execute Maxima BODY according to PARAMS.
Backport changes from Emacs revs 115081 and 115082 2013-11-12 Stefan Monnier <monnier@iro.umontreal.ca> Address some byte-compiler warnings. * ob-abc.el (org-babel-expand-body:abc): Use dolist. (org-babel-execute:abc): Fix regexp quoting. * ob-calc.el (org--var-syms): Rename from `var-syms'. * ob-lilypond.el (ly-compile-lilyfile): Remove redundant let-binding. * ob-table.el (sbe): Move debug declaration. * org-clock.el (org--msg-extra): Rename from `msg-extra'. * org.el (org-version): Avoid var name starting with _. (org-inhibit-startup, org-called-with-limited-levels) (org-link-search-inhibit-query, org-time-was-given) (org-end-time-was-given, org-def, org-defdecode, org-with-time): * org-colview.el (org-agenda-overriding-columns-format): * org-agenda.el (org-agenda-multi, org-depend-tag-blocked) (org-agenda-show-log-scoped): * ob-python.el (py-which-bufname, python-shell-buffer-name): * ob-haskell.el (org-export-copy-to-kill-ring): * ob-exp.el (org-link-search-inhibit-query): * ob-R.el (ess-eval-visibly-p): * ob-core.el (org-src-window-setup): Declare before use. (org-babel-expand-noweb-references): Remove unused `blocks-in-buffer'. * ox-odt.el (org-odt-hfy-face-to-css): * org-src.el (org-src-associate-babel-session, org-src-get-lang-mode): * org-bibtex.el (org-bibtex-get, org-bibtex-ask, org-bibtex) (org-bibtex-check): * ob-tangle.el (org-babel-tangle, org-babel-spec-to-string) (org-babel-tangle-single-block, org-babel-tangle-comment-links): * ob-table.el (sbe): * ob-sqlite.el (org-babel-sqlite-expand-vars): * ob-sql.el (org-babel-sql-expand-vars): * ob-shen.el (org-babel-execute:shen): * ob-sh.el (org-babel-execute:sh, org-babel-sh-evaluate): * ob-scala.el (org-babel-scala-evaluate): * ob-ruby.el (org-babel-ruby-table-or-string) (org-babel-ruby-evaluate): * ob-python.el (org-babel-python-table-or-string) (org-babel-python-evaluate-external-process) (org-babel-python-evaluate-session): * ob-picolisp.el (org-babel-execute:picolisp): * ob-perl.el (org-babel-perl-evaluate): * ob-maxima.el (org-babel-execute:maxima): * ob-lisp.el (org-babel-execute:lisp): * ob-java.el (org-babel-execute:java): * ob-io.el (org-babel-io-evaluate): * ob-haskell.el (org-babel-execute:haskell): * ob-fortran.el (org-babel-execute:fortran): * ob-exp.el (org-babel-exp-code): * ob-emacs-lisp.el (org-babel-execute:emacs-lisp): * ob-ditaa.el (org-babel-execute:ditaa): * ob-core.el (org-babel-execute-src-block, org-babel-sha1-hash) (org-babel-parse-header-arguments, org-babel-reassemble-table) (org-babel-goto-src-block-head, org-babel-mark-block) (org-babel-expand-noweb-references, org-babel-script-escape) (org-babel-process-file-name): * ob-clojure.el (org-babel-execute:clojure): * ob-calc.el (org-babel-execute:calc): * ob-awk.el (org-babel-execute:awk): * ob-abc.el (org-babel-execute:abc): * ob-R.el (org-babel-expand-body:R): * ob-C.el (org-babel-C-execute): Avoid deprecated ((lambda) ...). 2013-11-12 Glenn Morris <rgm@gnu.org> * ox-html.el (org-html-scripts): Add 2013 to copyright years. (org-html-infojs-template): Copyright holder to FSF.
2013-11-12 19:57:31 +00:00
This function is called by `org-babel-execute-src-block'."
Use assq instead of assoc for :keywords * lisp/ob-C.el (org-babel-C-execute): * lisp/ob-J.el (org-babel-execute:J): * lisp/ob-R.el (org-babel-edit-prep:R): (org-babel-expand-body:R): (org-babel-execute:R): (org-babel-variable-assignments:R): (org-babel-R-initiate-session): * lisp/ob-abc.el (org-babel-execute:abc): * lisp/ob-asymptote.el (org-babel-execute:asymptote): * lisp/ob-awk.el (org-babel-execute:awk): * lisp/ob-clojure.el (org-babel-expand-body:clojure): (org-babel-execute:clojure): * lisp/ob-core.el (org-babel-expand-body:generic): (org-babel-load-in-session): (org-babel-initiate-session): (org-babel-open-src-block-result): (org-babel-process-params): (org-babel-insert-result): (org-babel-expand-noweb-references): * lisp/ob-ditaa.el (org-babel-execute:ditaa): * lisp/ob-dot.el (org-babel-execute:dot): * lisp/ob-ebnf.el (org-babel-execute:ebnf): * lisp/ob-emacs-lisp.el (org-babel-expand-body:emacs-lisp): (org-babel-execute:emacs-lisp): * lisp/ob-exp.el (org-babel-exp-process-buffer): (org-babel-exp-do-export): (org-babel-exp-code): * lisp/ob-forth.el (org-babel-execute:forth): * lisp/ob-fortran.el (org-babel-execute:fortran): * lisp/ob-gnuplot.el (org-babel-gnuplot-process-vars): (org-babel-expand-body:gnuplot): (org-babel-execute:gnuplot): * lisp/ob-groovy.el (org-babel-execute:groovy): * lisp/ob-haskell.el (org-babel-execute:haskell): * lisp/ob-io.el (org-babel-execute:io): * lisp/ob-java.el (org-babel-execute:java): * lisp/ob-js.el (org-babel-execute:js): * lisp/ob-latex.el (org-babel-execute:latex): * lisp/ob-ledger.el (org-babel-execute:ledger): * lisp/ob-lilypond.el (org-babel-lilypond-process-basic): * lisp/ob-lisp.el (org-babel-expand-body:lisp): (org-babel-execute:lisp): * lisp/ob-lua.el (org-babel-execute:lua): * lisp/ob-maxima.el (org-babel-execute:maxima): * lisp/ob-mscgen.el (org-babel-execute:mscgen): * lisp/ob-ocaml.el (org-babel-execute:ocaml): * lisp/ob-octave.el (org-babel-execute:octave): * lisp/ob-org.el (org-babel-execute:org): * lisp/ob-perl.el (org-babel-execute:perl): * lisp/ob-picolisp.el (org-babel-execute:picolisp): * lisp/ob-plantuml.el (org-babel-execute:plantuml): * lisp/ob-python.el (org-babel-execute:python): * lisp/ob-ruby.el (org-babel-execute:ruby): * lisp/ob-sass.el (org-babel-execute:sass): * lisp/ob-scala.el (org-babel-execute:scala): * lisp/ob-scheme.el (org-babel-execute:scheme): * lisp/ob-screen.el (org-babel-execute:screen): (org-babel-prep-session:screen): * lisp/ob-shell.el (org-babel-execute:shell): (org-babel-variable-assignments:shell): (org-babel-sh-evaluate): * lisp/ob-shen.el (org-babel-execute:shen): * lisp/ob-sql.el (org-babel-execute:sql): * lisp/ob-sqlite.el (org-babel-execute:sqlite): * lisp/ob-tangle.el (org-babel-tangle): (org-babel-tangle-single-block): * lisp/org-src.el (org-src-associate-babel-session): * lisp/org.el (org-next-link): Use `assq' instead of `assoc' with :keyword keys.
2016-09-22 17:45:15 +00:00
(let ((result-params (split-string (or (cdr (assq :results params)) "")))
(result
Use assq instead of assoc for :keywords * lisp/ob-C.el (org-babel-C-execute): * lisp/ob-J.el (org-babel-execute:J): * lisp/ob-R.el (org-babel-edit-prep:R): (org-babel-expand-body:R): (org-babel-execute:R): (org-babel-variable-assignments:R): (org-babel-R-initiate-session): * lisp/ob-abc.el (org-babel-execute:abc): * lisp/ob-asymptote.el (org-babel-execute:asymptote): * lisp/ob-awk.el (org-babel-execute:awk): * lisp/ob-clojure.el (org-babel-expand-body:clojure): (org-babel-execute:clojure): * lisp/ob-core.el (org-babel-expand-body:generic): (org-babel-load-in-session): (org-babel-initiate-session): (org-babel-open-src-block-result): (org-babel-process-params): (org-babel-insert-result): (org-babel-expand-noweb-references): * lisp/ob-ditaa.el (org-babel-execute:ditaa): * lisp/ob-dot.el (org-babel-execute:dot): * lisp/ob-ebnf.el (org-babel-execute:ebnf): * lisp/ob-emacs-lisp.el (org-babel-expand-body:emacs-lisp): (org-babel-execute:emacs-lisp): * lisp/ob-exp.el (org-babel-exp-process-buffer): (org-babel-exp-do-export): (org-babel-exp-code): * lisp/ob-forth.el (org-babel-execute:forth): * lisp/ob-fortran.el (org-babel-execute:fortran): * lisp/ob-gnuplot.el (org-babel-gnuplot-process-vars): (org-babel-expand-body:gnuplot): (org-babel-execute:gnuplot): * lisp/ob-groovy.el (org-babel-execute:groovy): * lisp/ob-haskell.el (org-babel-execute:haskell): * lisp/ob-io.el (org-babel-execute:io): * lisp/ob-java.el (org-babel-execute:java): * lisp/ob-js.el (org-babel-execute:js): * lisp/ob-latex.el (org-babel-execute:latex): * lisp/ob-ledger.el (org-babel-execute:ledger): * lisp/ob-lilypond.el (org-babel-lilypond-process-basic): * lisp/ob-lisp.el (org-babel-expand-body:lisp): (org-babel-execute:lisp): * lisp/ob-lua.el (org-babel-execute:lua): * lisp/ob-maxima.el (org-babel-execute:maxima): * lisp/ob-mscgen.el (org-babel-execute:mscgen): * lisp/ob-ocaml.el (org-babel-execute:ocaml): * lisp/ob-octave.el (org-babel-execute:octave): * lisp/ob-org.el (org-babel-execute:org): * lisp/ob-perl.el (org-babel-execute:perl): * lisp/ob-picolisp.el (org-babel-execute:picolisp): * lisp/ob-plantuml.el (org-babel-execute:plantuml): * lisp/ob-python.el (org-babel-execute:python): * lisp/ob-ruby.el (org-babel-execute:ruby): * lisp/ob-sass.el (org-babel-execute:sass): * lisp/ob-scala.el (org-babel-execute:scala): * lisp/ob-scheme.el (org-babel-execute:scheme): * lisp/ob-screen.el (org-babel-execute:screen): (org-babel-prep-session:screen): * lisp/ob-shell.el (org-babel-execute:shell): (org-babel-variable-assignments:shell): (org-babel-sh-evaluate): * lisp/ob-shen.el (org-babel-execute:shen): * lisp/ob-sql.el (org-babel-execute:sql): * lisp/ob-sqlite.el (org-babel-execute:sqlite): * lisp/ob-tangle.el (org-babel-tangle): (org-babel-tangle-single-block): * lisp/org-src.el (org-src-associate-babel-session): * lisp/org.el (org-next-link): Use `assq' instead of `assoc' with :keyword keys.
2016-09-22 17:45:15 +00:00
(let* ((cmdline (or (cdr (assq :cmdline params)) ""))
* lisp/ob-maxima.el: enable use of `batch' loader and `draw' * (org-babel-header-args:maxima): Document the two new header arguments (batch and graphics-pkg) that are specific to ob-maxima. * (org-babel-maxima--command-arguments-default): A new variable storing the default command-line argument(s). This value was hard-coded in `org-babel-maxima:execute'. * (org-babel-maxima--graphic-package-options): A new variable that stores an alist of Maxima graphics packages and the Maxima code to set up that package. * (org-babel-maxima--default-epilogue): A new variable that stores an alist of the clean-up code that is run at end of a `graphical-output' or `non-graphical-output' source block. * (org-babel-maxima--output-filter-regexps): A new variable that stores a list of regexps to identify "bad" output lines to be removed from Maxima's output. Source-code comments document each regexp's purpose. Two additional regexps have been added: one filters un-wanted output from `batch' and the other removes empty input lines that `batch'-ed output may spuriously produce (actual empty input lines are syntax errors, see the new tests below). * (org-babel-maxima--output-filter): A new function that takes a single line of Maxima output. It returns nil if the line has zero length or matches a regexp in `org-babel-maxima--output-filter-regexps'; otherwise, it returns the line. This function and regexp replace the hard-coded filter in `org-babel-execute:maxima'. * (org-babel-maxima-expand): Prepare the source block for execution, depending on whether it is producing graphical output or not. In case of graphical output, use the `graphics-pkg' header to set the graphics package and use `org-babel-maxima--graphic-package-options' to set-up the package. Grovel the graphics terminal from the output filename. * (org-babel-execute:maxima): Use the :batch header argument and `org-babel-maxima--command-arguments-default' to execute the source block. Replace the existing, in-line output filter and its regexps with `org-babel-maxima--output-filter' and `org-babel-maxima--output-filter-regexps'. * testing/examples/ob-maxima-test.org: Add test examples. Include examples of the batch-related tests from testing/lisp/test-ob-maxima.el. Provide an example of the `:graphics-pkg' header argument with the `draw' package. * testing/lisp/test-ob-maxima.el: Introduce six new, batch-related test functions. Each test exercises the :batch header argument. The response to unusual inputs is tested (empty strings, strings with just whitespace, input with the `:lisp' reader, and two syntax-related errors). link: https://list.orgmode.org/87cyz1ivzw.fsf@t14.reltub.ca/
2023-09-19 18:36:06 +00:00
(batch/load (or (cdr (assq :batch params)) "batchload"))
(cmdline (if (or (equal cmdline "") (equal batch/load "batchload"))
;; legacy behavior:
* lisp/ob-maxima.el: enable use of `batch' loader and `draw' * (org-babel-header-args:maxima): Document the two new header arguments (batch and graphics-pkg) that are specific to ob-maxima. * (org-babel-maxima--command-arguments-default): A new variable storing the default command-line argument(s). This value was hard-coded in `org-babel-maxima:execute'. * (org-babel-maxima--graphic-package-options): A new variable that stores an alist of Maxima graphics packages and the Maxima code to set up that package. * (org-babel-maxima--default-epilogue): A new variable that stores an alist of the clean-up code that is run at end of a `graphical-output' or `non-graphical-output' source block. * (org-babel-maxima--output-filter-regexps): A new variable that stores a list of regexps to identify "bad" output lines to be removed from Maxima's output. Source-code comments document each regexp's purpose. Two additional regexps have been added: one filters un-wanted output from `batch' and the other removes empty input lines that `batch'-ed output may spuriously produce (actual empty input lines are syntax errors, see the new tests below). * (org-babel-maxima--output-filter): A new function that takes a single line of Maxima output. It returns nil if the line has zero length or matches a regexp in `org-babel-maxima--output-filter-regexps'; otherwise, it returns the line. This function and regexp replace the hard-coded filter in `org-babel-execute:maxima'. * (org-babel-maxima-expand): Prepare the source block for execution, depending on whether it is producing graphical output or not. In case of graphical output, use the `graphics-pkg' header to set the graphics package and use `org-babel-maxima--graphic-package-options' to set-up the package. Grovel the graphics terminal from the output filename. * (org-babel-execute:maxima): Use the :batch header argument and `org-babel-maxima--command-arguments-default' to execute the source block. Replace the existing, in-line output filter and its regexps with `org-babel-maxima--output-filter' and `org-babel-maxima--output-filter-regexps'. * testing/examples/ob-maxima-test.org: Add test examples. Include examples of the batch-related tests from testing/lisp/test-ob-maxima.el. Provide an example of the `:graphics-pkg' header argument with the `draw' package. * testing/lisp/test-ob-maxima.el: Introduce six new, batch-related test functions. Each test exercises the :batch header argument. The response to unusual inputs is tested (empty strings, strings with just whitespace, input with the `:lisp' reader, and two syntax-related errors). link: https://list.orgmode.org/87cyz1ivzw.fsf@t14.reltub.ca/
2023-09-19 18:36:06 +00:00
;; ensure that --very-quiet is on command-line by default
(concat cmdline " " org-babel-maxima--command-arguments-default)
;; if using an alternate loader, :cmdline overwrites default
cmdline))
(in-file (org-babel-temp-file "maxima-" ".max"))
(cmd (format "%s -r %s %s"
org-babel-maxima-command
(shell-quote-argument
* lisp/ob-maxima.el: enable use of `batch' loader and `draw' * (org-babel-header-args:maxima): Document the two new header arguments (batch and graphics-pkg) that are specific to ob-maxima. * (org-babel-maxima--command-arguments-default): A new variable storing the default command-line argument(s). This value was hard-coded in `org-babel-maxima:execute'. * (org-babel-maxima--graphic-package-options): A new variable that stores an alist of Maxima graphics packages and the Maxima code to set up that package. * (org-babel-maxima--default-epilogue): A new variable that stores an alist of the clean-up code that is run at end of a `graphical-output' or `non-graphical-output' source block. * (org-babel-maxima--output-filter-regexps): A new variable that stores a list of regexps to identify "bad" output lines to be removed from Maxima's output. Source-code comments document each regexp's purpose. Two additional regexps have been added: one filters un-wanted output from `batch' and the other removes empty input lines that `batch'-ed output may spuriously produce (actual empty input lines are syntax errors, see the new tests below). * (org-babel-maxima--output-filter): A new function that takes a single line of Maxima output. It returns nil if the line has zero length or matches a regexp in `org-babel-maxima--output-filter-regexps'; otherwise, it returns the line. This function and regexp replace the hard-coded filter in `org-babel-execute:maxima'. * (org-babel-maxima-expand): Prepare the source block for execution, depending on whether it is producing graphical output or not. In case of graphical output, use the `graphics-pkg' header to set the graphics package and use `org-babel-maxima--graphic-package-options' to set-up the package. Grovel the graphics terminal from the output filename. * (org-babel-execute:maxima): Use the :batch header argument and `org-babel-maxima--command-arguments-default' to execute the source block. Replace the existing, in-line output filter and its regexps with `org-babel-maxima--output-filter' and `org-babel-maxima--output-filter-regexps'. * testing/examples/ob-maxima-test.org: Add test examples. Include examples of the batch-related tests from testing/lisp/test-ob-maxima.el. Provide an example of the `:graphics-pkg' header argument with the `draw' package. * testing/lisp/test-ob-maxima.el: Introduce six new, batch-related test functions. Each test exercises the :batch header argument. The response to unusual inputs is tested (empty strings, strings with just whitespace, input with the `:lisp' reader, and two syntax-related errors). link: https://list.orgmode.org/87cyz1ivzw.fsf@t14.reltub.ca/
2023-09-19 18:36:06 +00:00
;; bind linenum to 0 so the first line
;; of in-file has line number 1
(format "(linenum:0, %s(%S))$" batch/load in-file))
cmdline)))
(with-temp-file in-file (insert (org-babel-maxima-expand body params)))
Backport changes from Emacs revs 115081 and 115082 2013-11-12 Stefan Monnier <monnier@iro.umontreal.ca> Address some byte-compiler warnings. * ob-abc.el (org-babel-expand-body:abc): Use dolist. (org-babel-execute:abc): Fix regexp quoting. * ob-calc.el (org--var-syms): Rename from `var-syms'. * ob-lilypond.el (ly-compile-lilyfile): Remove redundant let-binding. * ob-table.el (sbe): Move debug declaration. * org-clock.el (org--msg-extra): Rename from `msg-extra'. * org.el (org-version): Avoid var name starting with _. (org-inhibit-startup, org-called-with-limited-levels) (org-link-search-inhibit-query, org-time-was-given) (org-end-time-was-given, org-def, org-defdecode, org-with-time): * org-colview.el (org-agenda-overriding-columns-format): * org-agenda.el (org-agenda-multi, org-depend-tag-blocked) (org-agenda-show-log-scoped): * ob-python.el (py-which-bufname, python-shell-buffer-name): * ob-haskell.el (org-export-copy-to-kill-ring): * ob-exp.el (org-link-search-inhibit-query): * ob-R.el (ess-eval-visibly-p): * ob-core.el (org-src-window-setup): Declare before use. (org-babel-expand-noweb-references): Remove unused `blocks-in-buffer'. * ox-odt.el (org-odt-hfy-face-to-css): * org-src.el (org-src-associate-babel-session, org-src-get-lang-mode): * org-bibtex.el (org-bibtex-get, org-bibtex-ask, org-bibtex) (org-bibtex-check): * ob-tangle.el (org-babel-tangle, org-babel-spec-to-string) (org-babel-tangle-single-block, org-babel-tangle-comment-links): * ob-table.el (sbe): * ob-sqlite.el (org-babel-sqlite-expand-vars): * ob-sql.el (org-babel-sql-expand-vars): * ob-shen.el (org-babel-execute:shen): * ob-sh.el (org-babel-execute:sh, org-babel-sh-evaluate): * ob-scala.el (org-babel-scala-evaluate): * ob-ruby.el (org-babel-ruby-table-or-string) (org-babel-ruby-evaluate): * ob-python.el (org-babel-python-table-or-string) (org-babel-python-evaluate-external-process) (org-babel-python-evaluate-session): * ob-picolisp.el (org-babel-execute:picolisp): * ob-perl.el (org-babel-perl-evaluate): * ob-maxima.el (org-babel-execute:maxima): * ob-lisp.el (org-babel-execute:lisp): * ob-java.el (org-babel-execute:java): * ob-io.el (org-babel-io-evaluate): * ob-haskell.el (org-babel-execute:haskell): * ob-fortran.el (org-babel-execute:fortran): * ob-exp.el (org-babel-exp-code): * ob-emacs-lisp.el (org-babel-execute:emacs-lisp): * ob-ditaa.el (org-babel-execute:ditaa): * ob-core.el (org-babel-execute-src-block, org-babel-sha1-hash) (org-babel-parse-header-arguments, org-babel-reassemble-table) (org-babel-goto-src-block-head, org-babel-mark-block) (org-babel-expand-noweb-references, org-babel-script-escape) (org-babel-process-file-name): * ob-clojure.el (org-babel-execute:clojure): * ob-calc.el (org-babel-execute:calc): * ob-awk.el (org-babel-execute:awk): * ob-abc.el (org-babel-execute:abc): * ob-R.el (org-babel-expand-body:R): * ob-C.el (org-babel-C-execute): Avoid deprecated ((lambda) ...). 2013-11-12 Glenn Morris <rgm@gnu.org> * ox-html.el (org-html-scripts): Add 2013 to copyright years. (org-html-infojs-template): Copyright holder to FSF.
2013-11-12 19:57:31 +00:00
;; " | grep -v batch | grep -v 'replaced' | sed '/^$/d' "
(let ((raw (org-babel-eval cmd "")))
(mapconcat
#'identity
(delq nil
* lisp/ob-maxima.el: enable use of `batch' loader and `draw' * (org-babel-header-args:maxima): Document the two new header arguments (batch and graphics-pkg) that are specific to ob-maxima. * (org-babel-maxima--command-arguments-default): A new variable storing the default command-line argument(s). This value was hard-coded in `org-babel-maxima:execute'. * (org-babel-maxima--graphic-package-options): A new variable that stores an alist of Maxima graphics packages and the Maxima code to set up that package. * (org-babel-maxima--default-epilogue): A new variable that stores an alist of the clean-up code that is run at end of a `graphical-output' or `non-graphical-output' source block. * (org-babel-maxima--output-filter-regexps): A new variable that stores a list of regexps to identify "bad" output lines to be removed from Maxima's output. Source-code comments document each regexp's purpose. Two additional regexps have been added: one filters un-wanted output from `batch' and the other removes empty input lines that `batch'-ed output may spuriously produce (actual empty input lines are syntax errors, see the new tests below). * (org-babel-maxima--output-filter): A new function that takes a single line of Maxima output. It returns nil if the line has zero length or matches a regexp in `org-babel-maxima--output-filter-regexps'; otherwise, it returns the line. This function and regexp replace the hard-coded filter in `org-babel-execute:maxima'. * (org-babel-maxima-expand): Prepare the source block for execution, depending on whether it is producing graphical output or not. In case of graphical output, use the `graphics-pkg' header to set the graphics package and use `org-babel-maxima--graphic-package-options' to set-up the package. Grovel the graphics terminal from the output filename. * (org-babel-execute:maxima): Use the :batch header argument and `org-babel-maxima--command-arguments-default' to execute the source block. Replace the existing, in-line output filter and its regexps with `org-babel-maxima--output-filter' and `org-babel-maxima--output-filter-regexps'. * testing/examples/ob-maxima-test.org: Add test examples. Include examples of the batch-related tests from testing/lisp/test-ob-maxima.el. Provide an example of the `:graphics-pkg' header argument with the `draw' package. * testing/lisp/test-ob-maxima.el: Introduce six new, batch-related test functions. Each test exercises the :batch header argument. The response to unusual inputs is tested (empty strings, strings with just whitespace, input with the `:lisp' reader, and two syntax-related errors). link: https://list.orgmode.org/87cyz1ivzw.fsf@t14.reltub.ca/
2023-09-19 18:36:06 +00:00
(mapcar #'org-babel-maxima--output-filter
Backport changes from Emacs revs 115081 and 115082 2013-11-12 Stefan Monnier <monnier@iro.umontreal.ca> Address some byte-compiler warnings. * ob-abc.el (org-babel-expand-body:abc): Use dolist. (org-babel-execute:abc): Fix regexp quoting. * ob-calc.el (org--var-syms): Rename from `var-syms'. * ob-lilypond.el (ly-compile-lilyfile): Remove redundant let-binding. * ob-table.el (sbe): Move debug declaration. * org-clock.el (org--msg-extra): Rename from `msg-extra'. * org.el (org-version): Avoid var name starting with _. (org-inhibit-startup, org-called-with-limited-levels) (org-link-search-inhibit-query, org-time-was-given) (org-end-time-was-given, org-def, org-defdecode, org-with-time): * org-colview.el (org-agenda-overriding-columns-format): * org-agenda.el (org-agenda-multi, org-depend-tag-blocked) (org-agenda-show-log-scoped): * ob-python.el (py-which-bufname, python-shell-buffer-name): * ob-haskell.el (org-export-copy-to-kill-ring): * ob-exp.el (org-link-search-inhibit-query): * ob-R.el (ess-eval-visibly-p): * ob-core.el (org-src-window-setup): Declare before use. (org-babel-expand-noweb-references): Remove unused `blocks-in-buffer'. * ox-odt.el (org-odt-hfy-face-to-css): * org-src.el (org-src-associate-babel-session, org-src-get-lang-mode): * org-bibtex.el (org-bibtex-get, org-bibtex-ask, org-bibtex) (org-bibtex-check): * ob-tangle.el (org-babel-tangle, org-babel-spec-to-string) (org-babel-tangle-single-block, org-babel-tangle-comment-links): * ob-table.el (sbe): * ob-sqlite.el (org-babel-sqlite-expand-vars): * ob-sql.el (org-babel-sql-expand-vars): * ob-shen.el (org-babel-execute:shen): * ob-sh.el (org-babel-execute:sh, org-babel-sh-evaluate): * ob-scala.el (org-babel-scala-evaluate): * ob-ruby.el (org-babel-ruby-table-or-string) (org-babel-ruby-evaluate): * ob-python.el (org-babel-python-table-or-string) (org-babel-python-evaluate-external-process) (org-babel-python-evaluate-session): * ob-picolisp.el (org-babel-execute:picolisp): * ob-perl.el (org-babel-perl-evaluate): * ob-maxima.el (org-babel-execute:maxima): * ob-lisp.el (org-babel-execute:lisp): * ob-java.el (org-babel-execute:java): * ob-io.el (org-babel-io-evaluate): * ob-haskell.el (org-babel-execute:haskell): * ob-fortran.el (org-babel-execute:fortran): * ob-exp.el (org-babel-exp-code): * ob-emacs-lisp.el (org-babel-execute:emacs-lisp): * ob-ditaa.el (org-babel-execute:ditaa): * ob-core.el (org-babel-execute-src-block, org-babel-sha1-hash) (org-babel-parse-header-arguments, org-babel-reassemble-table) (org-babel-goto-src-block-head, org-babel-mark-block) (org-babel-expand-noweb-references, org-babel-script-escape) (org-babel-process-file-name): * ob-clojure.el (org-babel-execute:clojure): * ob-calc.el (org-babel-execute:calc): * ob-awk.el (org-babel-execute:awk): * ob-abc.el (org-babel-execute:abc): * ob-R.el (org-babel-expand-body:R): * ob-C.el (org-babel-C-execute): Avoid deprecated ((lambda) ...). 2013-11-12 Glenn Morris <rgm@gnu.org> * ox-html.el (org-html-scripts): Add 2013 to copyright years. (org-html-infojs-template): Copyright holder to FSF.
2013-11-12 19:57:31 +00:00
(split-string raw "[\r\n]"))) "\n")))))
(if (ignore-errors (org-babel-graphical-output-file params))
nil
org-babel-result-cond - unified handling of results * lisp/ob.el (org-babel-result-cond): This function should now be used by all language backends to handle the processing of raw code block output into scalar results, table results, or ignored results depending on the value of result-params. * lisp/ob-C.el (org-babel-C-execute): Use org-babel-result-cond. * lisp/ob-R.el (org-babel-R-evaluate-external-process): Use org-babel-result-cond. (org-babel-R-evaluate-session): Use org-babel-result-cond. * lisp/ob-awk.el (org-babel-execute:awk): Use org-babel-result-cond. * lisp/ob-clojure.el (org-babel-execute:clojure): Use org-babel-result-cond. * lisp/ob-emacs-lisp.el (org-babel-execute:emacs-lisp): Use org-babel-result-cond. * lisp/ob-fortran.el (org-babel-execute:fortran): Use org-babel-result-cond. * lisp/ob-io.el (org-babel-io-evaluate): Use org-babel-result-cond. * lisp/ob-java.el (org-babel-execute:java): Use org-babel-result-cond. * lisp/ob-lisp.el (org-babel-execute:lisp): Use org-babel-result-cond. * lisp/ob-maxima.el (org-babel-execute:maxima): Use org-babel-result-cond. * lisp/ob-picolisp.el (org-babel-execute:picolisp): Use org-babel-result-cond. * lisp/ob-python.el (org-babel-python-evaluate-external-process): Use org-babel-result-cond. (org-babel-python-evaluate-session): Use org-babel-result-cond. * lisp/ob-scala.el (org-babel-scala-evaluate): Use org-babel-result-cond. * lisp/ob-sh.el (org-babel-sh-evaluate): Use org-babel-result-cond. * lisp/ob-shen.el (org-babel-execute:shen): Use org-babel-result-cond. * lisp/ob-sql.el (org-babel-execute:sql): Use org-babel-result-cond. * lisp/ob-sqlite.el (org-babel-execute:sqlite): Use org-babel-result-cond.
2012-11-19 01:02:09 +00:00
(org-babel-result-cond result-params
result
(let ((tmp-file (org-babel-temp-file "maxima-res-")))
(with-temp-file tmp-file (insert result))
(org-babel-import-elisp-from-file tmp-file))))))
Activate lexical binding in some libraries * lisp/ob-C.el (org-babel-prep-session:C): (org-babel-load-session:C): * lisp/ob-J.el: (org-babel-expand-body:J): (org-babel-execute:J): * lisp/ob-R.el: (org-babel-expand-body:R): * lisp/ob-abc.el: (org-babel-execute:abc): (org-babel-prep-session:abc): * lisp/ob-asymptote.el: (org-babel-execute:asymptote): (org-babel-prep-session:asymptote): * lisp/ob-awk.el: (org-babel-expand-body:awk): * lisp/ob-calc.el: (org-babel-expand-body:calc): * lisp/ob-clojure.el: * lisp/ob-comint.el: (org-babel-comint-in-buffer): (org-babel-comint-with-output): (org-babel-comint-eval-invisibly-and-wait-for-file): * lisp/ob-coq.el: * lisp/ob-css.el: (org-babel-execute:css): (org-babel-prep-session:css): * lisp/ob-ditaa.el: (org-babel-execute:ditaa): (org-babel-prep-session:ditaa): * lisp/ob-dot.el: (org-babel-execute:dot): (org-babel-prep-session:dot): * lisp/ob-ebnf.el: * lisp/ob-emacs-lisp.el: * lisp/ob-eval.el: * lisp/ob-forth.el: * lisp/ob-fortran.el: (org-babel-execute:fortran): (org-babel-prep-session:fortran): (org-babel-load-session:fortran): * lisp/ob-gnuplot.el: (org-babel-expand-body:gnuplot): (org-babel-prep-session:gnuplot): (org-babel-gnuplot-initiate-session): * lisp/ob-groovy.el: (org-babel-prep-session:groovy): (org-babel-groovy-initiate-session): * lisp/ob-haskell.el: (org-babel-haskell-initiate-session): * lisp/ob-io.el: (org-babel-prep-session:io): (org-babel-io-initiate-session): * lisp/ob-java.el: (org-babel-execute:java): * lisp/ob-js.el: * lisp/ob-keys.el: * lisp/ob-latex.el: (org-babel-prep-session:latex): * lisp/ob-ledger.el: (org-babel-execute:ledger): (org-babel-prep-session:ledger): * lisp/ob-lilypond.el: (org-babel-lilypond-commands): (org-babel-lilypond-process-basic): (org-babel-prep-session:lilypond): (org-babel-lilypond-parse-line-num): * lisp/ob-lisp.el: * lisp/ob-makefile.el: (org-babel-execute:makefile): (org-babel-prep-session:makefile): * lisp/ob-matlab.el: * lisp/ob-maxima.el: (org-babel-prep-session:maxima): * lisp/ob-mscgen.el: (org-babel-prep-session:mscgen): * lisp/ob-ocaml.el: (org-babel-execute:ocaml): (org-babel-prep-session:ocaml): * lisp/ob-octave.el: (org-babel-execute:octave): (org-babel-octave-initiate-session): * lisp/ob-org.el: (org-babel-prep-session:org): * lisp/ob-perl.el: (org-babel-prep-session:perl): (org-babel-perl--var-to-perl): (org-babel-perl-initiate-session): * lisp/ob-picolisp.el: (org-babel-expand-body:picolisp): (org-babel-execute:picolisp): * lisp/ob-plantuml.el: (org-babel-execute:plantuml): (org-babel-prep-session:plantuml): * lisp/ob-processing.el: (org-babel-prep-session:processing): * lisp/ob-python.el: (org-babel-python-initiate-session): * lisp/ob-ref.el: (org-babel-ref-resolve): * lisp/ob-ruby.el: (org-babel-ruby-initiate-session): * lisp/ob-sass.el: (org-babel-execute:sass): (org-babel-prep-session:sass): * lisp/ob-scala.el: (org-babel-execute:scala): (org-babel-prep-session:scala): (org-babel-scala-initiate-session): * lisp/ob-scheme.el: * lisp/ob-screen.el: (org-babel-prep-session:screen): (org-babel-screen-session-write-temp-file): (org-babel-screen-test): * lisp/ob.el: * lisp/org-colview.el: (org-columns-todo): (org-columns-set-tags-or-toggle): (org-columns-new): (org-columns-uncompile-format): (org-agenda-colview-summarize): * lisp/org-footnote.el: (electric-indent-mode): * lisp/org-indent.el: (org-indent-refresh-maybe): * lisp/org-list.el: * lisp/org-macro.el: (org-macro--collect-macros): * lisp/org-src.el: * lisp/org-table.el: (sort-fold-case): (org-table-create): (org-table-field-info): (org-table-transpose-table-at-point): (org-table-remove-rectangle-highlight): (orgtbl-create-or-convert-from-region): (org-define-lookup-function): * lisp/ox-ascii.el: (org-ascii-format-drawer-function): (org-ascii--has-caption-p): (org-ascii-bold): (org-ascii-center-block): (org-ascii-clock): (org-ascii-code): (org-ascii-dynamic-block): (org-ascii-entity): (org-ascii-example-block): (org-ascii-export-snippet): (org-ascii-export-block): (org-ascii-fixed-width): (org-ascii-footnote-reference): (org-ascii-horizontal-rule): (org-ascii-inline-src-block): (org-ascii-format-inlinetask-default): (org-ascii-italic): (org-ascii-keyword): (org-ascii-latex-environment): (org-ascii-latex-fragment): (org-ascii-line-break): (org-ascii-node-property): (org-ascii-planning): (org-ascii-quote-block): (org-ascii-radio-target): (org-ascii-special-block): (org-ascii-src-block): (org-ascii-statistics-cookie): (org-ascii-subscript): (org-ascii-superscript): (org-ascii-strike-through): (org-ascii-timestamp): (org-ascii-underline): (org-ascii-verbatim): (org-ascii-verse-block): (org-ascii-filter-headline-blank-lines): (org-ascii-filter-paragraph-spacing): (org-ascii-filter-comment-spacing): Use lexical binding.
2015-10-26 00:56:00 +00:00
(defun org-babel-prep-session:maxima (_session _params)
"Throw an error. Maxima does not support sessions."
(error "Maxima does not support sessions"))
(defun org-babel-maxima-var-to-maxima (pair)
"Convert an elisp variable-value PAIR to maxima code."
(let ((var (car pair))
(val (cdr pair)))
(when (symbolp val)
(setq val (symbol-name val))
(when (= (length val) 1)
(setq val (string-to-char val))))
(format "%S: %s$" var
(org-babel-maxima-elisp-to-maxima val))))
(defun org-babel-maxima-elisp-to-maxima (val)
"Return a string of maxima code which evaluates to VAL."
(if (listp val)
(concat "[" (mapconcat #'org-babel-maxima-elisp-to-maxima val ", ") "]")
(format "%s" val)))
(provide 'ob-maxima)
;;; ob-maxima.el ends here