Przeglądaj źródła

TBLFM remote ref: Improve indirection

* lisp/org-table.el (org-table-remote-reference-indirection): Use the
optional arg START of `string-match' to improve performance and to
avoid endless loop on user error.
Michael Brand 11 lat temu
rodzic
commit
9a5b8a7434
1 zmienionych plików z 11 dodań i 13 usunięć
  1. 11 13
      lisp/org-table.el

+ 11 - 13
lisp/org-table.el

@@ -5017,19 +5017,17 @@ For example \"remote($1, @>$2)\" => \"remote(year_2013, @>$1)\".
 This indirection works only with the format @ROW$COLUMN.  The
 format \"B3\" is not supported because it can not be
 distinguished from a plain table name or ID."
-  (let ((index-last -1) index-this)
-    (while (and (setq index-this
-		      (string-match (concat
-				     ;; Same as in `org-table-eval-formula'.
-				     "\\<remote([ \t]*\\("
-				     ;; Allow "$1", "@<", "$-1", "@<<$1" etc.
-				     "[@$][^,]+"
-				     ;; Same as in `org-table-eval-formula'.
-				     "\\)[ \t]*,[ \t]*\\([^\n)]+\\))")
-				    form))
-		;; Protect from last replace replaced itself.
-		(/= index-last index-this))
-      (setq index-last index-this)
+  (let ((start 0))
+    (while (string-match (concat
+			  ;; Same as in `org-table-eval-formula'.
+			  "\\<remote([ \t]*\\("
+			  ;; Allow "$1", "@<", "$-1", "@<<$1" etc.
+			  "[@$][^,)]+"
+			  ;; Same as in `org-table-eval-formula'.
+			  "\\)[ \t]*,[ \t]*\\([^\n)]+\\))")
+			 form
+			 start)
+      (setq start (match-end 0))
       ;; Substitute the remote reference with the value found in the
       ;; field.
       (setq form