Hello,

Nick Dokos <nicholas.do...@hp.com> writes:

> András Major <andras.g.ma...@gmail.com> wrote:
>
>> Hi Eric,
>> 
>> > Can you post an example?  Here is a working example.
>> 
>> In your example, simply write "asymptote" in place of "sh" and replace the
>> code by "size(100);" just to make sure it's valid asymptote (though the
>> error occurs even if you don't).  In fact, I'm quite sure that asy never
>> gets executed in this case.
>> 
>
> Yes, even without any asymptote code, this breaks. But there seem to be
> multiple problems. One is fix-empty-lines, a local routine defines
> inside org-babel-asymptote-table-to-array: it seems to assume that the table
> is a list of lists, whereas in this case it's a list of strings. The
> following patch (which probably is wrong, in that it cures the symptom
> rather than the disease):

Yes, the problem is more general: uni-dimensional lists are not handled
correctly.

I attach a patch that should fix the problem (and simplify a lot that
whole process).

One thing, though. Now,

| 1 | 2 |

and (but this was already the case)

| 1 |
| 2 |

are treated as bi-dimensional arrays, because that's how they really are
passed to ob-asymptote.

Regards,

-- 
Nicolas Goaziou
>From 82ae786a8ed1248a62912272edec6f8fa7df4d12 Mon Sep 17 00:00:00 2001
From: Nicolas Goaziou <n.goaz...@gmail.com>
Date: Wed, 31 Aug 2011 11:11:31 +0200
Subject: [PATCH 1/2] ob-asymptote: full support for uni-dimensional lists

* lisp/ob-asymptote.el (org-babel-asymptote-var-to-asymptote):
  recognize non-nested lists as uni-dimensional arrays.
---
 lisp/ob-asymptote.el |   18 ++++++++++--------
 1 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/lisp/ob-asymptote.el b/lisp/ob-asymptote.el
index 89aecb7..f90bb85 100644
--- a/lisp/ob-asymptote.el
+++ b/lisp/ob-asymptote.el
@@ -97,9 +97,8 @@ Asymptote does not support sessions"
 The elisp value PAIR is converted into Asymptote code specifying
 a variable of the same value."
   (let ((var (car pair))
-        (val (if (symbolp (cdr pair))
-                 (symbol-name (cdr pair))
-               (cdr pair))))
+        (val (let ((v (cdr pair)))
+	       (if (symbolp v) (symbol-name v) v))))
     (cond
      ((integerp val)
       (format "int %S=%S;" var val))
@@ -107,14 +106,17 @@ a variable of the same value."
       (format "real %S=%S;" var val))
      ((stringp val)
       (format "string %S=\"%s\";" var val))
+     ((and (listp val) (not (listp (car val))))
+      (let* ((type (org-babel-asymptote-define-type val))
+	     (fmt (if (eq 'string type) "\"%s\"" "%s"))
+	     (vect (mapconcat (lambda (e) (format fmt e)) val ", ")))
+	(format "%s[] %S={%s};" type var vect)))
      ((listp val)
-      (let* ((dimension-2-p (cdr val))
-             (dim (if dimension-2-p "[][]" "[]"))
-             (type (org-babel-asymptote-define-type val))
+      (let* ((type (org-babel-asymptote-define-type val))
              (array (org-babel-asymptote-table-to-array
                      val type
-                     (if dimension-2-p '(:lstart "{" :lend "}," :llend "}")))))
-        (format "%S%s %S=%s;" type dim var array))))))
+                     '(:lstart "{" :lend "}," :llend "}"))))
+        (format "%S[][] %S=%s;" type var array))))))
 
 (defun org-babel-asymptote-table-to-array (table type params)
   "Convert values of TABLE into a string of an asymptote array.
-- 
1.7.6.1

>From 2e3b7579649ead40128e3c8e31ca75ced139285d Mon Sep 17 00:00:00 2001
From: Nicolas Goaziou <n.goaz...@gmail.com>
Date: Wed, 31 Aug 2011 11:26:29 +0200
Subject: [PATCH 2/2] ob-asymptote: simplify table to array conversion process

* lisp/ob-asymptote.el (org-babel-asymptote-var-to-asymptote):
  refactor code.
(org-babel-asymptote-table-to-array): removed function.
---
 lisp/ob-asymptote.el |   40 ++++++++--------------------------------
 1 files changed, 8 insertions(+), 32 deletions(-)

diff --git a/lisp/ob-asymptote.el b/lisp/ob-asymptote.el
index f90bb85..2219e03 100644
--- a/lisp/ob-asymptote.el
+++ b/lisp/ob-asymptote.el
@@ -113,38 +113,14 @@ a variable of the same value."
 	(format "%s[] %S={%s};" type var vect)))
      ((listp val)
       (let* ((type (org-babel-asymptote-define-type val))
-             (array (org-babel-asymptote-table-to-array
-                     val type
-                     '(:lstart "{" :lend "}," :llend "}"))))
-        (format "%S[][] %S=%s;" type var array))))))
-
-(defun org-babel-asymptote-table-to-array (table type params)
-  "Convert values of TABLE into a string of an asymptote array.
-
-TABLE is a list whose atoms are assumed to be of type
-TYPE. PARAMS is a plist of parameters that can influence the
-conversion.
-
-Empty cells are ignored."
-  (labels ((atom-to-string (table)
-                           (cond
-                            ((null table) '())
-                            ((not (listp (car table)))
-                             (cons (if (or (eq type 'string)
-                                           (and (stringp (car table))
-                                                (not (string= (car table) ""))))
-                                       (format "\"%s\"" (car table))
-                                     (format "%s" (car table)))
-                                   (atom-to-string (cdr table))))
-                            (t
-                             (cons (atom-to-string (car table))
-                                   (atom-to-string (cdr table))))))
-           ;; Remove any empty row
-           (fix-empty-lines (table)
-                            (delq nil (mapcar (lambda (l) (delq "" l)) table))))
-    (orgtbl-to-generic
-     (fix-empty-lines (atom-to-string table))
-     (org-combine-plists '(:hline nil :sep "," :tstart "{" :tend "}") params))))
+	     (fmt (if (eq 'string type) "\"%s\"" "%s"))
+             (array (mapconcat (lambda (row)
+				 (concat "{"
+					 (mapconcat (lambda (e) (format fmt e))
+						    row ", ")
+					 "}"))
+			       val ",")))
+        (format "%S[][] %S={%s};" type var array))))))
 
 (defun org-babel-asymptote-define-type (data)
   "Determine type of DATA.
-- 
1.7.6.1

Reply via email to