diff options
author | Nicolas Goaziou <n.goaziou@gmail.com> | 2013-04-09 16:52:01 +0200 |
---|---|---|
committer | Nicolas Goaziou <n.goaziou@gmail.com> | 2013-04-09 16:52:41 +0200 |
commit | 5f4831556836148c1074929a754cbe6a1cb18b82 (patch) | |
tree | 374ddca0ebdc82a3b150a37b7144b757cd2736e0 | |
parent | 6ce2b72c9f2e19e75ba2ffe72bdce4eea9c9b5a8 (diff) | |
download | org-mode-5f4831556836148c1074929a754cbe6a1cb18b82.tar.gz |
ox: Add function returning row number in a table
* lisp/ox.el (org-export-table-row-number): New function.
(org-export-table-cell-address): Use new function.
* testing/lisp/test-ox.el: Add test.
-rw-r--r-- | lisp/ox.el | 23 | ||||
-rw-r--r-- | testing/lisp/test-ox.el | 29 |
2 files changed, 45 insertions, 7 deletions
@@ -4640,6 +4640,21 @@ INFO is a plist used as a communication channel." (org-export-table-row-ends-rowgroup-p table-row info) (= (org-export-table-row-group table-row info) 1))) +(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-based and ignores separators. The function returns nil for +special colums and separators." + (when (and (eq (org-element-property :type table-row) 'standard) + (not (org-export-table-row-is-special-p table-row info))) + (let ((number 0)) + (org-element-map (org-export-get-parent-table table-row) 'table-row + (lambda (row) + (cond ((eq row table-row) number) + ((eq (org-element-property :type row) 'standard) + (incf number) nil))) + info 'first-match)))) + (defun org-export-table-dimensions (table info) "Return TABLE dimensions. @@ -4677,13 +4692,7 @@ function returns nil for other cells." (eq (car (org-element-contents table-row)) table-cell))) (cons ;; Row number. - (let ((row-count 0)) - (org-element-map table 'table-row - (lambda (row) - (cond ((eq (org-element-property :type row) 'rule) nil) - ((eq row table-row) row-count) - (t (incf row-count) nil))) - info 'first-match)) + (org-export-table-row-number (org-export-get-parent table-cell) info) ;; Column number. (let ((col-count 0)) (org-element-map table-row 'table-cell diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el index d023845..6203f8b 100644 --- a/testing/lisp/test-ox.el +++ b/testing/lisp/test-ox.el @@ -1911,6 +1911,35 @@ Another text. (ref:text) (mapcar (lambda (row) (org-export-table-row-group row info)) (org-element-map tree 'table-row 'identity)))))) +(ert-deftest test-org-export/table-row-number () + "Test `org-export-table-row-number' specifications." + ;; Standard test. Number is 0-indexed. + (should + (equal '(0 1) + (org-test-with-parsed-data "| a | b | c |\n| d | e | f |" + (org-element-map tree 'table-row + (lambda (row) (org-export-table-row-number row info)) info)))) + ;; Number ignores separators. + (should + (equal '(0 1) + (org-test-with-parsed-data " +| a | b | c | +|---+---+---| +| d | e | f |" + (org-element-map tree 'table-row + (lambda (row) (org-export-table-row-number row info)) info)))) + ;; Number ignores special rows. + (should + (equal '(0 1) + (org-test-with-parsed-data " +| / | < | > | +| | b | c | +|---+-----+-----| +| | <c> | <c> | +| | e | f |" + (org-element-map tree 'table-row + (lambda (row) (org-export-table-row-number row info)) info))))) + (ert-deftest test-org-export/table-cell-width () "Test `org-export-table-cell-width' specifications." ;; 1. Width is primarily determined by width cookies. If no cookie |