Browse Source

element: Improve table.el tables dectection

* lisp/org-element.el (org-element--current-element): Limit possible
false positives.
Nicolas Goaziou 3 years ago
parent
commit
97f1d8e340
1 changed files with 22 additions and 11 deletions
  1. 22 11
      lisp/org-element.el

+ 22 - 11
lisp/org-element.el

@@ -3950,26 +3950,37 @@ element it has to parse."
 	     ((or (looking-at "[ \t]*|")
 		  ;; There is no strict definition of a table.el
 		  ;; table.  Try to prevent false positive while being
-		  ;; quick.  Hence, we consider a table.el table is at
-		  ;; least one rule, any number of data lines
-		  ;; (starting with a vertical bar), and another rule.
+		  ;; quick.
 		  (let ((rule-regexp
 			 (rx (zero-or-more (any " \t"))
 			     "+"
 			     (one-or-more (one-or-more "-") "+")
 			     (zero-or-more (any " \t"))
 			     eol))
-			(non-table.el-data-line
+			(non-table.el-line
 			 (rx bol
 			     (zero-or-more (any " \t"))
-			     (or eol (not (any "| \t")))))
+			     (or eol (not (any "+| \t")))))
 			(next (line-beginning-position 2)))
-		    (and (looking-at rule-regexp)
-			 (save-excursion
-			   (end-of-line)
-			   (re-search-forward non-table.el-data-line limit t)
-			   (and (> (line-beginning-position) next)
-				(org-match-line rule-regexp))))))
+		    ;; Start with a full rule.
+		    (and
+		     (looking-at rule-regexp)
+		     (< next limit)	;no room for a table.el table
+		     (save-excursion
+		       (end-of-line)
+		       (cond
+			;; Must end with a full rule.
+			((not (re-search-forward non-table.el-line limit 'move))
+			 (beginning-of-line)
+			 (looking-at rule-regexp))
+			;; Ignore pseudo-tables with a single
+			;; rule.
+			((= next (line-beginning-position))
+			 nil)
+			;; Must end with a full rule.
+			(t
+			 (forward-line -1)
+			 (looking-at rule-regexp)))))))
 	      (org-element-table-parser limit affiliated))
 	     ;; List.
 	     ((looking-at (org-item-re))