all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [BUG] org-table-eval-formula mishandles semicolons in formulas [9.7-pre (release_9.6.14-1019-g5092ec @ /home/nick/src/emacs/org/org-mode/lisp/)]
@ 2024-01-12 23:34 Nick Dokos
  2024-01-13 12:53 ` Ihor Radchenko
  0 siblings, 1 reply; 4+ messages in thread
From: Nick Dokos @ 2024-01-12 23:34 UTC (permalink / raw)
  To: emacs-orgmode



Remember to cover the basics, that is, what you expected to happen and
what in fact did happen.  You don't know how to make a good report?  See

     https://orgmode.org/manual/Feedback.html#Feedback

Your bug report will be posted to the Org mailing list.
------------------------------------------------------------------------

`org-table-eval-formula' interprets *any* semicolon in a formula as the
beginning of a format specifier. So if the formula contains a literal
semicolon that is not a format specifier

    #+TBLFM: $3='(concat "COMMENT ON public.layout_forms." $1 " IS " (rc-sq $2) ";")

The problem is that `org-table-eval-formula' decides that the semicolon
is the beginning of a format specifier very early in the function and
splits off the "specifier" from the rest of the formula, leading to
errors when the truncated formula is evaluated later.

ThHere is a semi-reasonable workaround in that the regexp matches the
*last* semicolon, so we can add a semicolon at the end of the formula,
specifying an empty format, but the formula is not truncated any longer.
If it is decided that the code must not be changed, then maybe the
workaround could be added to the documentation (perhaps as a footnote to
section "Emacs Lisp forms as formulas").

This was reported by user `vfclists' on Emacs SE:

    https://emacs.stackexchange.com/questions/80062/is-it-because-this-org-table-formula-contains-double-quotes-it-doesnt-work
    

Emacs  : GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8)
 of 2023-12-28
Package: Org mode version 9.7-pre (release_9.6.14-1019-g5092ec @ /home/nick/src/emacs/org/org-mode/lisp/)
-- 
Nick




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

* Re: [BUG] org-table-eval-formula mishandles semicolons in formulas [9.7-pre (release_9.6.14-1019-g5092ec @ /home/nick/src/emacs/org/org-mode/lisp/)]
  2024-01-12 23:34 [BUG] org-table-eval-formula mishandles semicolons in formulas [9.7-pre (release_9.6.14-1019-g5092ec @ /home/nick/src/emacs/org/org-mode/lisp/)] Nick Dokos
@ 2024-01-13 12:53 ` Ihor Radchenko
  2024-05-19 11:12   ` Ihor Radchenko
  0 siblings, 1 reply; 4+ messages in thread
From: Ihor Radchenko @ 2024-01-13 12:53 UTC (permalink / raw)
  To: Nick Dokos; +Cc: emacs-orgmode

Nick Dokos <ndokos@gmail.com> writes:

> `org-table-eval-formula' interprets *any* semicolon in a formula as the
> beginning of a format specifier. So if the formula contains a literal
> semicolon that is not a format specifier
>
>     #+TBLFM: $3='(concat "COMMENT ON public.layout_forms." $1 " IS " (rc-sq $2) ";")
>
> The problem is that `org-table-eval-formula' decides that the semicolon
> is the beginning of a format specifier very early in the function and
> splits off the "specifier" from the rest of the formula, leading to
> errors when the truncated formula is evaluated later.

Confirmed.
Important.

> ThHere is a semi-reasonable workaround in that the regexp matches the
> *last* semicolon, so we can add a semicolon at the end of the formula,
> specifying an empty format, but the formula is not truncated any longer.
> If it is decided that the code must not be changed, then maybe the
> workaround could be added to the documentation (perhaps as a footnote to
> section "Emacs Lisp forms as formulas").
>
> This was reported by user `vfclists' on Emacs SE:
>     https://emacs.stackexchange.com/questions/80062/is-it-because-this-org-table-formula-contains-double-quotes-it-doesnt-work

We should eventually fix this bug. I do not think that we should add
workarounds into the manual.

The problem is that org-table.el code is fragile. A proper fix would
require rewriting formula parsing code to something more reliable.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


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

* Re: [BUG] org-table-eval-formula mishandles semicolons in formulas [9.7-pre (release_9.6.14-1019-g5092ec @ /home/nick/src/emacs/org/org-mode/lisp/)]
  2024-01-13 12:53 ` Ihor Radchenko
@ 2024-05-19 11:12   ` Ihor Radchenko
  2024-05-21  9:28     ` Ihor Radchenko
  0 siblings, 1 reply; 4+ messages in thread
From: Ihor Radchenko @ 2024-05-19 11:12 UTC (permalink / raw)
  To: Nick Dokos; +Cc: emacs-orgmode

Ihor Radchenko <yantar92@posteo.net> writes:

> Nick Dokos <ndokos@gmail.com> writes:
>
>> `org-table-eval-formula' interprets *any* semicolon in a formula as the
>> beginning of a format specifier. So if the formula contains a literal
>> semicolon that is not a format specifier
>>
>>     #+TBLFM: $3='(concat "COMMENT ON public.layout_forms." $1 " IS " (rc-sq $2) ";")
>>
>> The problem is that `org-table-eval-formula' decides that the semicolon
>> is the beginning of a format specifier very early in the function and
>> splits off the "specifier" from the rest of the formula, leading to
>> errors when the truncated formula is evaluated later.
>
> Confirmed.
> Important.

Fixed, on main.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=5af062511

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


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

* Re: [BUG] org-table-eval-formula mishandles semicolons in formulas [9.7-pre (release_9.6.14-1019-g5092ec @ /home/nick/src/emacs/org/org-mode/lisp/)]
  2024-05-19 11:12   ` Ihor Radchenko
@ 2024-05-21  9:28     ` Ihor Radchenko
  0 siblings, 0 replies; 4+ messages in thread
From: Ihor Radchenko @ 2024-05-21  9:28 UTC (permalink / raw)
  To: Nick Dokos; +Cc: emacs-orgmode

Ihor Radchenko <yantar92@posteo.net> writes:

>>>     #+TBLFM: $3='(concat "COMMENT ON public.layout_forms." $1 " IS " (rc-sq $2) ";")
> ...
> Fixed, on main.
> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=5af062511

Alas. We cannot restrict what to put after ";" in formulas, because it
can be interpreted as format spec for `format':

|  a |  b | percent of a in b |
|----+----+-------------------|
| 10 | 20 | #ERROR            |
| 20 | 30 | #ERROR            |
#+TBLFM: $3=($1/$2)*100;%.2f%%

So, your example 
#+TBLFM: $3='(concat "COMMENT ON public.layout_forms." $1 " IS " (rc-sq $2) ";")

is actually ambiguous - it may also be interpreted as ") format specifier.

You can solve the problem by putting an extra ; at the end of the
formula:
#+TBLFM: $3='(concat "COMMENT ON public.layout_forms." $1 " IS " (rc-sq $2) ";");

I added an example explaining this caveat to the manual.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=6799350a8

| 1 | 1; |
#+tblfm: $2='(concat $1 ";");

| 1 | ") |
#+tblfm: $2='(concat $1 ";")

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


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

end of thread, other threads:[~2024-05-21  9:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-12 23:34 [BUG] org-table-eval-formula mishandles semicolons in formulas [9.7-pre (release_9.6.14-1019-g5092ec @ /home/nick/src/emacs/org/org-mode/lisp/)] Nick Dokos
2024-01-13 12:53 ` Ihor Radchenko
2024-05-19 11:12   ` Ihor Radchenko
2024-05-21  9:28     ` Ihor Radchenko

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.