je les ai mis à disposition Ici , ainsi que le script utilisé

<span class="emoticon airplane"> <samp> <a href="irc://irc.worldnet.net/#airplane">#airplane</a> </samp> </span> <span class="emoticon airplane"> <samp>#</samp> </span>
j'ai fait un .emoticon.smiley + .emoticon.smiley { dis
Microbug (./5) :
Un bug de Colloquy ? C'est Open Source non ?
- (void) performEmoticonSubstitution:(NSMutableAttributedString *) string {
if( ! [string length] ) return;
NSCharacterSet *escapeSet = [NSCharacterSet characterSetWithCharactersInString:@"^[]{}()\.$*+?|"];
NSEnumerator *keyEnumerator = [[self emoticonMappings] keyEnumerator];
NSEnumerator *objEnumerator = [[self emoticonMappings] objectEnumerator];
NSEnumerator *srcEnumerator = nil;
NSString *str = nil;
NSString *key = nil;
NSArray *obj = nil;
while( ( key = [keyEnumerator nextObject] ) && ( obj = [objEnumerator nextObject] ) ) {
srcEnumerator = [obj objectEnumerator];
while( ( str = [srcEnumerator nextObject] ) ) {
NSMutableString *search = [str mutableCopy];
[search escapeCharactersInSet:escapeSet];
AGRegex *regex = [[AGRegex alloc] initWithPattern:[NSString stringWithFormat:@"(?<=\s|^)%@(?=\s|$)", search]];
NSArray *matches = [regex findAllInString:[string string]];
NSEnumerator *enumerator = [matches objectEnumerator];
AGRegexMatch *match = nil;
while( ( match = [enumerator nextObject] ) ) {
NSRange foundRange = [match range];
NSString *startHTML = [string attribute:@"XHTMLStart" atIndex:foundRange.location effectiveRange:NULL];
NSString *endHTML = [string attribute:@"XHTMLEnd" atIndex:foundRange.location effectiveRange:NULL];
if( ! startHTML ) startHTML = @"";
if( ! endHTML ) endHTML = @"";
[string addAttribute:@"XHTMLStart" value:[startHTML stringByAppendingFormat:@"<span class=\"emoticon %@\"><samp>", key] range:foundRange];
[string addAttribute:@"XHTMLEnd" value:[@"</samp></span>" stringByAppendingString:endHTML] range:foundRange];
}
[search release];
[regex release];
}
}
}
if( ! [[NSUserDefaults standardUserDefaults] boolForKey:@"MVChatDisableLinkHighlighting"] ) { [messageString makeLinkAttributesAutomatically]; [self _hyperlinkRoomNames:messageString]; } [[self emoticons] performEmoticonSubstitution:messageString];
- (void) _hyperlinkRoomNames:(NSMutableAttributedString *) message {
if( ! message || ! [message string] ) return;
if( [[self connection] type] != MVChatConnectionIRCType ) return;
// catch IRC rooms like "#room" but not HTML colors like "#ab12ef" nor HTML entities like "‡" or "&"
AGRegex *regex = [AGRegex regexWithPattern:@"\B(?<!&)#(?![\da-fA-F]{6}\b|\d{1,3}\b)[\w-_.+&#]{2,}\b" options:AGRegexCaseInsensitive];
NSArray *matches = [regex findAllInString:[message string]];
NSEnumerator *enumerator = [matches objectEnumerator];
AGRegexMatch *match = nil;
while( ( match = [enumerator nextObject] ) ) {
NSRange foundRange = [match range];
id currentLink = [message attribute:NSLinkAttributeName atIndex:foundRange.location effectiveRange:NULL];
if( ! currentLink ) [message addAttribute:NSLinkAttributeName value:[NSString stringWithFormat:@"%@://%@/%@", [[self connection] urlScheme], [[self connection] server], [match group]] range:foundRange];
}
}