X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=basis%2Fxmode%2Fmarker%2Fmarker.factor;h=a93283e29020935417bdf1faae8991ee2e4832f8;hp=05e93b61548447f417e21c6a99e6a8d1837e2acf;hb=4984d1766c441d1dc2fa74f4f1f5ec794556c045;hpb=6525de645d43447ce0dbe3a5ff15df49678c99b1 diff --git a/basis/xmode/marker/marker.factor b/basis/xmode/marker/marker.factor index 05e93b6154..a93283e290 100644 --- a/basis/xmode/marker/marker.factor +++ b/basis/xmode/marker/marker.factor @@ -102,7 +102,7 @@ M: regexp text-matches? : match-group-regexp ( regexp n -- skip-regexp match-regexp ) [ [ options>> options>string ] [ raw>> ] bi ] dip CHAR: ( pick nth-index cut CHAR: ) over index 1 + head - rot '[ _ ] bi@ ; + rot '[ _ H{ } [ ] 2cache ] bi@ ; : skip-first-match ( match regexp -- tailseq ) first-match [ seq>> ] [ to>> ] bi tail ; @@ -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 @@ -171,14 +175,14 @@ PRIVATE> DEFER: get-rules -: get-always-rules ( vector/f ruleset -- vector/f ) - f swap rules>> at ?push-all ; +: get-always-rules ( ruleset -- vector/f ) + f swap rules>> at ; -: get-char-rules ( vector/f char ruleset -- vector/f ) - [ ch>upper ] dip rules>> at ?push-all ; +: get-char-rules ( char ruleset -- vector/f ) + [ ch>upper ] dip rules>> at ; : get-rules ( char ruleset -- seq ) - [ f ] 2dip [ get-char-rules ] keep get-always-rules ; + [ get-char-rules ] [ get-always-rules ] bi [ append ] when* ; GENERIC: handle-rule-start ( match-count rule -- )