From: Nicolas Goaziou <n.goaziou@gmail.com>
To: nicholas.dokos@hp.com
Cc: "András Major" <andras.g.major@gmail.com>, emacs-orgmode@gnu.org
Subject: Re: Bug: Babel: asymptote: erroneous conversion of heterogeneous-typed table
Date: Wed, 31 Aug 2011 11:35:32 +0200 [thread overview]
Message-ID: <87obz5hqjf.fsf@gmail.com> (raw)
In-Reply-To: <10851.1314778677@alphaville.dokosmarshall.org> (Nick Dokos's message of "Wed, 31 Aug 2011 04:17:57 -0400")
[-- Attachment #1: Type: text/plain, Size: 1273 bytes --]
Hello,
Nick Dokos <nicholas.dokos@hp.com> writes:
> András Major <andras.g.major@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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ob-asymptote-full-support-for-uni-dimensional-lists.patch --]
[-- Type: text/x-patch, Size: 2172 bytes --]
From 82ae786a8ed1248a62912272edec6f8fa7df4d12 Mon Sep 17 00:00:00 2001
From: Nicolas Goaziou <n.goaziou@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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-ob-asymptote-simplify-table-to-array-conversion-proc.patch --]
[-- Type: text/x-patch, Size: 2731 bytes --]
From 2e3b7579649ead40128e3c8e31ca75ced139285d Mon Sep 17 00:00:00 2001
From: Nicolas Goaziou <n.goaziou@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
next prev parent reply other threads:[~2011-08-31 9:36 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-29 8:00 Bug: Babel: asymptote: erroneous conversion of heterogeneous-typed table Major A
2011-08-29 8:47 ` Nicolas Goaziou
2011-08-29 9:12 ` András Major
2011-08-29 9:50 ` Nicolas Goaziou
2011-08-29 10:42 ` András Major
2011-08-29 12:50 ` Nicolas Goaziou
2011-08-29 16:35 ` Nicolas Goaziou
2011-08-29 16:52 ` Eric Schulte
2011-08-29 17:27 ` Nicolas Goaziou
2011-08-29 18:02 ` Eric Schulte
2011-08-29 18:50 ` András Major
2011-08-29 19:02 ` Eric Schulte
2011-08-29 19:11 ` Nick Dokos
2011-08-30 19:12 ` András Major
2011-08-30 19:34 ` Eric Schulte
2011-08-30 20:45 ` András Major
2011-08-30 20:55 ` Eric Schulte
2011-08-31 6:48 ` András Major
2011-08-31 8:17 ` Nick Dokos
2011-08-31 9:35 ` Nicolas Goaziou [this message]
2011-08-31 12:14 ` Eric Schulte
2011-08-29 9:05 ` Nick Dokos
2011-08-29 9:40 ` András Major
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87obz5hqjf.fsf@gmail.com \
--to=n.goaziou@gmail.com \
--cc=andras.g.major@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=nicholas.dokos@hp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.