emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals-release/org 97f1d8e 4/4: element: Improve table.el tabl


From: Stefan Monnier
Subject: [elpa] externals-release/org 97f1d8e 4/4: element: Improve table.el tables dectection
Date: Tue, 22 Dec 2020 16:13:09 -0500 (EST)

branch: externals-release/org
commit 97f1d8e34012c4181f587657a0c9cb39477ad997
Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
Commit: Nicolas Goaziou <mail@nicolasgoaziou.fr>

    element: Improve table.el tables dectection
    
    * lisp/org-element.el (org-element--current-element): Limit possible
    false positives.
---
 lisp/org-element.el | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/lisp/org-element.el b/lisp/org-element.el
index 8e09e32..0830423 100644
--- a/lisp/org-element.el
+++ b/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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]