xmode.marker: adding a better matching paren finder
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 12 Aug 2022 06:06:38 +0000 (23:06 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 12 Aug 2022 06:06:38 +0000 (23:06 -0700)
basis/xmode/marker/marker.factor

index 204e108f3f59a4ddbe89a399ffc7b8b190abf4b6..0fbeb2ef2c427724017a581125c7646525a17982 100644 (file)
@@ -103,8 +103,17 @@ M: regexp text-matches?
 : nth-group-start ( n raw -- n )
     [ -1 ] 2dip '[ dup [ 1 + _ group-start ] when ] times ;
 
+: matching-paren ( str -- to )
+    0 swap [
+        {
+            { CHAR: ( [ 1 + ] }
+            { CHAR: ) [ 1 - ] }
+            [ drop ]
+        } case dup zero?
+    ] find drop nip ;
+
 : nth-group ( n raw -- before nth )
-    [ nth-group-start ] keep swap cut CHAR: ) over index 1 + head ;
+    [ nth-group-start ] keep swap cut dup matching-paren 1 + head ;
 
 : match-group-regexp ( regexp n -- skip-regexp match-regexp )
     [ [ options>> options>string ] [ raw>> ] bi ] dip swap