emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [BUG] hline references on left side of table formula
@ 2013-05-01 17:27 Rick Frankel
  2013-09-02  8:10 ` Carsten Dominik
  0 siblings, 1 reply; 18+ messages in thread
From: Rick Frankel @ 2013-05-01 17:27 UTC (permalink / raw)
  To: Org-Mode

Hi-

I don't know if this is a bug or feature :), but if an hline reference
(@I, etc) is used on the left side of a calculation, it applies to ALL
columns in the row even if the column is specfied.

Here are some examples to show the results. I would expect all three
versions to generate the same results as the first example.

#+BEGIN_ORG
   * Absolute reference (expected results)
     | a | b |
     |---+---|
     | x | 1 |
     | y | 2 |
     |---+---|
     |   | 3 |
   #+TBLFM: @4$2=vsum(@I..@II)

   * hline reference
     | a     | b |
     |-------+---|
     | x     | 1 |
     | y     | 2 |
     |-------+---|
     | x + y | 3 |
   #+TBLFM: @II$2=vsum(@I..@II)

   * hline reference with full cell specification in sum
     | a | b |
     |---+---|
     | x | 1 |
     | y | 2 |
     |---+---|
     | 3 | 3 |
   #+TBLFM: @II$2=vsum(@I$2..@II$2)
   #+END_ORG

FWIW, I believe the problem is that `org-table-recalculate' is
matching lhs cell references explicitly against pure numeric
references ("@[0-9]+$[0-9]+") and therefore expands the lhs via
`org-expand-lhs-ranges' instead of expanding it with
`org-table-get-descriptor-line'

rick

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

* Re: [BUG] hline references on left side of table formula
  2013-05-01 17:27 [BUG] hline references on left side of table formula Rick Frankel
@ 2013-09-02  8:10 ` Carsten Dominik
  2013-09-25 17:57   ` [PATCH] Add check for assignment to hline relative references in table formulas Rick Frankel
  0 siblings, 1 reply; 18+ messages in thread
From: Carsten Dominik @ 2013-09-02  8:10 UTC (permalink / raw)
  To: Rick Frankel; +Cc: Org-Mode

Hi Rick,

hline-relative references on the left side of a table are currently not supported.  The fact that this is expanded is a bug.  A patch catching this case would be very welcome.

Regards

- Carsten

On May 1, 2013, at 7:27 PM, Rick Frankel <rick@rickster.com> wrote:

> Hi-
> 
> I don't know if this is a bug or feature :), but if an hline reference
> (@I, etc) is used on the left side of a calculation, it applies to ALL
> columns in the row even if the column is specfied.
> 
> Here are some examples to show the results. I would expect all three
> versions to generate the same results as the first example.
> 
> #+BEGIN_ORG
>  * Absolute reference (expected results)
>    | a | b |
>    |---+---|
>    | x | 1 |
>    | y | 2 |
>    |---+---|
>    |   | 3 |
>  #+TBLFM: @4$2=vsum(@I..@II)
> 
>  * hline reference
>    | a     | b |
>    |-------+---|
>    | x     | 1 |
>    | y     | 2 |
>    |-------+---|
>    | x + y | 3 |
>  #+TBLFM: @II$2=vsum(@I..@II)
> 
>  * hline reference with full cell specification in sum
>    | a | b |
>    |---+---|
>    | x | 1 |
>    | y | 2 |
>    |---+---|
>    | 3 | 3 |
>  #+TBLFM: @II$2=vsum(@I$2..@II$2)
>  #+END_ORG
> 
> FWIW, I believe the problem is that `org-table-recalculate' is
> matching lhs cell references explicitly against pure numeric
> references ("@[0-9]+$[0-9]+") and therefore expands the lhs via
> `org-expand-lhs-ranges' instead of expanding it with
> `org-table-get-descriptor-line'
> 
> rick
> 
> 

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

* [PATCH] Add check for assignment to hline relative references in table formulas.
  2013-09-02  8:10 ` Carsten Dominik
@ 2013-09-25 17:57   ` Rick Frankel
  2013-11-05 11:08     ` Bastien
  0 siblings, 1 reply; 18+ messages in thread
From: Rick Frankel @ 2013-09-25 17:57 UTC (permalink / raw)
  To: Carsten Dominik; +Cc: Org-Mode

* org-table.el (org-table-recalculate): Generate user error if
an hline relative reference is use on the LHS of a formula.
---
lisp/org-table.el | 2 ++
1 file changed, 2 insertions(+)

