]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/xmode/marker/marker.factor
xmode.marker: more correct faster update-match-group
[factor.git] / basis / xmode / marker / marker.factor
index 2b09ffdd5536b4bb1aa2dc3a26eeb839378a9697..a93283e29020935417bdf1faae8991ee2e4832f8 100644 (file)
@@ -111,12 +111,14 @@ M: regexp text-matches?
     match-group-regexp [ skip-first-match ] [ first-match ] bi* ;
 
 :: update-match-group ( str match regexp n -- str' )
-    n H{ } [ 1 + CHAR: $ swap "" 2sequence ] cache :> x
-    x str subseq? [
-        x match "" like regexp n nth-match str replace
-    ] [ str ] if ;
+    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
     dup #match-groups [ update-match-group ] 2with each-integer ;
 
 GENERIC: fixup-end ( match regexp end -- end' )