xmode.marker: more correct faster update-match-group clean-windows-x86-64
authorJohn Benediktsson <mrjbq7@gmail.com>
Wed, 10 Aug 2022 04:25:10 +0000 (21:25 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 10 Aug 2022 04:25:10 +0000 (21:25 -0700)
basis/xmode/marker/marker.factor

index 32fae3c3245f06b1b39eddd9a2e12a10fd6cf45a..a93283e29020935417bdf1faae8991ee2e4832f8 100644 (file)
@@ -110,8 +110,12 @@ M: regexp text-matches?
 : nth-match ( match regexp n -- slice/f )
     match-group-regexp [ skip-first-match ] [ first-match ] bi* ;
 
-: update-match-group ( str match regexp n -- str' )
-    [ nth-match ] [ CHAR: 1 + "$%c" sprintf ] bi swap replace ;
+:: update-match-group ( str match regexp n -- str' )
+    n H{ } [ CHAR: 1 + CHAR: $ swap "" 2sequence ] cache :> x
+    x str subseq-range :> ( from to )
+    from [
+        to str snip-slice match regexp n nth-match glue
+    ] [ str ] if* ;
 
 : update-match-groups ( str match regexp -- str' )
     [ >string ] dip