From 4185aceefe55e09a4448bec1b870c129635dd0ae Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 18 Apr 2006 17:21:59 +0000 Subject: [PATCH] changed pregexp-replace[*] to accept a procedure as the last argument svn: r2706 --- collects/mzlib/pregexp.ss | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/collects/mzlib/pregexp.ss b/collects/mzlib/pregexp.ss index a2ddb07b79..6e493f69ab 100644 --- a/collects/mzlib/pregexp.ss +++ b/collects/mzlib/pregexp.ss @@ -655,17 +655,23 @@ (let* ((n (string-length str)) (pp (pregexp-match-positions pat str 0 n))) (if (not pp) str - (let ((ins-len (string-length ins)) (m-i (caar pp)) (m-n (cdar pp))) + (let ((m-i (caar pp)) (m-n (cdar pp))) (string-append (substring str 0 m-i) - (pregexp-replace-aux str ins ins-len pp) + (if (procedure? ins) + (apply ins + (map (lambda (p) + (substring str (car p) (cdr p))) + pp)) + (pregexp-replace-aux str ins (string-length ins) pp)) (substring str m-n n))))))) (define pregexp-replace* (lambda (pat str ins) (let ((pat (if (string? pat) (pregexp pat) pat)) (n (string-length str)) - (ins-len (string-length ins))) + (ins-len (and (string? ins) + (string-length ins)))) (let loop ((i 0) (r "")) (if (>= i n) r @@ -677,7 +683,12 @@ (string-append r (substring str i (caar pp)) - (pregexp-replace-aux str ins ins-len pp)))))))))) + (if (procedure? ins) + (apply ins + (map (lambda (p) + (substring str (car p) (cdr p))) + pp)) + (pregexp-replace-aux str ins ins-len pp))))))))))) (define pregexp-quote (lambda (s)