+@interface NSBundle (WinterBoard)
++ (NSBundle *) wb$bundleWithFile:(NSString *)path;
+@end
+
+@implementation NSBundle (WinterBoard)
+
++ (NSBundle *) wb$bundleWithFile:(NSString *)path {
+ path = [path stringByDeletingLastPathComponent];
+ if (path == nil || [path length] == 0 || [path isEqualToString:@"/"])
+ return nil;
+
+ NSBundle *bundle([Bundles_ objectForKey:path]);
+ if (reinterpret_cast<id>(bundle) == [NSNull null])
+ return nil;
+ else if (bundle == nil) {
+ bundle = [NSBundle bundleWithPath:path];
+ if (bundle == nil)
+ bundle = [NSBundle wb$bundleWithFile:path];
+ if (Debug_)
+ NSLog(@"WB:Debug:PathBundle(%@, %@)", path, bundle);
+ [Bundles_ setObject:(bundle == nil ? [NSNull null] : reinterpret_cast<id>(bundle)) forKey:path];
+ }
+
+ return bundle;
+}
+
+@end
+
+@interface NSString (WinterBoard)
+- (NSString *) wb$themedPath;
+@end
+
+@implementation NSString (WinterBoard)
+
+- (NSString *) wb$themedPath {
+ if (Debug_)
+ NSLog(@"WB:Debug:Bypass(\"%@\")", self);
+
+ if (NSBundle *bundle = [NSBundle wb$bundleWithFile:self]) {
+ NSString *file([self stringByResolvingSymlinksInPath]);
+ NSString *prefix([[bundle bundlePath] stringByResolvingSymlinksInPath]);
+ if ([file hasPrefix:prefix]) {
+ NSUInteger length([prefix length]);
+ if (length != [file length])
+ if (NSString *path = $pathForFile$inBundle$([file substringFromIndex:(length + 1)], bundle, false))
+ return path;
+ }
+ }
+
+ return self;
+}
+
+@end
+