// // M80AttributedLabelURL.m // M80AttributedLabel // // Created by amao on 13-8-31. // Copyright (c) 2013年 www.xiangwangfeng.com. All rights reserved. // #import "M80AttributedLabelURL.h" static NSString *M80URLExpression = @"((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[\\-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9\\.\\-]+|(?:www\\.|[\\-;:&=\\+\\$,\\w]+@)[A-Za-z0-9\\.\\-]+)((:[0-9]+)?)((?:\\/[\\+~%\\/\\.\\w\\-]*)?\\??(?:[\\-\\+=&;%@\\.\\w]*)#?(?:[\\.\\!\\/\\\\\\w]*))?)"; static M80CustomDetectLinkBlock customDetectBlock = nil; static NSString *M80URLExpressionKey = @"M80URLExpressionKey"; @implementation M80AttributedLabelURL + (M80AttributedLabelURL *)urlWithLinkData:(id)linkData range:(NSRange)range color:(UIColor *)color { M80AttributedLabelURL *url = [[M80AttributedLabelURL alloc]init]; url.linkData = linkData; url.range = range; url.color = color; return url; } + (NSArray *)detectLinks:(NSString *)plainText { if (customDetectBlock) { return customDetectBlock(plainText); } else { NSMutableArray *links = nil; if ([plainText length]) { links = [NSMutableArray array]; NSRegularExpression *urlRegex = [M80AttributedLabelURL urlExpression]; [urlRegex enumerateMatchesInString:plainText options:0 range:NSMakeRange(0, [plainText length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { NSRange range = result.range; NSString *text = [plainText substringWithRange:range]; NSArray* tempArray = [[LCSaveData getTAppUrl] componentsSeparatedByString:@","]; for (NSString* str in tempArray) { if([text rangeOfString:str].location !=NSNotFound) { M80AttributedLabelURL *link = [M80AttributedLabelURL urlWithLinkData:text range:range color:nil]; [links addObject:link]; } } }]; } return links; } } + (NSRegularExpression *)urlExpression { NSMutableDictionary *dict = [[NSThread currentThread] threadDictionary]; NSRegularExpression *exp = dict[M80URLExpressionKey]; if (exp == nil) { exp = [NSRegularExpression regularExpressionWithPattern:M80URLExpression options:NSRegularExpressionCaseInsensitive error:nil]; dict[M80URLExpressionKey] = exp; } return exp; } + (void)setCustomDetectMethod:(M80CustomDetectLinkBlock)block { customDetectBlock = [block copy]; } @end