* [BUG] org-export-table-row-number off by one when special row present [9.6.23 ( @ /home/jet/.config/emacs/elpa/org-9.6.23/)] [not found] <CAF_DUeEgLW2atD=_Bq9xSMA3oTceaAeBxKt8wu69PeT6FtOVpA.ref@mail.gmail.com> @ 2024-03-31 18:38 ` Jeff Trull 2024-04-01 10:42 ` Ihor Radchenko 0 siblings, 1 reply; 4+ messages in thread From: Jeff Trull @ 2024-03-31 18:38 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 8451 bytes --] Consider this table: | Shape | Sides | |----------+-------| | Triangle | 3 | | Pentagon | 5 | |----------+-------| | Average | 4 | #+TBLFM: @4$2=vmean(@2..@3) org-export-table-row-number correctly returns 3 for the cell containing '4' (and the target of the formula) Now add a column alignment row: | Shape | Sides | | | <c> | |----------+-------| | Triangle | 3 | | Pentagon | 5 | |----------+-------| | Average | 4 | #+TBLFM: @5$2=vmean(@3..@4) org-export-table-row-number still returns 3 for the same cell, despite the extra row. I think this is inconsistent with the documentation of the function, which implies that only separator lines are considered when determining the count. Also note that from a user perspective, special rows (but not separators) are part of the row count. I did some initial investigation and determined that org-element-map is used to count the row numbers, and special rows are ignored in that function. I think this is the source of the issue. Emacs : GNU Emacs 29.3 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.33, cairo version 1.16.0) of 2024-03-26 Package: Org mode version 9.6.23 ( @ /home/jet/.config/emacs/elpa/org-9.6.23/) current state: ============== (setq org-link-elisp-confirm-function 'yes-or-no-p org-ditaa-jar-path "/usr/share/ditaa/ditaa.jar" org-bibtex-headline-format-function #[257 "\300 \236A\207" [:title] 3 "\n\n(fn ENTRY)"] org-persist-after-read-hook '(org-element--cache-persist-after-read) org-re-reveal-root "https://cdn.jsdelivr.net/npm/reveal.js@3.6.0" org-export-before-parsing-hook '(org-attach-expand-links org-re-reveal-prepare-tts) org-cycle-tab-first-hook '(org-babel-hide-result-toggle-maybe org-babel-header-arg-expand) org-archive-hook '(org-attach-archive-delete-maybe) org-ascii-format-drawer-function #[771 " \207" [] 4 "\n\n(fn NAME CONTENTS WIDTH)"] org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-show-empty-lines org-cycle-optimize-window-after-visibility-change org-cycle-display-inline-images) org-latex-listings-options '(("basicstyle" "\\footnotesize\\ttfamily") ("showstringspaces" "false") ("breaklines" "true")) org-persist-before-read-hook '(org-element--cache-persist-before-read) org-mode-hook '(#[0 "\301\211 \207" [imenu-create-index-function org-imenu-get-tree] 2] org-superstar-mode org-tempo-setup (lambda nil (electric-indent-local-mode -1)) #[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-fold-show-all append local] 5] #[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-babel-show-result-all append local] 5] org-babel-result-hide-spec org-babel-hide-all-hashes org-eldoc-load) org-babel-load-languages '((emacs-lisp . t) (dot . t) (ditaa . t) (shell . t)) org-latex-format-drawer-function #[514 "\207" [] 3 "\n\n(fn _ CONTENTS)"] org-latex-format-headline-function 'org-latex-format-headline-default-function org-confirm-shell-link-function 'yes-or-no-p org-html-format-drawer-function #[514 "\207" [] 3 "\n\n(fn NAME CONTENTS)"] outline-isearch-open-invisible-function 'outline-isearch-open-invisible org-latex-classes '(("beamer" "\\documentclass[11pt,aspectratio=169]{beamer}\n \\usenavigationsymbolstemplate{} % no navigation bar\n \\beamertemplateballitem % items have little balls" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")) ("article" "\\documentclass[11pt]{article}" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}") ("\\paragraph{%s}" . "\\paragraph*{%s}") ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) ("report" "\\documentclass[11pt]{report}" ("\\part{%s}" . "\\part*{%s}") ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")) ("book" "\\documentclass[11pt]{book}" ("\\part{%s}" . "\\part*{%s}") ("\\chapter{%s}" . "\\chapter*{%s}") ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}")) ) org-agenda-before-write-hook '(org-agenda-add-entry-text) org-latex-packages-alist '(("" "moresize") ("" "fancyvrb") ("" "inconsolata") ("" "tikz") ("" "color") ("" "listings")) org-src-mode-hook '(org-src-babel-configure-edit-buffer org-src-mode-configure-edit-buffer) org-confirm-elisp-link-function 'yes-or-no-p org-latex-src-block-backend t org-ditaa-eps-jar-path "/home/jet/.config/emacs/elpa/contrib/scripts/DitaaEps.jar" org-structure-template-alist '(("n" . "notes") ("a" . "export ascii") ("c" . "center") ("C" . "comment") ("e" . "example") ("E" . "export") ("h" . "export html") ("l" . "export latex") ("q" . "quote") ("s" . "src") ("v" . "verse")) org-speed-command-hook '(org-speed-command-activate org-babel-speed-command-activate) org-html-format-inlinetask-function 'org-html-format-inlinetask-default-function org-ascii-format-inlinetask-function 'org-ascii-format-inlinetask-default org-export-backends '(ascii html icalendar latex md confluence re-reveal) org-confirm-babel-evaluate nil org-fold-core-isearch-open-function 'org-fold-core--isearch-reveal org-re-reveal-title-slide "<h2>%t</h2><h2>%a</h2><h2>%d</h2>" org-latex-format-inlinetask-function 'org-latex-format-inlinetask-default-function org-persist-before-write-hook '(org-element--cache-persist-before-write) org-tab-first-hook '(org-babel-hide-result-toggle-maybe org-babel-header-arg-expand) org-link-shell-confirm-function 'yes-or-no-p org-babel-pre-tangle-hook '(save-buffer) org-agenda-loop-over-headlines-in-active-region nil org-occur-hook '(org-first-headline-recenter) org-metadown-hook '(org-babel-pop-to-session-maybe) org-link-parameters '(("attachment" :follow org-attach-follow :complete org-attach-complete-link) ("eww" :follow org-eww-open :store org-eww-store-link) ("rmail" :follow org-rmail-open :store org-rmail-store-link) ("mhe" :follow org-mhe-open :store org-mhe-store-link) ("irc" :follow org-irc-visit :store org-irc-store-link :export org-irc-export) ("info" :follow org-info-open :export org-info-export :store org-info-store-link :insert-description org-info-description-as-command) ("gnus" :follow org-gnus-open :store org-gnus-store-link) ("docview" :follow org-docview-open :export org-docview-export :store org-docview-store-link) ("bibtex" :follow org-bibtex-open :store org-bibtex-store-link) ("bbdb" :follow org-bbdb-open :export org-bbdb-export :complete org-bbdb-complete-link :store org-bbdb-store-link) ("w3m" :store org-w3m-store-link) ("doi" :follow org-link-doi-open :export org-link-doi-export) ("id" :follow org-id-open) ("subed" :store org-subed-store-link :follow org-subed-open) ("file+sys") ("file+emacs") ("shell" :follow org-link--open-shell) ("news" :follow #[514 "\301\300\302 Q \"\207" ["news" browse-url ":"] 6 "\n\n(fn URL ARG)"]) ("mailto" :follow #[514 "\301\300\302 Q \"\207" ["mailto" browse-url ":"] 6 "\n\n(fn URL ARG)"]) ("https" :follow #[514 "\301\300\302 Q \"\207" ["https" browse-url ":"] 6 "\n\n(fn URL ARG)"]) ("http" :follow #[514 "\301\300\302 Q \"\207" ["http" browse-url ":"] 6 "\n\n(fn URL ARG)"]) ("ftp" :follow #[514 "\301\300\302 Q \"\207" ["ftp" browse-url ":"] 6 "\n\n(fn URL ARG)"]) ("help" :follow org-link--open-help :store org-link--store-help) ("file" :complete org-link-complete-file) ("elisp" :follow org-link--open-elisp)) org-html-format-headline-function 'org-html-format-headline-default-function org-metaup-hook '(org-babel-load-in-session-maybe) org-tab-before-tab-emulation-hook '(org-tempo-complete-tag) ) [-- Attachment #2: Type: text/html, Size: 11037 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [BUG] org-export-table-row-number off by one when special row present [9.6.23 ( @ /home/jet/.config/emacs/elpa/org-9.6.23/)] 2024-03-31 18:38 ` [BUG] org-export-table-row-number off by one when special row present [9.6.23 ( @ /home/jet/.config/emacs/elpa/org-9.6.23/)] Jeff Trull @ 2024-04-01 10:42 ` Ihor Radchenko [not found] ` <CAF_DUeH1RR=xCGBoFspVTRt9Za=LaHWgMuzq9-Ki2qUZUpuQxw@mail.gmail.com> 2024-04-05 14:08 ` Ihor Radchenko 0 siblings, 2 replies; 4+ messages in thread From: Ihor Radchenko @ 2024-04-01 10:42 UTC (permalink / raw) To: Jeff Trull; +Cc: emacs-orgmode Jeff Trull <edaskel@att.net> writes: > Consider this table: > > ... > org-export-table-row-number correctly returns 3 for the cell containing '4' > (and the target of the formula) > > Now add a column alignment row: > > ... > | | <c> | > ... > org-export-table-row-number still returns 3 for the same cell, despite > the extra row. I think this is inconsistent with the documentation of > the function, which implies that only separator lines are considered > when determining the count. Also note that from a user perspective, > special rows (but not separators) are part of the row count. During export, table may be not the same as it appears in the original document - some rows may be omitted. `org-export-table-row-number' returns the coordinates in as-exported table, not in the original table. > I did some initial investigation and determined that org-element-map is > used to count the row numbers, and special rows are ignored in that > function. `org-element-map' by itself does not ignore special rows. It only ignores the AST elements that are marked to be ignored. In your example, with many built-in exporters, alignment rows are omitted from the export and thus `org-export-table-row-number' intentionally ignores them. So, there is no bug here. Or may it be that you encountered a different, more specific, problem? -- 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
[parent not found: <CAF_DUeH1RR=xCGBoFspVTRt9Za=LaHWgMuzq9-Ki2qUZUpuQxw@mail.gmail.com>]
* Re: [BUG] org-export-table-row-number off by one when special row present [9.6.23 ( @ /home/jet/.config/emacs/elpa/org-9.6.23/)] [not found] ` <CAF_DUeH1RR=xCGBoFspVTRt9Za=LaHWgMuzq9-Ki2qUZUpuQxw@mail.gmail.com> @ 2024-04-02 12:51 ` Ihor Radchenko 0 siblings, 0 replies; 4+ messages in thread From: Ihor Radchenko @ 2024-04-02 12:51 UTC (permalink / raw) To: Jeff Trull [-- Attachment #1: Type: text/plain, Size: 771 bytes --] Jeff Trull <edaskel@att.net> writes: >> During export, table may be not the same as it appears in the original >> document - some rows may be omitted. `org-export-table-row-number' >> returns the coordinates in as-exported table, not in the original table. >> > > Agreed. I believe this behavior contradicts its documentation string: > > "... Return value is zero-indexed and ignores separators. The function > returns nil > for special rows and separators." > > The language is different for what rows are ignored ("separators") and for > what cells it will > return nil ("special rows and separators"). This is consistent with the > user-facing addresses, > which do not consider separator rows, but do consider column alignment rows. What about the attached patch? [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-lisp-ox.el-org-export-table-row-number-Clarify-docst.patch --] [-- Type: text/x-patch, Size: 1050 bytes --] From 6457e6e3a9c112b9a1bc3a549a93f3cd6a64b2c3 Mon Sep 17 00:00:00 2001 Message-ID: <6457e6e3a9c112b9a1bc3a549a93f3cd6a64b2c3.1712062152.git.yantar92@posteo.net> From: Ihor Radchenko <yantar92@posteo.net> Date: Tue, 2 Apr 2024 15:49:01 +0300 Subject: [PATCH] lisp/ox.el (org-export-table-row-number): Clarify docstring --- lisp/ox.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/ox.el b/lisp/ox.el index c794c570f..8c7e092e3 100644 --- a/lisp/ox.el +++ b/lisp/ox.el @@ -5432,7 +5432,8 @@ (defun org-export-table-row-number (table-row info) "Return TABLE-ROW number. INFO is a plist used as a communication channel. Return value is zero-indexed and ignores separators. The function returns nil -for special rows and separators." +for separators and table rows that are marked to be ignored according +to the INFO plist." (when (eq (org-element-property :type table-row) 'standard) (let* ((cache (or (plist-get info :table-row-number-cache) (let ((table (make-hash-table :test #'eq))) -- 2.44.0 [-- Attachment #3: Type: text/plain, Size: 1368 bytes --] > In this case, it's not specific to any exporter. org-export--skip-p returns > true for column alignment rows with the following code: > > (table-cell > (and (org-export-table-has-special-column-p > (org-export-get-parent-table datum)) > (org-export-first-sibling-p datum options))) This part of the code is not for alignment rows, it is for special columns. > So these rows will be in the ignore-list for all exporters. This is no longer true on main. > ... And that's reasonable - when ignore-list is being used for > deciding what to export. The problem, as I see it, is that > org-export-table-row-number does not consider this when determining > the "address" of a cell. ?? `org-export-table-row-number' considers the ignore list because `org-element-map' considers it. > So, there is no bug here. >> > > I disagree :) and suggest the following change to org-export-row-number > (line 5390): > > info)) > > should become: > > (org-plist-delete info 'ignore-list))) > > which will make it consistent with its docstring and with user-facing > addresses. The docstring should be fixed, not the function behaviour. -- 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 related [flat|nested] 4+ messages in thread
* Re: [BUG] org-export-table-row-number off by one when special row present [9.6.23 ( @ /home/jet/.config/emacs/elpa/org-9.6.23/)] 2024-04-01 10:42 ` Ihor Radchenko [not found] ` <CAF_DUeH1RR=xCGBoFspVTRt9Za=LaHWgMuzq9-Ki2qUZUpuQxw@mail.gmail.com> @ 2024-04-05 14:08 ` Ihor Radchenko 1 sibling, 0 replies; 4+ messages in thread From: Ihor Radchenko @ 2024-04-05 14:08 UTC (permalink / raw) To: Jeff Trull; +Cc: emacs-orgmode Ihor Radchenko <yantar92@posteo.net> writes: > ... > So, there is no bug here. After discussing off-list, I have clarified several docstrings. Handled, on main. https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=d72feeb09 https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=b45b39326 -- 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-04-05 14:09 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <CAF_DUeEgLW2atD=_Bq9xSMA3oTceaAeBxKt8wu69PeT6FtOVpA.ref@mail.gmail.com> 2024-03-31 18:38 ` [BUG] org-export-table-row-number off by one when special row present [9.6.23 ( @ /home/jet/.config/emacs/elpa/org-9.6.23/)] Jeff Trull 2024-04-01 10:42 ` Ihor Radchenko [not found] ` <CAF_DUeH1RR=xCGBoFspVTRt9Za=LaHWgMuzq9-Ki2qUZUpuQxw@mail.gmail.com> 2024-04-02 12:51 ` Ihor Radchenko 2024-04-05 14:08 ` Ihor Radchenko
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).