From 6ce2b72c9f2e19e75ba2ffe72bdce4eea9c9b5a8 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Tue, 9 Apr 2013 16:16:04 +0200 Subject: [PATCH 1/2] org-element: Parse table cells with missing ending space * lisp/org-element.el (org-element-table-cell-successor): Parse table cells with missing ending space. --- lisp/org-element.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index e09d2cb52..73d0b46c9 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -3393,7 +3393,7 @@ LIMIT bounds the search. Return value is a cons cell whose CAR is `table-cell' and CDR is beginning position." - (when (looking-at "[ \t]*.*?[ \t]+|") (cons 'table-cell (point)))) + (when (looking-at "[ \t]*.*?[ \t]*|") (cons 'table-cell (point)))) ;;;; Target From 5f4831556836148c1074929a754cbe6a1cb18b82 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Tue, 9 Apr 2013 16:52:01 +0200 Subject: [PATCH 2/2] 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. --- lisp/ox.el | 23 ++++++++++++++++------- testing/lisp/test-ox.el | 29 +++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/lisp/ox.el b/lisp/ox.el index 22da0b337..7f33755d8 100644 --- a/lisp/ox.el +++ b/lisp/ox.el @@ -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 d02384566..6203f8b1d 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 | +|---+-----+-----| +| | | | +| | 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