diff options
author | Kovacsics Robert <rmk35@cam.ac.uk> | 2019-10-04 17:29:00 +0100 |
---|---|---|
committer | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2019-10-13 09:44:54 +0200 |
commit | be8e68be0b760b12a5223bad1c7cbc6e360e93e8 (patch) | |
tree | ea22d731779d41088c1beae839b0c25012ba08e3 | |
parent | bd5f5ece553181ac69447263688c60c33953d2da (diff) | |
download | org-mode-be8e68be0b760b12a5223bad1c7cbc6e360e93e8.tar.gz |
ob-ocaml: Support for pretty-printed outputs
* lisp/ob-ocaml.el (org-babel-execute:ocaml): Support for
pretty-printed outputs.
E.g. the following snippet produces multiple lines of output, due to
pretty-printing
#+BEGIN_SRC ocaml :exports code :eval no-export :results verbatim
(* Note, no need to have parentheses around sqrt, as
application binds the tightest *)
let rec gamma n = if n = 0
then (1.0 +. sqrt 5.0) /. 2.0
else 1.0 /. (gamma (n-1) -. 1.0)
let nums = List.map gamma (List.init 5 (fun x -> x))
#+END_SRC
#+NAME: gamma-tbl
#+RESULTS[1fd6a3e846afdef51350eb6d7ba15c6844ccc14e]:
: val gamma : int -> float = <fun>
: val nums : float list =
: [1.6180339887498949; 1.61803398874989468; 1.61803398874989535;
: 1.61803398874989357; 1.61803398874989823]
(In reality this would have 50 or so outputs, point being mathematically
it shouldn't change, but due to floating point errors it does.)
The regexp has the following problems:
- The "." in group 5 (as-was) doesn't match new-lines, so it only
matches the first line, e.g. as a list
: - [1.6180339887498949, 1.61803398874989468, 1.61803398874989535,
- When using "\\(.\\|\n\\)", it includes the starting indentation of the
list, which makes org-babel-script-escape choke (called from
org-babel-ocaml-read-list, from org-babel-ocaml-parse-output, from
org-babel-execute:ocaml, the code being modified.
TINYCHANGE
-rw-r--r-- | lisp/ob-ocaml.el | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lisp/ob-ocaml.el b/lisp/ob-ocaml.el index 0c0ffe4..54bc49a 100644 --- a/lisp/ob-ocaml.el +++ b/lisp/ob-ocaml.el @@ -83,11 +83,11 @@ (raw (org-trim clean)) (result-params (cdr (assq :result-params params)))) (string-match - "\\(\\(.*\n\\)*\\)[^:\n]+ : \\([^=\n]+\\) =\\(\n\\| \\)\\(.+\\)$" + "\\(\\(.*\n\\)*\\)[^:\n]+ : \\([^=\n]+\\) =[[:space:]]+\\(\\(.\\|\n\\)+\\)$" raw) (let ((output (match-string 1 raw)) (type (match-string 3 raw)) - (value (match-string 5 raw))) + (value (match-string 4 raw))) (org-babel-reassemble-table (org-babel-result-cond result-params (cond |