From 514ca96ad42605851b0e62e52a403d7e0e6604c5 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Fri, 22 Aug 2008 00:49:23 +0000 Subject: [PATCH] Monotone-Parent: 3beea562a57fe58bc0ec7f6ec1ea8b43840f6655 Monotone-Revision: ed0cae805a538abfe1c738e426b04f59baa43949 Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2008-08-22T00:49:23 Monotone-Branch: ca.inverse.sogo --- SoObjects/SOGo/NSString+Utilities.m | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/SoObjects/SOGo/NSString+Utilities.m b/SoObjects/SOGo/NSString+Utilities.m index db7ec95cd..a0e672c1f 100644 --- a/SoObjects/SOGo/NSString+Utilities.m +++ b/SoObjects/SOGo/NSString+Utilities.m @@ -161,12 +161,12 @@ static NSMutableCharacterSet *urlStartChars = nil; if (!urlNonEndingChars) { urlNonEndingChars = [NSMutableCharacterSet new]; - [urlNonEndingChars addCharactersInString: @"=,.:;\t \r\n"]; + [urlNonEndingChars addCharactersInString: @"=,.:;&\t \r\n"]; } if (!urlAfterEndingChars) { urlAfterEndingChars = [NSMutableCharacterSet new]; - [urlAfterEndingChars addCharactersInString: @"&[]\t \r\n"]; + [urlAfterEndingChars addCharactersInString: @"[]\t \r\n"]; } start = refRange.location; @@ -199,7 +199,7 @@ static NSMutableCharacterSet *urlStartChars = nil; NSMutableArray *newRanges; NSRange matchRange, currentUrlRange, rest; NSString *urlText, *newUrlText, *range; - unsigned int length, matchLength; + unsigned int length, matchLength, offset; int startLocation; if (!urlStartChars) @@ -224,7 +224,6 @@ static NSMutableCharacterSet *urlStartChars = nil; matchRange.location = startLocation + 1; currentUrlRange = [selfCopy _rangeOfURLInRange: matchRange]; - if ([ranges hasRangeIntersection: currentUrlRange]) rest.location = NSMaxRange(currentUrlRange); else @@ -240,18 +239,21 @@ static NSMutableCharacterSet *urlStartChars = nil; options: 0 range: rest]; } - // Make the substitutions, in reverse order - enumRanges = [newRanges reverseObjectEnumerator]; + // Make the substitutions, keep track of the new offset + offset = 0; + enumRanges = [newRanges objectEnumerator]; range = [enumRanges nextObject]; while (range) { - currentUrlRange = NSRangeFromString(range); + currentUrlRange = NSRangeFromString(range); + currentUrlRange.location += offset; urlText = [selfCopy substringFromRange: currentUrlRange]; if ([urlText hasPrefix: prefix]) prefix = @""; newUrlText = [NSString stringWithFormat: @"%@", prefix, urlText, urlText]; [selfCopy replaceCharactersInRange: currentUrlRange withString: newUrlText]; + offset += ([newUrlText length] - [urlText length]); // Add range for further substitutions currentUrlRange = NSMakeRange (currentUrlRange.location, [newUrlText length]);