emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [babel] BUG in call lines
@ 2012-03-22  8:42 Andreas Leha
  2012-03-22 20:04 ` Marc-Oliver Ihm
  2012-03-26 11:20 ` Eric Schulte
  0 siblings, 2 replies; 3+ messages in thread
From: Andreas Leha @ 2012-03-22  8:42 UTC (permalink / raw)
  To: emacs-orgmode

Hi all,

there seems to be a bug in call lines:

Suppose, I have a src block with two parameters:

#+name: insert_hline
#+header: :var fulltable=mytable() :var after_row=1
#+begin_src emacs-lisp
  (let ((rrr (cons (quote hline) fulltable))
        (bottomrows (nthcdr after_row fulltable))
        (toprows (reverse (nthcdr (- (length fulltable) after_row) (reverse fulltable)))))
    (setcdr rrr bottomrows)
    (setcdr (nthcdr (- after_row 1) fulltable) rrr)
    fulltable)
 #+end_src

As first argument I would like to pass the results of a second
source block:
#+name: mytable
#+begin_src R
  data.frame(par=1:3, val=1:3)
#+end_src

#+results: mytable
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |

So, what I do is:

#+call: insert_hline(fulltable=mytable(),after_row=1) :hlines yes :colnames no

#+results: insert_hline(fulltable=mytable()
| 1 | 1 |
|---+---|
| 2 | 2 |
| 3 | 3 |

But the #+results: name is shortened.

So, the following won't produce another results block, but wrongly update
the block above:
#+call: insert_hline(fulltable=mytable(),after_row=2) :hlines yes :colnames no


The problem seems to be the ")" within the parameter list stopping
some parsing.

Note: This works as expected
#+call: insert_hline[:var fulltable=mytable() :var after_row=1]() :hlines yes :colnames no

#+results: insert_hline[:var fulltable=mytable() :var after_row=1]()
| 1 | 1 |
|---+---|
| 2 | 2 |
| 3 | 3 |

#+call: insert_hline[:var fulltable=mytable() :var after_row=2]() :hlines yes :colnames no

#+results: insert_hline[:var fulltable=mytable() :var after_row=2]()
| 1 | 1 |
| 2 | 2 |
|---+---|
| 3 | 3 |


Regards,
Andreas

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [babel] BUG in call lines
  2012-03-22  8:42 [babel] BUG in call lines Andreas Leha
@ 2012-03-22 20:04 ` Marc-Oliver Ihm
  2012-03-26 11:20 ` Eric Schulte
  1 sibling, 0 replies; 3+ messages in thread
From: Marc-Oliver Ihm @ 2012-03-22 20:04 UTC (permalink / raw)
  To: emacs-orgmode

Hi Andreas,

I think the behaviour you have discovered is governed by the constant org-babel-block-lob-one-liner-regexp;
However, tweaking this regular expression the right way seems to be really hard (impossible):

  http://stackoverflow.com/questions/546433/regular-expression-to-match-outer-brackets

,so the only option seems to be to write a function to do the matching correctly,
but which is probably a big task ...

So as I understand things, I would recommend to stick with the current behaviour and use your workaround :-)


with kind regards, Marc