diff --git a/lisp/org-table.el b/lisp/org-table.el
index 246cf8d..a3197d3 100644
--- a/lisp/org-table.el
+++ b/lisp/org-table.el
@@ -3001,6 +3001,8 @@ known that the table will be realigned a little 
later anyway."
;; Insert constants in all formulas
(setq eqlist
	    (mapcar (lambda (x)
+		      (if (string-match "^@-?I+" (car x))
+			  (user-error "Can't assign to hline relative reference"))
		      (when (string-match "\\`$[<>]" (car x))
			(setq lhs1 (car x))
			(setq x (cons (substring
-- 
1.8.0

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

* Re: [BUG] hline references on left side of table formula
@ 2013-10-01  5:32 lompik
  2013-11-06  8:23 ` Bastien
  0 siblings, 1 reply; 18+ messages in thread
From: lompik @ 2013-10-01  5:32 UTC (permalink / raw)
  To: emacs-orgmode

Hi,

I was interested to use hline references on the left side. However I found out that it
is not completely unsupported.
When the left side consist of:
* single cells references, it does not work
* ranged cells, it works for me (org 8.0.3)

The patch below tranforms the single cell references to ranged cells .

However it still does not work for references like @+ or @- I$1.. , which can be solve 
using references like @I+1#1.

Thanks,


*** a/org-table.el Sat Jun 29 16:20:30 2013
--- b/org-table.el Tue Oct 1 00:23:35 2013
***************
*** 3227,3232 ****
--- 3227,3236 ----
(put-text-property 0 (length (caar res))
:orig-eqn e (caar res))))
(t
+ ;; if contains hline-reference and refers to fixed cell..make it range
+ (if (string-match "^@[+-]?I*[^.]*$" lhs )
+ (setq lhs (format "%s..%s" lhs lhs )))
+ 
(setq range (org-table-get-range lhs org-table-current-begin-pos
1 nil 'corners))
(setq r1 (nth 0 range) c1 (nth 1 range)


However, fields like @-I or @+II 

> 
> Hi Rick,
> 
> hline-relative references on the left side of a table are currently not 
> supported. The fact that this is expanded is a bug. A patch catching this 
> case would be very welcome.
> 
> Regards
> 
> - Carsten
> 
> On May 1, 2013, at 7:27 PM, Rick Frankel  wrote:
> 
> > Hi-
> > 
> > I don't know if this is a bug or feature :), but if an hline reference
> > (@I, etc) is used on the left side of a calculation, it applies to ALL
> > columns in the row even if the column is specfied.
> > 
> > Here are some examples to show the results. I would expect all three
> > versions to generate the same results as the first example.
> > 
> > #+BEGIN_ORG
> > * Absolute reference (expected results)
> > | a | b |
> > |---+---|
> > | x | 1 |
> > | y | 2 |
> > |---+---|
> > | | 3 |
> > #+TBLFM: @4$2=vsum(@address@hidden)
> > 
> > * hline reference
> > | a | b |
> > |-------+---|
> > | x | 1 |
> > | y | 2 |
> > |-------+---|
> > | x + y | 3 |
> > #+TBLFM: @II$2=vsum(@address@hidden)
> > 
> > * hline reference with full cell specification in sum
> > | a | b |
> > |---+---|
> > | x | 1 |
> > | y | 2 |
> > |---+---|
> > | 3 | 3 |
> > #+TBLFM: @II$2=vsum(@address@hidden)
> > #+END_ORG
> > 
> > FWIW, I believe the problem is that `org-table-recalculate' is
> > matching lhs cell references explicitly against pure numeric
> > references ("@[0-9]+$[0-9]+") and therefore expands the lhs via
> > `org-expand-lhs-ranges' instead of expanding it with
> > `org-table-get-descriptor-line'
> > 
> > rick
> > 
> > 
___________________________________________________________
Qu'y a-t-il ce soir à la télé ? D'un coup d'œil, visualisez le programme sur Voila.fr http://tv.voila.fr/programmes/chaines-tnt/ce-soir.html

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

* Re: [PATCH] Add check for assignment to hline relative references in table formulas.
  2013-09-25 17:57   ` [PATCH] Add check for assignment to hline relative references in table formulas Rick Frankel
@ 2013-11-05 11:08     ` Bastien
  2013-11-05 20:19       ` Achim Gratz
  0 siblings, 1 reply; 18+ messages in thread
From: Bastien @ 2013-11-05 11:08 UTC (permalink / raw)
  To: Rick Frankel; +Cc: Org-Mode, Carsten Dominik

Hi Rick,

Rick Frankel <rick@rickster.com> writes:

> * org-table.el (org-table-recalculate): Generate user error if
> an hline relative reference is use on the LHS of a formula.

Applied, thanks!

-- 
 Bastien

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

* Re: [PATCH] Add check for assignment to hline relative references in table formulas.
  2013-11-05 11:08     ` Bastien
@ 2013-11-05 20:19       ` Achim Gratz
  2013-11-05 20:55         ` Bastien
  2013-11-07 19:37         ` Achim Gratz
  0 siblings, 2 replies; 18+ messages in thread
From: Achim Gratz @ 2013-11-05 20:19 UTC (permalink / raw)
  To: emacs-orgmode

Bastien writes:
>> * org-table.el (org-table-recalculate): Generate user error if
>> an hline relative reference is use on the LHS of a formula.
>
> Applied, thanks!

Rick is listed as a contributor, so the TINYCHANGE marker is wrong.

Besides, that change breaks test-org-table/compare, which for whatever
reason uses just such a LHS construct.


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

SD adaptations for Waldorf Q V3.00R3 and Q+ V3.54R2:
http://Synth.Stromeko.net/Downloads.html#WaldorfSDada

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

* Re: [PATCH] Add check for assignment to hline relative references in table formulas.
  2013-11-05 20:19       ` Achim Gratz
@ 2013-11-05 20:55         ` Bastien
  2013-11-07 19:37         ` Achim Gratz
  1 sibling, 0 replies; 18+ messages in thread
From: Bastien @ 2013-11-05 20:55 UTC (permalink / raw)
  To: Achim Gratz, Rick Frankel; +Cc: emacs-orgmode

Hi,

Achim Gratz <Stromeko@nexgo.de> writes:

> Bastien writes:
>>> * org-table.el (org-table-recalculate): Generate user error if
>>> an hline relative reference is use on the LHS of a formula.
>>
>> Applied, thanks!
>
> Rick is listed as a contributor, so the TINYCHANGE marker is wrong.

Yes, I realized that.

> Besides, that change breaks test-org-table/compare, which for whatever
> reason uses just such a LHS construct.

Rick, can you have a look at this problem?

Thanks,

-- 
 Bastien

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

* Re: [BUG] hline references on left side of table formula
  2013-10-01  5:32 [BUG] hline references on left side of table formula lompik
@ 2013-11-06  8:23 ` Bastien
  2013-11-06 18:50   ` Rick Frankel
  0 siblings, 1 reply; 18+ messages in thread
From: Bastien @ 2013-11-06  8:23 UTC (permalink / raw)
  To: lompik; +Cc: emacs-orgmode

Hi,

lompik@voila.fr writes:

> I was interested to use hline references on the left side. However I found out that it
> is not completely unsupported.
> When the left side consist of:
> * single cells references, it does not work
> * ranged cells, it works for me (org 8.0.3)

(I'm not sure I fully understand the issue.)

> The patch below tranforms the single cell references to ranged cells .
>
> However it still does not work for references like @+ or @- I$1.. , which can be solve 
> using references like @I+1#1.

If you come up with a complete patch, please submit it by following
the guidelines here: http://orgmode.org/worg/org-contribute.html

Thanks!

-- 
 Bastien

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

* Re: [BUG] hline references on left side of table formula
  2013-11-06  8:23 ` Bastien
@ 2013-11-06 18:50   ` Rick Frankel
  2013-11-06 19:57     ` Achim Gratz
  2013-11-07  5:59     ` Michael Brand
  0 siblings, 2 replies; 18+ messages in thread
From: Rick Frankel @ 2013-11-06 18:50 UTC (permalink / raw)
  To: Bastien; +Cc: lompik, Stromeko, emacs-orgmode

On 2013-11-06 03:23, Bastien wrote:
> lompik@voila.fr writes:
> 
> I was interested to use hline references on the left side. However I 
> found out that it
> is not completely unsupported.
> When the left side consist of:
> * single cells references, it does not work
> * ranged cells, it works for me (org 8.0.3)
> 
> (I'm not sure I fully understand the issue.)
> 
> The patch below tranforms the single cell references to ranged cells .
> 
> However it still does not work for references like @+ or @- I$1.. ,
> which can be solve using references like @I+1#1.
> 
> If you come up with a complete patch, please submit it by following
> the guidelines here: http://orgmode.org/worg/org-contribute.html
> 
What he is saying, is that references like =@II$2=, or =@II+1$2= do not
work correctly on the left-hand side of a table format (verified by
carsten in a previous thread) which is why i created the patch to
disallow hline-relative references on th LHS.

However, he has found that ranged references line as =@II$2..@II+2$2=
do in fact work to reference a single cell on the left hand side on a
formula.

For example:

Given the input table:

| a | b |
|---+---|
| x | 1 |
| y | 2 |
|---+---|
|   |   |
|   |   |

The following results occur:

| a     | b |
|-------+---|
| x     | 1 |
| y     | 2 |
|-------+---|
| x + y | 3 |
| x + y | 3 |
#+TBLFM: @II$2=vsum(@I..@II)

| a | b |
|---+---|
| x | 1 |
| y | 2 |
|---+---|
|   | 3 |
|   |   |
#+TBLFM: @II$2..@II+1$2=vsum(@I..@II)

| a | b |
|---+---|
| x | 1 |
| y | 2 |
|---+---|
| 3 | 3 |
| 3 | 3 |
#+TBLFM: @II$2=vsum(@I$2..@II$2)

| a | b |
|---+---|
| x | 1 |
| y | 2 |
|---+---|
|   | 3 |
|   |   |
#+TBLFM: @II$2..@II+1$2=vsum(@I$2..@II$2)

So, perhaps my patch was premature, but should instead should check
for hline refs w/o ranges on the lhs. Here's a new patch to only
error-out if there is no range spec. Note that this also fixes Achim's
issue w/ the colnames test failing.


rick

-------------------- 8< --------------------
--- a/lisp/org-table.el
+++ b/lisp/org-table.el
@@ -3016,8 +3016,9 @@ known that the table will be realigned a little 
later anyway."
;; Insert constants in all formulas
(setq eqlist
(mapcar (lambda (x)
-             (if (string-match "^@-?I+" (car x))
-             (user-error "Can't assign to hline relative reference"))
+             (if (and (string-match "^@-?I+" (car x))
+                  (not (string-match "\.\.@" (car x))))
+             (user-error "Can't assign to hline relative reference 
without a range specification."))
(when (string-match "\\`$[<>]" (car x))
(setq lhs1 (car x))
(setq x (cons (substring

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

* Re: [BUG] hline references on left side of table formula
  2013-11-06 18:50   ` Rick Frankel
@ 2013-11-06 19:57     ` Achim Gratz
  2013-11-06 20:14       ` Achim Gratz
  2013-11-07  5:59     ` Michael Brand
  1 sibling, 1 reply; 18+ messages in thread
From: Achim Gratz @ 2013-11-06 19:57 UTC (permalink / raw)
  To: emacs-orgmode

Rick Frankel writes:
> What he is saying, is that references like =@II$2=, or =@II+1$2= do not
> work correctly on the left-hand side of a table format (verified by
> carsten in a previous thread) which is why i created the patch to
> disallow hline-relative references on th LHS.

They are working, sort of, by constructing an LHS range implicitly with
the cursor at the end of the table in the first column (equivalent of
@$).  This is hard to explain, but try a slightly more advance table:

| a | b |
|---+---|
| w | 1 |
| x | 2 |
|---+---|
|   |   |
|   |   |
|---+---|
| y | 3 |
| z | 4 |
|---+---|
|   |   |

with these formulas:
#+TBLFM: $=vsum(@-II..@-I)


> However, he has found that ranged references line as =@II$2..@II+2$2=
> do in fact work to reference a single cell on the left hand side on a
> formula.
>
> For example:
>
> Given the input table:
>
> | a | b |
> |---+---|
> | x | 1 |
> | y | 2 |
> |---+---|
> |   |   |
> |   |   |
>
> The following results occur:
>
> | a     | b |
> |-------+---|
> | x     | 1 |
> | y     | 2 |
> |-------+---|
> | x + y | 3 |
> | x + y | 3 |
> #+TBLFM: @II$2=vsum(@I..@II)
>
> | a | b |
> |---+---|
> | x | 1 |
> | y | 2 |
> |---+---|
> |   | 3 |
> |   |   |
> #+TBLFM: @II$2..@II+1$2=vsum(@I..@II)
>
> | a | b |
> |---+---|
> | x | 1 |
> | y | 2 |
> |---+---|
> | 3 | 3 |
> | 3 | 3 |
> #+TBLFM: @II$2=vsum(@I$2..@II$2)
>
> | a | b |
> |---+---|
> | x | 1 |
> | y | 2 |
> |---+---|
> |   | 3 |
> |   |   |
> #+TBLFM: @II$2..@II+1$2=vsum(@I$2..@II$2)
>
> So, perhaps my patch was premature, but should instead should check
> for hline refs w/o ranges on the lhs. Here's a new patch to only
> error-out if there is no range spec. Note that this also fixes Achim's
> issue w/ the colnames test failing.
>
>
> rick
>
> -------------------- 8< --------------------
> --- a/lisp/org-table.el
> +++ b/lisp/org-table.el
> @@ -3016,8 +3016,9 @@ known that the table will be realigned a little 
> later anyway."
> ;; Insert constants in all formulas
> (setq eqlist
> (mapcar (lambda (x)
> -             (if (string-match "^@-?I+" (car x))
> -             (user-error "Can't assign to hline relative reference"))
> +             (if (and (string-match "^@-?I+" (car x))
> +                  (not (string-match "\.\.@" (car x))))
> +             (user-error "Can't assign to hline relative reference 
> without a range specification."))
> (when (string-match "\\`$[<>]" (car x))
> (setq lhs1 (car x))
> (setq x (cons (substring
>
>
>
>
-- 

Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

Factory and User Sound Singles for Waldorf Blofeld:
http://Synth.Stromeko.net/Downloads.html#WaldorfSounds

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

* Re: [BUG] hline references on left side of table formula
  2013-11-06 19:57     ` Achim Gratz
@ 2013-11-06 20:14       ` Achim Gratz
  2013-11-07 15:01         ` Rick Frankel
  0 siblings, 1 reply; 18+ messages in thread
From: Achim Gratz @ 2013-11-06 20:14 UTC (permalink / raw)
  To: emacs-orgmode

Achim Gratz writes:
[...]
> with these formulas:
> #+TBLFM: $=vsum(@-II..@-I)

whoops, press C-c C-c in the wrong buffer.

I meant these formulas:

#+TBLFM: @$=vsum(@-II..@-I)
#+TBLFM: @II=vsum(@-II..@-I)
#+TBLFM: @III=vsum(@-II..@-I)
#+TBLFM: @IIII=vsum(@-II..@-I)
#+TBLFM: @II..$2=vsum(@-II..@-I)
#+TBLFM: @III..$2=vsum(@-II..@-I)
#+TBLFM: @IIII..$2=vsum(@-II..@-I)
#+TBLFM: @II+1..@II$2=vsum(@-II..@-I)
#+TBLFM: @II$2..@II+1$2=vsum(@-II..@-I)

Some of the results are useful when your table has a certain, even
though in general this does the wrong thing as Carsten said.  I'm not
really having an opinion on whether this should be an error (as your
previous patch does, which should then add a correction to the test that
is now failing) or if some / all of this should stay allowed until
somebody musters the time to fix it properly (I think this would amount
to re-implementing a good part of what is org-table).


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

Wavetables for the Waldorf Blofeld:
http://Synth.Stromeko.net/Downloads.html#BlofeldUserWavetables

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

* Re: [BUG] hline references on left side of table formula
  2013-11-06 18:50   ` Rick Frankel
  2013-11-06 19:57     ` Achim Gratz
@ 2013-11-07  5:59     ` Michael Brand
  2013-11-07 14:40       ` Rick Frankel
  1 sibling, 1 reply; 18+ messages in thread
From: Michael Brand @ 2013-11-07  5:59 UTC (permalink / raw)
  To: Rick Frankel; +Cc: Bastien, lompik, Achim Gratz, Org Mode

Hi Rick

On Wed, Nov 6, 2013 at 7:50 PM, Rick Frankel <rick@rickster.com> wrote:
> +                  (not (string-match "\.\.@" (car x))))

This would be the same as

> +                  (not (string-match "..@" (car x))))

but you meant

> +                  (not (string-match "\\.\\.@" (car x))))

Michael

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

* Re: [BUG] hline references on left side of table formula
  2013-11-07  5:59     ` Michael Brand
@ 2013-11-07 14:40       ` Rick Frankel
  0 siblings, 0 replies; 18+ messages in thread
From: Rick Frankel @ 2013-11-07 14:40 UTC (permalink / raw)
  To: emacs-orgmode

On 2013-11-07 00:59, Michael Brand wrote:
> On Wed, Nov 6, 2013 at 7:50 PM, Rick Frankel <rick@rickster.com> wrote:
> +                  (not (string-match "\.\.@" (car x))))
> 
> This would be the same as
> 
> +                  (not (string-match "..@" (car x))))
> 
> but you meant
> 
> +                  (not (string-match "\\.\\.@" (car x))))
> 

Of course, you are right.

rick

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

* Re: [BUG] hline references on left side of table formula
  2013-11-06 20:14       ` Achim Gratz
@ 2013-11-07 15:01         ` Rick Frankel
  2013-11-07 19:16           ` Achim Gratz
  0 siblings, 1 reply; 18+ messages in thread
From: Rick Frankel @ 2013-11-07 15:01 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 2336 bytes --]

On 2013-11-06 15:14, Achim Gratz wrote:
> Achim Gratz writes:
> [...]
> with these formulas:
> #+TBLFM: $=vsum(@-II..@-I)
> 
> whoops, press C-c C-c in the wrong buffer.
> 
> I meant these formulas:
> 
> #+TBLFM: @$=vsum(@-II..@-I)
> #+TBLFM: @II=vsum(@-II..@-I)
> #+TBLFM: @III=vsum(@-II..@-I)
> #+TBLFM: @IIII=vsum(@-II..@-I)
> #+TBLFM: @II..$2=vsum(@-II..@-I)
> #+TBLFM: @III..$2=vsum(@-II..@-I)
> #+TBLFM: @IIII..$2=vsum(@-II..@-I)
> #+TBLFM: @II+1..@II$2=vsum(@-II..@-I)
> #+TBLFM: @II$2..@II+1$2=vsum(@-II..@-I)
> 
> Some of the results are useful when your table has a certain, even
> though in general this does the wrong thing as Carsten said.  I'm not
> really having an opinion on whether this should be an error (as your
> previous patch does, which should then add a correction to the test 
> that
> is now failing) or if some / all of this should stay allowed until
> somebody musters the time to fix it properly (I think this would amount
> to re-implementing a good part of what is org-table).


Ok, i see what's happening in your examples (a testing org file
attached), though i question the usefullness of most of the results ;).

The updated patch attached to the previous email (fixed as pointed out
by michael):

--- a/lisp/org-table.el
+++ b/lisp/org-table.el
@@ -3016,8 +3016,9 @@ known that the table will be realigned a little 
later anyway."
;; Insert constants in all formulas
(setq eqlist
(mapcar (lambda (x)
-             (if (string-match "^@-?I+" (car x))
-             (user-error "Can't assign to hline relative reference"))
+             (if (and (string-match "^@-?I+" (car x))
+                  (not (string-match "\\.\\.@" (car x))))
+             (user-error "Can't assign to hline relative reference 
without a range specification."))
(when (string-match "\\`$[<>]" (car x))
(setq lhs1 (car x))
(setq x (cons (substring

Both fixes the testing issue and allows what seems to me to be the
most relevant use-case.

I have no real position on whether the best solution is to back out
the change, or modify it as above to make the test pass and allow the
logical usecase.

If the first, I think it would be useful for the documentation to
(somehow) explain what happens if an explicit column specificaton is
made without a corresponding range.

Please chime in on which patch should be applied.

rick

[-- Attachment #2: tblref.org --]
[-- Type: text/plain, Size: 3758 bytes --]

* Code
:PROPERTIES:
:eval:     never
:END:
#+name: table
#+BEGIN_SRC emacs-lisp :results silent :eval yes
"| a | b |
|---+---|
| w | 1 |
| x | 2 |
|---+---|
|   |   |
|   |   |
|---+---|
| y | 3 |
| z | 4 |
|---+---|
|   |   |"
#+END_SRC
#+name: expand-tables
#+BEGIN_SRC emacs-lisp
  (save-excursion
      (while (re-search-forward org-table-TBLFM-begin-regexp)
        (org-table-calc-current-TBLFM)))
#+END_SRC
#+name: generate-tables
#+BEGIN_SRC emacs-lisp :var table=table :results wrap
  (mapconcat
   (lambda (fm)
     (mapconcat
      'identity (list (concat "**" (substring fm 8)) table fm) "\n"))
   (list "#+TBLFM: @$=vsum(@-II..@-I)"
         "#+TBLFM: @II=vsum(@-II..@-I)"
         "#+TBLFM: @III=vsum(@-II..@-I)"
         "#+TBLFM: @IIII=vsum(@-II..@-I)"
         "#+TBLFM: @II..$2=vsum(@-II..@-I)"
         "#+TBLFM: @III..$2=vsum(@-II..@-I)"
         "#+TBLFM: @IIII..$2=vsum(@-II..@-I)"
         "#+TBLFM: @II+1..@II$2=vsum(@-II..@-I)"
         "#+TBLFM: @II$2..@II+1$2=vsum(@-II..@-I)") "\n")
#+END_SRC

* Eval me! (=\C-c\C-v\C-s=)
:PROPERTIES:
:ID: EVAL-ME
:END:
#+name: call-generate
#+call: generate-tables[:eval yes](table=table) :results wrap
#+call: expand-tables[:eval yes]() :results silent

#+RESULTS: call-generate
:RESULTS:
** @$=vsum(@-II..@-I)
| a     | b |
|-------+---|
| w     | 1 |
| x     | 2 |
|-------+---|
|       |   |
|       |   |
|-------+---|
| y     | 3 |
| z     | 4 |
|-------+---|
| y + z |   |
#+TBLFM: @$=vsum(@-II..@-I)
** @II=vsum(@-II..@-I)
| a                             | b |
|-------------------------------+---|
| w                             | 1 |
| x                             | 2 |
|-------------------------------+---|
| w + x                         |   |
| w + x                         |   |
|-------------------------------+---|
| w + x + w + x                 | 3 |
| w + x + w + x                 | 4 |
|-------------------------------+---|
| w + x + w + x + w + x + w + x |   |
#+TBLFM: @II=vsum(@-II..@-I)
** @III=vsum(@-II..@-I)
| a | b |
|---+---|
| w | 1 |
| x | 2 |
|---+---|
|   |   |
|   |   |
|---+---|
| 0 | 3 |
| 0 | 4 |
|---+---|
| 0 |   |
#+TBLFM: @III=vsum(@-II..@-I)
** @IIII=vsum(@-II..@-I)
| a     | b |
|-------+---|
| w     | 1 |
| x     | 2 |
|-------+---|
|       |   |
|       |   |
|-------+---|
| y     | 3 |
| z     | 4 |
|-------+---|
| y + z |   |
#+TBLFM: @IIII=vsum(@-II..@-I)
** @II..$2=vsum(@-II..@-I)
| a                             |  b |
|-------------------------------+----|
| w                             |  1 |
| x                             |  2 |
|-------------------------------+----|
| w + x                         |  3 |
| w + x                         |  3 |
|-------------------------------+----|
| w + x + w + x                 |  6 |
| w + x + w + x                 |  6 |
|-------------------------------+----|
| w + x + w + x + w + x + w + x | 12 |
#+TBLFM: @II..$2=vsum(@-II..@-I)
** @III..$2=vsum(@-II..@-I)
| a | b |
|---+---|
| w | 1 |
| x | 2 |
|---+---|
|   |   |
|   |   |
|---+---|
| 0 | 0 |
| 0 | 0 |
|---+---|
| 0 | 0 |
#+TBLFM: @III..$2=vsum(@-II..@-I)
** @IIII..$2=vsum(@-II..@-I)
| a     | b |
|-------+---|
| w     | 1 |
| x     | 2 |
|-------+---|
|       |   |
|       |   |
|-------+---|
| y     | 3 |
| z     | 4 |
|-------+---|
| y + z | 7 |
#+TBLFM: @IIII..$2=vsum(@-II..@-I)
** @II+1..@II$2=vsum(@-II..@-I)
| a     | b |
|-------+---|
| w     | 1 |
| x     | 2 |
|-------+---|
| w + x | 3 |
|       |   |
|-------+---|
| y     | 3 |
| z     | 4 |
|-------+---|
|       |   |
#+TBLFM: @II+1..@II$2=vsum(@-II..@-I)
** @II$2..@II+1$2=vsum(@-II..@-I)
| a | b |
|---+---|
| w | 1 |
| x | 2 |
|---+---|
|   | 3 |
|   |   |
|---+---|
| y | 3 |
| z | 4 |
|---+---|
|   |   |
#+TBLFM: @II$2..@II+1$2=vsum(@-II..@-I)
:END:


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

* Re: [BUG] hline references on left side of table formula
  2013-11-07 15:01         ` Rick Frankel
@ 2013-11-07 19:16           ` Achim Gratz
  0 siblings, 0 replies; 18+ messages in thread
From: Achim Gratz @ 2013-11-07 19:16 UTC (permalink / raw)
  To: emacs-orgmode

Rick Frankel writes:
> Ok, i see what's happening in your examples (a testing org file
> attached), though i question the usefullness of most of the results ;).

I tend to agree, but as the test case shows anything that does work and
produces the intended results will eventually have at least one user.
Three useful formulas that don't follow the pattern your patch is
checking for are:

#+TBLFM: @-I=vsum(@I$2..@II$2)
#+TBLFM: @-I$>=vsum(@I$2..@II$2)
#+TBLFM: @-I$>..$>=vsum(@I$2..@II$2)

i.e. when your table is structured to put the results under the last
hline.


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

Wavetables for the Terratec KOMPLEXER:
http://Synth.Stromeko.net/Downloads.html#KomplexerWaves

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

* Re: [PATCH] Add check for assignment to hline relative references in table formulas.
  2013-11-05 20:19       ` Achim Gratz
  2013-11-05 20:55         ` Bastien
@ 2013-11-07 19:37         ` Achim Gratz
  2013-11-07 21:09           ` Bastien
  2013-11-08 11:09           ` Michael Brand
  1 sibling, 2 replies; 18+ messages in thread
From: Achim Gratz @ 2013-11-07 19:37 UTC (permalink / raw)
  To: emacs-orgmode

Achim Gratz writes:
> Besides, that change breaks test-org-table/compare, which for whatever
> reason uses just such a LHS construct.

I've fixed the failing test since it wasn't checking hline expressions
and hence should not have relied on undocumented behaviour in the first
place.


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

Factory and User Sound Singles for Waldorf rackAttack:
http://Synth.Stromeko.net/Downloads.html#WaldorfSounds

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

* Re: [PATCH] Add check for assignment to hline relative references in table formulas.
  2013-11-07 19:37         ` Achim Gratz
@ 2013-11-07 21:09           ` Bastien
  2013-11-08 11:09           ` Michael Brand
  1 sibling, 0 replies; 18+ messages in thread
From: Bastien @ 2013-11-07 21:09 UTC (permalink / raw)
  To: Achim Gratz; +Cc: emacs-orgmode

Achim Gratz <Stromeko@nexgo.de> writes:

> Achim Gratz writes:
>> Besides, that change breaks test-org-table/compare, which for whatever
>> reason uses just such a LHS construct.
>
> I've fixed the failing test since it wasn't checking hline expressions
> and hence should not have relied on undocumented behaviour in the first
> place.

Thanks for the fix Achim.

-- 
 Bastien

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

* Re: [PATCH] Add check for assignment to hline relative references in table formulas.
  2013-11-07 19:37         ` Achim Gratz
  2013-11-07 21:09           ` Bastien
@ 2013-11-08 11:09           ` Michael Brand
  1 sibling, 0 replies; 18+ messages in thread
From: Michael Brand @ 2013-11-08 11:09 UTC (permalink / raw)
  To: Achim Gratz; +Cc: Org Mode

Hi Achim

On Thu, Nov 7, 2013 at 8:37 PM, Achim Gratz <Stromeko@nexgo.de> wrote:
> I've fixed the failing test since it wasn't checking hline expressions
> and hence should not have relied on undocumented behaviour in the first
> place.

I agree that testing of "LHS hline ref range" and testing of something
else (in this case "comparison") at the same time in the same
ert-deftest has also disadvantages. But why did you only remove test
coverage of "LHS hline ref range" instead of move it into a new
ert-deftest?

Michael

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

end of thread, other threads:[~2013-11-08 11:09 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-05-01 17:27 [BUG] hline references on left side of table formula Rick Frankel
2013-09-02  8:10 ` Carsten Dominik
2013-09-25 17:57   ` [PATCH] Add check for assignment to hline relative references in table formulas Rick Frankel
2013-11-05 11:08     ` Bastien
2013-11-05 20:19       ` Achim Gratz
2013-11-05 20:55         ` Bastien
2013-11-07 19:37         ` Achim Gratz
2013-11-07 21:09           ` Bastien
2013-11-08 11:09           ` Michael Brand
  -- strict thread matches above, loose matches on Subject: below --
2013-10-01  5:32 [BUG] hline references on left side of table formula lompik
2013-11-06  8:23 ` Bastien
2013-11-06 18:50   ` Rick Frankel
2013-11-06 19:57     ` Achim Gratz
2013-11-06 20:14       ` Achim Gratz
2013-11-07 15:01         ` Rick Frankel
2013-11-07 19:16           ` Achim Gratz
2013-11-07  5:59     ` Michael Brand
2013-11-07 14:40       ` Rick Frankel

Code repositories for project(s) associated with this public 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).