Re: [O] I need help extending ob-ocaml to support :results output

2014-03-29 Thread Nicolas Goaziou
Alan Schmitt  writes:

> OK, I put it on the previous line. I'll commit now.

Thank you.

-- 
Nicolas Goaziou



Re: [O] I need help extending ob-ocaml to support :results output

2014-03-29 Thread Alan Schmitt
Nicolas Goaziou  writes:

> Alan Schmitt  writes:
>
> +(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))
> +  )
>
>  ^
> Here.

OK, I put it on the previous line. I'll commit now.

Thanks,

Alan




Re: [O] I need help extending ob-ocaml to support :results output

2014-03-29 Thread Nicolas Goaziou
Alan Schmitt  writes:

+  (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))
+)

 ^
Here.


Regards,

-- 
Nicolas Goaziou



Re: [O] I need help extending ob-ocaml to support :results output

2014-03-29 Thread Alan Schmitt
Nicolas Goaziou  writes:

> Hello,
>
> Alan Schmitt  writes:
>
>> Should I push this patch?
>
> Nitpick: it is better to remove the dangling parenthesis prior to
> this. Thanks.

I'm sorry, but I don't see a dangling parenthesis. Where is it?

Thanks,

Alan




Re: [O] I need help extending ob-ocaml to support :results output

2014-03-29 Thread Nicolas Goaziou
Hello,

Alan Schmitt  writes:

> Should I push this patch?

Nitpick: it is better to remove the dangling parenthesis prior to this. Thanks.


Regards,

-- 
Nicolas Goaziou



Re: [O] I need help extending ob-ocaml to support :results output

2014-03-29 Thread Bastien
Hi Alan,

Alan Schmitt  writes:

> Should I push this patch?

Please go ahead,

-- 
 Bastien



Re: [O] I need help extending ob-ocaml to support :results output

2014-03-29 Thread Alan Schmitt
Hello,

Alan Schmitt  writes:

> Hello,
>
> Here is a patch that allows for the output of ocaml babel blocks to be
> captured. It also makes the parsing of the resulting value more robust:
> results of type "string list" are now converted to a table, for
> instance.
>
> At the moment I only check for results of the form "verbatim" or
> "output" (before this patch, only "verbatim" was possible). Results of
> kind "value" are parsed as before (converted to a string, a number,
> a table, or left as-is).
>
> Please don't hesitate to suggest improvements, to the code or to the
> Changelog.

Should I push this patch?

Thanks,

Alan




Re: [O] I need help extending ob-ocaml to support :results output

2014-03-26 Thread Alan Schmitt
Hello,

Here is a patch that allows for the output of ocaml babel blocks to be
captured. It also makes the parsing of the resulting value more robust:
results of type "string list" are now converted to a table, for
instance.

At the moment I only check for results of the form "verbatim" or
"output" (before this patch, only "verbatim" was possible). Results of
kind "value" are parsed as before (converted to a string, a number,
a table, or left as-is).

Please don't hesitate to suggest improvements, to the code or to the
Changelog.

Thanks,

Alan

>From bcc2fc7ae0e4d099481af229a79b06ae9a160f14 Mon Sep 17 00:00:00 2001
From: Alan Schmitt 
Date: Wed, 26 Mar 2014 22:23:53 +0100
Subject: [PATCH] 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.
---
 lisp/ob-ocaml.el | 55 +++
 1 file changed, 31 insertions(+), 24 deletions(-)

diff --git a/lisp/ob-ocaml.el b/lisp/ob-ocaml.el
index 1f29a25..b7ef2d1 100644
--- a/lisp/ob-ocaml.el
+++ b/lisp/ob-ocaml.el
@@ -79,16 +79,24 @@
 	 (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 +129,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.
-- 
1.8.5.3



Re: [O] I need help extending ob-ocaml to support :results output

2014-03-24 Thread Alan Schmitt
Eric Schulte  writes:

> You can step through the execution of `org-babel-execute:ocaml' by first
> evaluating the function with a prefix argument (meaning with the cursor
> within the function body press C-u C-A-x) which will edebug [1] the
> function.
>
> You can then evaluate an OCaml code block and when execution hits the
> `org-babel-execute:ocaml' it will pause, and you can step through the
> function by continuously pressing space bar.  In this way you can see
> how the code is executed, and you can interactively look at the OCaml
> session buffer to see where output is printed.  Pay special attention to
> the `org-babel-comint-with-output' function, which is probably where
> you'll need to make changes when the following holds.
>
>   (member "output" (cdr (assoc :result-params params)))
>
> You can also look for the string "output" in other ob-*.el language
> files to see how output results are collected.
>
> Hope this helps,

It does, thanks a lot.

Alan



Re: [O] I need help extending ob-ocaml to support :results output

2014-03-23 Thread Eric Schulte
Alan Schmitt  writes:

> Hello,
>
> It seems that ob-ocaml does not support ":results output". For instance,
> evaluating the following block:
>
> #+begin_src ocaml :results output
> Printf.printf "foo\nbar\n";;
> #+end_src
>
> Does not result in the two lines "foo" and "bar" but in the value being
> returned.
>
> Unfortunately I don't know enough of babel and emacs-lisp to extend
> ob-ocaml to support this. Would someone be willing to guide me through
> the `org-babel-execute:ocaml' function in ob-ocaml.el so that I can add
> this functionality?
>

You can step through the execution of `org-babel-execute:ocaml' by first
evaluating the function with a prefix argument (meaning with the cursor
within the function body press C-u C-A-x) which will edebug [1] the
function.

You can then evaluate an OCaml code block and when execution hits the
`org-babel-execute:ocaml' it will pause, and you can step through the
function by continuously pressing space bar.  In this way you can see
how the code is executed, and you can interactively look at the OCaml
session buffer to see where output is printed.  Pay special attention to
the `org-babel-comint-with-output' function, which is probably where
you'll need to make changes when the following holds.

  (member "output" (cdr (assoc :result-params params)))

You can also look for the string "output" in other ob-*.el language
files to see how output results are collected.

Hope this helps,

>
> Thanks,
>
> Alan
>


Footnotes: 
[1]  see (info "(elisp)Edebug")

-- 
Eric Schulte
https://cs.unm.edu/~eschulte
PGP: 0x614CA05D



[O] I need help extending ob-ocaml to support :results output

2014-03-21 Thread Alan Schmitt
Hello,

It seems that ob-ocaml does not support ":results output". For instance,
evaluating the following block:

#+begin_src ocaml :results output
Printf.printf "foo\nbar\n";;
#+end_src

Does not result in the two lines "foo" and "bar" but in the value being
returned.

Unfortunately I don't know enough of babel and emacs-lisp to extend
ob-ocaml to support this. Would someone be willing to guide me through
the `org-babel-execute:ocaml' function in ob-ocaml.el so that I can add
this functionality?

Thanks,

Alan