Am 22.03.2012 09:42, schrieb Andreas Leha:
> Hi all,
>
> there seems to be a bug in call lines:
>
> Suppose, I have a src block with two parameters:
>
> #+name: insert_hline
> #+header: :var fulltable=mytable() :var after_row=1
> #+begin_src emacs-lisp
>    (let ((rrr (cons (quote hline) fulltable))
>          (bottomrows (nthcdr after_row fulltable))
>          (toprows (reverse (nthcdr (- (length fulltable) after_row) (reverse fulltable)))))
>      (setcdr rrr bottomrows)
>      (setcdr (nthcdr (- after_row 1) fulltable) rrr)
>      fulltable)
>   #+end_src
>
> As first argument I would like to pass the results of a second
> source block:
> #+name: mytable
> #+begin_src R
>    data.frame(par=1:3, val=1:3)
> #+end_src
>
> #+results: mytable
> | 1 | 1 |
> | 2 | 2 |
> | 3 | 3 |
>
> So, what I do is:
>
> #+call: insert_hline(fulltable=mytable(),after_row=1) :hlines yes :colnames no
>
> #+results: insert_hline(fulltable=mytable()
> | 1 | 1 |
> |---+---|
> | 2 | 2 |
> | 3 | 3 |
>
> But the #+results: name is shortened.
>
> So, the following won't produce another results block, but wrongly update
> the block above:
> #+call: insert_hline(fulltable=mytable(),after_row=2) :hlines yes :colnames no
>
>
> The problem seems to be the ")" within the parameter list stopping
> some parsing.
>
> Note: This works as expected
> #+call: insert_hline[:var fulltable=mytable() :var after_row=1]() :hlines yes :colnames no
>
> #+results: insert_hline[:var fulltable=mytable() :var after_row=1]()
> | 1 | 1 |
> |---+---|
> | 2 | 2 |
> | 3 | 3 |
>
> #+call: insert_hline[:var fulltable=mytable() :var after_row=2]() :hlines yes :colnames no
>
> #+results: insert_hline[:var fulltable=mytable() :var after_row=2]()
> | 1 | 1 |
> | 2 | 2 |
> |---+---|
> | 3 | 3 |
>
>
> Regards,
> Andreas
>
>
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [babel] BUG in call lines
  2012-03-22  8:42 [babel] BUG in call lines Andreas Leha
  2012-03-22 20:04 ` Marc-Oliver Ihm
@ 2012-03-26 11:20 ` Eric Schulte
  1 sibling, 0 replies; 3+ messages in thread
From: Eric Schulte @ 2012-03-26 11:20 UTC (permalink / raw)
  To: Andreas Leha; +Cc: emacs-orgmode

Hi,

Thanks for reporting this bug.  I've just pushed up a patch.

Cheers,

Andreas Leha <andreas.leha@med.uni-goettingen.de> writes:

> Hi all,
>
> there seems to be a bug in call lines:
>
> Suppose, I have a src block with two parameters:
>
> #+name: insert_hline
> #+header: :var fulltable=mytable() :var after_row=1
> #+begin_src emacs-lisp
>   (let ((rrr (cons (quote hline) fulltable))
>         (bottomrows (nthcdr after_row fulltable))
>         (toprows (reverse (nthcdr (- (length fulltable) after_row) (reverse fulltable)))))
>     (setcdr rrr bottomrows)
>     (setcdr (nthcdr (- after_row 1) fulltable) rrr)
>     fulltable)
>  #+end_src
>
> As first argument I would like to pass the results of a second
> source block:
> #+name: mytable
> #+begin_src R
>   data.frame(par=1:3, val=1:3)
> #+end_src
>
> #+results: mytable
> | 1 | 1 |
> | 2 | 2 |
> | 3 | 3 |
>
> So, what I do is:
>
> #+call: insert_hline(fulltable=mytable(),after_row=1) :hlines yes :colnames no
>
> #+results: insert_hline(fulltable=mytable()
> | 1 | 1 |
> |---+---|
> | 2 | 2 |
> | 3 | 3 |
>
> But the #+results: name is shortened.
>
> So, the following won't produce another results block, but wrongly update
> the block above:
> #+call: insert_hline(fulltable=mytable(),after_row=2) :hlines yes :colnames no
>
>
> The problem seems to be the ")" within the parameter list stopping
> some parsing.
>
> Note: This works as expected
> #+call: insert_hline[:var fulltable=mytable() :var after_row=1]() :hlines yes :colnames no
>
> #+results: insert_hline[:var fulltable=mytable() :var after_row=1]()
> | 1 | 1 |
> |---+---|
> | 2 | 2 |
> | 3 | 3 |
>
> #+call: insert_hline[:var fulltable=mytable() :var after_row=2]() :hlines yes :colnames no
>
> #+results: insert_hline[:var fulltable=mytable() :var after_row=2]()
> | 1 | 1 |
> | 2 | 2 |
> |---+---|
> | 3 | 3 |
>
>
> Regards,
> Andreas
>
>

-- 
Eric Schulte
http://cs.unm.edu/~eschulte/

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-03-26 14:03 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-22  8:42 [babel] BUG in call lines Andreas Leha
2012-03-22 20:04 ` Marc-Oliver Ihm
2012-03-26 11:20 ` Eric Schulte

Code repositories for project(s) associated with this inbox:

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).