| @@ -8,6 +8,8 @@ | |||
| /* Begin PBXBuildFile section */ | |||
| 8657E6E21C2B55B900BD4E50 /* IRC_Numerics.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8657E6E11C2B55B900BD4E50 /* IRC_Numerics.plist */; }; | |||
| 86627E21276648E400AEFEB7 /* NSData+SA_NSDataExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 86627E1F276648E400AEFEB7 /* NSData+SA_NSDataExtensions.h */; }; | |||
| 86627E22276648E400AEFEB7 /* NSData+SA_NSDataExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 86627E20276648E400AEFEB7 /* NSData+SA_NSDataExtensions.m */; }; | |||
| 86769D6D1C94DC5300B86A72 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 86769D5B1C94DC5300B86A72 /* config.h */; }; | |||
| 86769D6E1C94DC5300B86A72 /* dcc.h in Headers */ = {isa = PBXBuildFile; fileRef = 86769D5C1C94DC5300B86A72 /* dcc.h */; }; | |||
| 86769D6F1C94DC5300B86A72 /* libirc_errors.h in Headers */ = {isa = PBXBuildFile; fileRef = 86769D5D1C94DC5300B86A72 /* libirc_errors.h */; }; | |||
| @@ -24,8 +26,6 @@ | |||
| 86B0D3ED22C5FF1300E60877 /* NSArray+SA_NSArrayExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 86B0D3EB22C5FF1300E60877 /* NSArray+SA_NSArrayExtensions.m */; }; | |||
| 86BAE5A1232ABFD200936147 /* NSIndexSet+SA_NSIndexSetExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 86BAE59F232ABFD200936147 /* NSIndexSet+SA_NSIndexSetExtensions.m */; }; | |||
| 86BAE5A2232ABFD200936147 /* NSIndexSet+SA_NSIndexSetExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 86BAE5A0232ABFD200936147 /* NSIndexSet+SA_NSIndexSetExtensions.h */; }; | |||
| 86D02CD6275B79FB00876E93 /* NSData+SA_NSDataExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D02CD4275B79FB00876E93 /* NSData+SA_NSDataExtensions.h */; }; | |||
| 86D02CD7275B79FB00876E93 /* NSData+SA_NSDataExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 86D02CD5275B79FB00876E93 /* NSData+SA_NSDataExtensions.m */; }; | |||
| 86D02CE0275B9E6B00876E93 /* NSString+SA_NSStringExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D02CDE275B9E6B00876E93 /* NSString+SA_NSStringExtensions.h */; }; | |||
| 86D02CE1275B9E6B00876E93 /* NSString+SA_NSStringExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 86D02CDF275B9E6B00876E93 /* NSString+SA_NSStringExtensions.m */; }; | |||
| 86F2EFF81C21F81900B033A4 /* IRCClientChannel_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86F2EFF11C21F81900B033A4 /* IRCClientChannel_Private.h */; }; | |||
| @@ -39,6 +39,8 @@ | |||
| /* Begin PBXFileReference section */ | |||
| 8657E6E11C2B55B900BD4E50 /* IRC_Numerics.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = IRC_Numerics.plist; sourceTree = "<group>"; }; | |||
| 86627E1F276648E400AEFEB7 /* NSData+SA_NSDataExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSData+SA_NSDataExtensions.h"; path = "../../SA_NSDataExtensions/NSData+SA_NSDataExtensions.h"; sourceTree = "<group>"; }; | |||
| 86627E20276648E400AEFEB7 /* NSData+SA_NSDataExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSData+SA_NSDataExtensions.m"; path = "../../SA_NSDataExtensions/NSData+SA_NSDataExtensions.m"; sourceTree = "<group>"; }; | |||
| 86769D5B1C94DC5300B86A72 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; }; | |||
| 86769D5C1C94DC5300B86A72 /* dcc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dcc.h; sourceTree = "<group>"; }; | |||
| 86769D5D1C94DC5300B86A72 /* libirc_errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libirc_errors.h; sourceTree = "<group>"; }; | |||
| @@ -55,8 +57,6 @@ | |||
| 86B0D3EB22C5FF1300E60877 /* NSArray+SA_NSArrayExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = "NSArray+SA_NSArrayExtensions.m"; path = "../../OS X Projects/SA_IRCBotServer/NSArray+SA_NSArrayExtensions/NSArray+SA_NSArrayExtensions.m"; sourceTree = "<group>"; }; | |||
| 86BAE59F232ABFD200936147 /* NSIndexSet+SA_NSIndexSetExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSIndexSet+SA_NSIndexSetExtensions.m"; path = "../../OS X Projects/XGopher/NSIndexSet+SA_NSIndexSetExtensions/NSIndexSet+SA_NSIndexSetExtensions.m"; sourceTree = "<group>"; }; | |||
| 86BAE5A0232ABFD200936147 /* NSIndexSet+SA_NSIndexSetExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSIndexSet+SA_NSIndexSetExtensions.h"; path = "../../OS X Projects/XGopher/NSIndexSet+SA_NSIndexSetExtensions/NSIndexSet+SA_NSIndexSetExtensions.h"; sourceTree = "<group>"; }; | |||
| 86D02CD4275B79FB00876E93 /* NSData+SA_NSDataExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSData+SA_NSDataExtensions.h"; path = "../../SA_NSDataExtensions/NSData+SA_NSDataExtensions.h"; sourceTree = "<group>"; }; | |||
| 86D02CD5275B79FB00876E93 /* NSData+SA_NSDataExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSData+SA_NSDataExtensions.m"; path = "../../SA_NSDataExtensions/NSData+SA_NSDataExtensions.m"; sourceTree = "<group>"; }; | |||
| 86D02CDE275B9E6B00876E93 /* NSString+SA_NSStringExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+SA_NSStringExtensions.h"; path = "../SA_NSStringExtensions/NSString+SA_NSStringExtensions.h"; sourceTree = "<group>"; }; | |||
| 86D02CDF275B9E6B00876E93 /* NSString+SA_NSStringExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+SA_NSStringExtensions.m"; path = "../SA_NSStringExtensions/NSString+SA_NSStringExtensions.m"; sourceTree = "<group>"; }; | |||
| 86F2EFE61C21F73600B033A4 /* IRCClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IRCClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| @@ -84,8 +84,8 @@ | |||
| 866B9D4F1C97530E00F460BB /* NSData+SA_NSDataExtensions */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 86D02CD4275B79FB00876E93 /* NSData+SA_NSDataExtensions.h */, | |||
| 86D02CD5275B79FB00876E93 /* NSData+SA_NSDataExtensions.m */, | |||
| 86627E1F276648E400AEFEB7 /* NSData+SA_NSDataExtensions.h */, | |||
| 86627E20276648E400AEFEB7 /* NSData+SA_NSDataExtensions.m */, | |||
| ); | |||
| name = "NSData+SA_NSDataExtensions"; | |||
| path = SA_NSDataExtensions; | |||
| @@ -203,6 +203,7 @@ | |||
| 86769D751C94DC5300B86A72 /* session.h in Headers */, | |||
| 86769D6E1C94DC5300B86A72 /* dcc.h in Headers */, | |||
| 86B0D3E922C5A3D700E60877 /* NSRange-Conventional.h in Headers */, | |||
| 86627E21276648E400AEFEB7 /* NSData+SA_NSDataExtensions.h in Headers */, | |||
| 86F2EFFB1C21F81900B033A4 /* IRCClientChannelDelegate.h in Headers */, | |||
| 86769D721C94DC5300B86A72 /* libirc_rfcnumeric.h in Headers */, | |||
| 86D02CE0275B9E6B00876E93 /* NSString+SA_NSStringExtensions.h in Headers */, | |||
| @@ -214,7 +215,6 @@ | |||
| 86BAE5A2232ABFD200936147 /* NSIndexSet+SA_NSIndexSetExtensions.h in Headers */, | |||
| 86B0D3EC22C5FF1300E60877 /* NSArray+SA_NSArrayExtensions.h in Headers */, | |||
| 86769D6F1C94DC5300B86A72 /* libirc_errors.h in Headers */, | |||
| 86D02CD6275B79FB00876E93 /* NSData+SA_NSDataExtensions.h in Headers */, | |||
| 86769D711C94DC5300B86A72 /* libirc_options.h in Headers */, | |||
| 86F2EFF81C21F81900B033A4 /* IRCClientChannel_Private.h in Headers */, | |||
| ); | |||
| @@ -291,9 +291,9 @@ | |||
| 86BAE5A1232ABFD200936147 /* NSIndexSet+SA_NSIndexSetExtensions.m in Sources */, | |||
| 86F2EFFD1C21F81900B033A4 /* IRCClientSession.m in Sources */, | |||
| 86B0D3ED22C5FF1300E60877 /* NSArray+SA_NSArrayExtensions.m in Sources */, | |||
| 86D02CD7275B79FB00876E93 /* NSData+SA_NSDataExtensions.m in Sources */, | |||
| 86D02CE1275B9E6B00876E93 /* NSString+SA_NSStringExtensions.m in Sources */, | |||
| 86F2EFFA1C21F81900B033A4 /* IRCClientChannel.m in Sources */, | |||
| 86627E22276648E400AEFEB7 /* NSData+SA_NSDataExtensions.m in Sources */, | |||
| 86769D791C94DC5300B86A72 /* libircclient.c in Sources */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| @@ -138,7 +138,8 @@ | |||
| return irc_send_raw(_irc_session, | |||
| "PRIVMSG %s :%s", | |||
| _name.terminatedCString, | |||
| irc_color_convert_to_mirc(message.terminatedCString)); | |||
| // irc_color_convert_to_mirc(message.terminatedCString)); | |||
| [self.session colorConvertToMIRC:message].terminatedCString); | |||
| } | |||
| -(int) action:(NSData *)action { | |||
| @@ -148,7 +149,8 @@ | |||
| return irc_send_raw(_irc_session, | |||
| "PRIVMSG %s :\x01" "ACTION %s\x01", | |||
| _name.terminatedCString, | |||
| irc_color_convert_to_mirc(action.terminatedCString)); | |||
| // irc_color_convert_to_mirc(action.terminatedCString)); | |||
| [self.session colorConvertToMIRC:action].terminatedCString); | |||
| } | |||
| -(int) notice:(NSData *)notice { | |||
| @@ -8,6 +8,7 @@ | |||
| // See LICENSE and README.md for more info. | |||
| #import "IRCClientChannel.h" | |||
| #import "IRCClientSession.h" | |||
| #include "libircclient.h" | |||
| /********************************************/ | |||
| @@ -168,6 +168,18 @@ | |||
| */ | |||
| -(void) run; | |||
| /** Convert libircclient markup in a message to mIRC format codes. | |||
| */ | |||
| -(NSData *) colorConvertToMIRC:(NSData *)message; | |||
| /** Convert mIRC format codes in a message to libircclient markup. | |||
| */ | |||
| -(NSData *) colorConvertFromMIRC:(NSData *)message; | |||
| /** Remove mIRC format codes from a message. | |||
| */ | |||
| -(NSData *) colorStripFromMIRC:(NSData *)message; | |||
| /**************************/ | |||
| #pragma mark - IRC commands | |||
| /**************************/ | |||
| @@ -21,6 +21,7 @@ | |||
| #import "NSData+SA_NSDataExtensions.h" | |||
| #import "NSString+SA_NSStringExtensions.h" | |||
| #import "NSRange-Conventional.h" | |||
| #import "NSIndexSet+SA_NSIndexSetExtensions.h" | |||
| /********************************************/ | |||
| #pragma mark - Callback function declarations | |||
| @@ -190,6 +191,73 @@ static NSDictionary* ircNumericCodeList; | |||
| nickUserHost.length - (rangeOfUserHostSeparator.location + 1))]); | |||
| } | |||
| // TODO: implement color support | |||
| -(NSData *) colorConvertToMIRC:(NSData *)message { | |||
| NSMutableData *workingCopy = [message mutableCopy]; | |||
| [@[ @[ @"[B]", @"[/B]", [NSData dataFromCString:"\x02"] ], | |||
| @[ @"[I]", @"[/I]", [NSData dataFromCString:"\x16"] ], | |||
| @[ @"[U]", @"[/U]", [NSData dataFromCString:"\x1F"] ] ] forEach:^(NSArray *tags) { | |||
| NSData *openingTag = [tags[0] dataUsingEncoding:self.encoding]; | |||
| NSData *closingTag = [tags[1] dataUsingEncoding:self.encoding]; | |||
| NSData *mircCode = tags[2]; | |||
| NSRange rangeOfOpeningTag, rangeOfClosingTag; | |||
| do { | |||
| // Find next opening tag. | |||
| rangeOfOpeningTag = [workingCopy rangeOfData:openingTag | |||
| options:(NSDataSearchOptions) 0 | |||
| range:workingCopy.fullRange]; | |||
| if (rangeOfOpeningTag.location != NSNotFound) { | |||
| // Replace opening tag. | |||
| [workingCopy replaceBytesInRange:rangeOfOpeningTag | |||
| withBytes:mircCode.bytes | |||
| length:mircCode.length]; | |||
| // Find next closing tag. | |||
| rangeOfClosingTag = [workingCopy rangeOfData:closingTag | |||
| options:(NSDataSearchOptions) 0 | |||
| range:[workingCopy rangeAfterRange:NSMakeRange(rangeOfOpeningTag.location, | |||
| mircCode.length)]]; | |||
| if (rangeOfClosingTag.location != NSNotFound) { | |||
| // Replace closing tag, if any. | |||
| [workingCopy replaceBytesInRange:rangeOfClosingTag | |||
| withBytes:mircCode.bytes | |||
| length:mircCode.length]; | |||
| } else { | |||
| // Otherwise, end the string with a closing tag. | |||
| [workingCopy appendBytes:mircCode.bytes | |||
| length:mircCode.length]; | |||
| } | |||
| } | |||
| } while (rangeOfOpeningTag.location != NSNotFound); | |||
| // Clean up stray closing tags. | |||
| do { | |||
| rangeOfClosingTag = [workingCopy rangeOfData:closingTag | |||
| options:(NSDataSearchOptions) 0 | |||
| range:workingCopy.fullRange]; | |||
| if (rangeOfClosingTag.location != NSNotFound) { | |||
| [workingCopy replaceBytesInRange:rangeOfClosingTag | |||
| withBytes:mircCode.bytes | |||
| length:mircCode.length]; | |||
| } | |||
| } while (rangeOfClosingTag.location != NSNotFound); | |||
| }]; | |||
| return [workingCopy copy]; | |||
| } | |||
| -(NSData *) colorConvertFromMIRC:(NSData *)message { | |||
| // TODO: Implement this for real! | |||
| return [self colorStripFromMIRC:message]; | |||
| } | |||
| // TODO: implement this! | |||
| -(NSData *) colorStripFromMIRC:(NSData *)message { | |||
| return message; | |||
| } | |||
| /*************************************/ | |||
| #pragma mark - Class methods (private) | |||
| /*************************************/ | |||
| @@ -347,7 +415,8 @@ static NSDictionary* ircNumericCodeList; | |||
| return irc_send_raw(_irc_session, | |||
| "PRIVMSG %s :%s", | |||
| target.terminatedCString, | |||
| irc_color_convert_to_mirc(message.terminatedCString)); | |||
| // irc_color_convert_to_mirc(message.terminatedCString)); | |||
| [self colorConvertToMIRC:message].terminatedCString); | |||
| } | |||
| -(int) action:(NSData *)action | |||
| @@ -359,7 +428,8 @@ static NSDictionary* ircNumericCodeList; | |||
| return irc_send_raw(_irc_session, | |||
| "PRIVMSG %s :\x01" "ACTION %s\x01", | |||
| target.terminatedCString, | |||
| irc_color_convert_to_mirc(action.terminatedCString)); | |||
| // irc_color_convert_to_mirc(action.terminatedCString)); | |||
| [self colorConvertToMIRC:action].terminatedCString); | |||
| } | |||
| -(int) notice:(NSData *)notice | |||
| @@ -425,17 +495,18 @@ static NSDictionary* ircNumericCodeList; | |||
| || !strcmp(event, "SERVNOTICE") | |||
| || !strcmp(event, "CTCP_ACTION") | |||
| )) { | |||
| char* (*process_color_codes) (const char *) = (whatAboutColors == SA_IRC_ParseColorCodes | |||
| ? irc_color_convert_from_mirc | |||
| : irc_color_strip_from_mirc); | |||
| params_array = [NSMutableArray arrayWithCapacity:count]; | |||
| for (NSUInteger i = 0; i < count; i++) { | |||
| [params_array addObject:[NSData dataFromCString:(*process_color_codes)(params[i])]]; | |||
| } | |||
| [NSIndexSet from:0 | |||
| for:count | |||
| do:^(NSUInteger idx) { | |||
| NSData *param = (whatAboutColors == SA_IRC_ParseColorCodes | |||
| ? [self colorConvertFromMIRC:[NSData dataFromCString:params[idx]]] | |||
| : [self colorStripFromMIRC:[NSData dataFromCString:params[idx]]]); | |||
| [params_array addObject:param]; | |||
| }]; | |||
| } else { | |||
| params_array = (NSMutableArray *) [NSArray arrayOfCStringData:params | |||
| count:count]; | |||
| params_array = [NSMutableArray arrayOfCStringData:params | |||
| count:count]; | |||
| } | |||
| NSData *origin_data = origin ? [NSData dataFromCString:origin] : nil; | |||
| @@ -15,11 +15,11 @@ | |||
| #include <ctype.h> | |||
| #define LIBIRC_COLORPARSER_BOLD (1<<1) | |||
| #define LIBIRC_COLORPARSER_UNDERLINE (1<<2) | |||
| #define LIBIRC_COLORPARSER_UNDERLINE (1<<2) | |||
| #define LIBIRC_COLORPARSER_REVERSE (1<<3) | |||
| #define LIBIRC_COLORPARSER_COLOR (1<<4) | |||
| #define LIBIRC_COLORPARSER_MAXCOLORS 15 | |||
| #define LIBIRC_COLORPARSER_MAXCOLORS 15 | |||
| #define max(a,b) \ | |||