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

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

[elpa] 43/255: paren matching


From: Eric Schulte
Subject: [elpa] 43/255: paren matching
Date: Sun, 16 Mar 2014 01:02:15 +0000

eschulte pushed a commit to branch go
in repository elpa.

commit 7507d888a4dbf1f11c23379aa8f187ce2d9e6f76
Author: Eric Schulte <address@hidden>
Date:   Fri May 18 15:05:49 2012 -0400

    paren matching
---
 sgf.el |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/sgf.el b/sgf.el
index 2d00c42..55e67cd 100644
--- a/sgf.el
+++ b/sgf.el
@@ -157,6 +157,21 @@
        (+ cont-p
           (if (string= "(" (substring (match-string 0 str)
                                       (1- (length (match-string 0 str)))))
+(defun closing-paren (str &optional index)
+  ;; return index of closing paren watching out for []
+  (save-match-data
+    (let ((paren-open 0)
+          (square-open 0))
+      (loop for n from (or index 0) to (1- (length str))
+         do (let ((last (when (> n 0) (aref str (1- n))))
+                  (char (aref str n)))
+              (cond
+                ((= char ?\[)                           (incf square-open))
+                ((and (= char ?\]) (not (= last ?\\)))  (decf square-open))
+                ((and (= char ?\() (zerop square-open)) (incf paren-open))
+                ((and (= char ?\)) (zerop square-open)) (decf paren-open))))
+         when (zerop paren-open) return n))))
+
               1 -1))))))
 
 (defun add-tree (cont-p tree-part res)
@@ -654,3 +669,8 @@
                              (let ((val (cdr prop)))
                                (and (sequencep val) (= 0 (length val)))))
                            (car sgf)))))
+
+(ert-deftest sgf-paren-matching ()
+  (let ((str "(a (b) [c \\] ) ] d)"))
+    (should (= (closing-paren str) (1- (length str))))
+    (should (= (closing-paren str 3) 5))))



reply via email to

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