Browse Source

Merge branch 'master' of orgmode.org:org-mode

Bastien Guerry 4 years ago
parent
commit
1ebac8923c
3 changed files with 46 additions and 8 deletions
  1. 1 1
      lisp/org-element.el
  2. 16 7
      lisp/ox.el
  3. 29 0
      testing/lisp/test-ox.el

+ 1 - 1
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

+ 16 - 7
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

+ 29 - 0
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