diff options
author | Alan Schmitt <alan.schmitt@polytechnique.org> | 2014-03-26 22:23:53 +0100 |
---|---|---|
committer | Alan Schmitt <alan.schmitt@polytechnique.org> | 2014-03-29 19:51:03 +0100 |
commit | c6aa8340ba09aa389d85083ccea83149090862bb (patch) | |
tree | 3d67c717d02f23a298bf97288e6dd94a29902637 | |
parent | d25846b2340e32dea93fc89ea432f74a7f64d950 (diff) | |
download | org-mode-c6aa8340ba09aa389d85083ccea83149090862bb.tar.gz |
ob-ocaml.el: Clean up babel evaluation of ocaml blocks
* ob-ocaml.el (org-babel-execute:ocaml): Capture the output, type, and
value when evaluating ocaml blocks. Return the one requested by
`results'.
(org-babel-ocaml-parse-output): Change the signature to take a type
and a value. Make the parsing of the type more robust.
-rw-r--r-- | lisp/ob-ocaml.el | 54 |
1 files changed, 30 insertions, 24 deletions
diff --git a/lisp/ob-ocaml.el b/lisp/ob-ocaml.el index 1f29a25..60e87e0 100644 --- a/lisp/ob-ocaml.el +++ b/lisp/ob-ocaml.el @@ -79,16 +79,23 @@ (progn (setq out nil) line) (when (string-match re line) (progn (setq out t) nil)))) - (mapcar #'org-babel-trim (reverse raw)))))))) + (mapcar #'org-babel-trim (reverse raw))))))) + (raw (org-babel-trim clean)) + (result-params (cdr (assoc :result-params params))) + (parsed + (string-match + "\\(\\(.*\n\\)*\\)[^:\n]+ : \\([^=\n]+\\) =\\(\n\\| \\)\\(.+\\)$" + raw)) + (output (match-string 1 raw)) + (type (match-string 3 raw)) + (value (match-string 5 raw))) (org-babel-reassemble-table - (let ((raw (org-babel-trim clean)) - (result-params (cdr (assoc :result-params params)))) - (org-babel-result-cond result-params - ;; strip type information from output unless verbatim is specified - (if (and (not (member "verbatim" result-params)) - (string-match "= \\(.+\\)$" raw)) - (match-string 1 raw) raw) - (org-babel-ocaml-parse-output raw))) + (org-babel-result-cond result-params + (cond + ((member "verbatim" result-params) raw) + ((member "output" result-params) output) + (t raw)) + (org-babel-ocaml-parse-output value type)) (org-babel-pick-name (cdr (assoc :colname-names params)) (cdr (assoc :colnames params))) (org-babel-pick-name @@ -121,21 +128,20 @@ (concat "[|" (mapconcat #'org-babel-ocaml-elisp-to-ocaml val "; ") "|]") (format "%S" val))) -(defun org-babel-ocaml-parse-output (output) - "Parse OUTPUT. -OUTPUT is string output from an ocaml process." - (let ((regexp "[^:]+ : %s = \\(.+\\)$")) - (cond - ((string-match (format regexp "string") output) - (org-babel-read (match-string 1 output))) - ((or (string-match (format regexp "int") output) - (string-match (format regexp "float") output)) - (string-to-number (match-string 1 output))) - ((string-match (format regexp "list") output) - (org-babel-ocaml-read-list (match-string 1 output))) - ((string-match (format regexp "array") output) - (org-babel-ocaml-read-array (match-string 1 output))) - (t (message "don't recognize type of %s" output) output)))) +(defun org-babel-ocaml-parse-output (value type) + "Parse VALUE of type TYPE. +VALUE and TYPE are string output from an ocaml process." + (cond + ((string= "string" type) + (org-babel-read value)) + ((or (string= "int" type) + (string= "float" type)) + (string-to-number value)) + ((string-match "list" type) + (org-babel-ocaml-read-list value)) + ((string-match "array" type) + (org-babel-ocaml-read-array value)) + (t (message "don't recognize type %s" type) value))) (defun org-babel-ocaml-read-list (results) "Convert RESULTS into an elisp table or string. |