912 :(NSArray *)actions forHandler:(NSString *)handlerKey state:(NSString *)stateKey stateMachine:(NSString *)smName
913{
914 NSString *action =
nil;
915 NSRange spaceRange;
916 NSString *selector =
nil;
917 id aliasedSelector =
nil;
918 NSMutableArray *result =
nil;
919 static NSSet *whitelist =
nil;
920 static NSDictionary *aliases =
nil;
921 NSArray *whitelistArray1 =
nil;
922 NSArray *whitelistArray2 =
nil;
923
924 if (whitelist ==
nil)
925 {
927 if (whitelistArray1 ==
nil) whitelistArray1 = [NSArray array];
929 if (whitelistArray2 !=
nil) whitelistArray1 = [whitelistArray1 arrayByAddingObjectsFromArray:whitelistArray2];
930
931 whitelist = [[NSSet alloc] initWithArray:whitelistArray1];
933 }
934
935 result = [NSMutableArray arrayWithCapacity:[actions count]];
936 foreach (action, actions)
937 {
938 if (![action isKindOfClass:[NSString class]])
939 {
940 OOLogWARN(
@"ai.invalidFormat.action",
@"An action in handler \"%@\
" for state \"%@\" in AI \"%@\" is not a string, ignoring.", handlerKey, stateKey, smName);
941 continue;
942 }
943
944
945 action = [action stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
946
947
948 spaceRange = [action rangeOfString:@" "];
949 if (spaceRange.location == NSNotFound) selector = action;
950 else selector = [action substringToIndex:spaceRange.location];
951
952
953 aliasedSelector = [aliases objectForKey:selector];
954 if (aliasedSelector !=
nil)
955 {
956 if ([aliasedSelector isKindOfClass:[NSString class]])
957 {
958
959 selector = aliasedSelector;
960 if (spaceRange.location == NSNotFound) action = aliasedSelector;
961 else action = [aliasedSelector stringByAppendingString:[action substringFromIndex:spaceRange.location]];
962 }
963 else if ([aliasedSelector isKindOfClass:[NSArray class]] && [aliasedSelector
count] != 0)
964 {
965
966 action = [aliasedSelector componentsJoinedByString:@" "];
967 selector = [[aliasedSelector objectAtIndex:0] description];
968 }
969 }
970
971
972 if (![whitelist containsObject:selector])
973 {
974 OOLog(
@"ai.unpermittedMethod",
@"Handler \"%@\
" for state \"%@\" in AI \"%@\" uses \"%@\", which is not a permitted AI method.", handlerKey, stateKey, smName, selector);
975 continue;
976 }
977
978 [result addObject:action];
979 }
980
981
982 return [[result copy] autorelease];
983}
#define OOLogWARN(class, format,...)
#define OOLog(class, format,...)
NSDictionary * whitelistDictionary()