浏览代码

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
Kovacsics Robert 5 年之前
父节点
当前提交
be8e68be0b
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      lisp/ob-ocaml.el

+ 2 - 2
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