Code Search for Developers
 
 
  

FoundationAdditions.m from redshed at Krugle


Show FoundationAdditions.m syntax highlighted

/* FoundationAdditions.m created by lindberg on Mon 20-Dec-1999 */
/*-
* Copyright (c) 2002 Carl Lindberg and Mike Gentry
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/* NOTE: Do not put any code dealing with anything other than Foundation in here.
 * This class is used by TGen also. So has to be pure Foundation.
 */

#import "FoundationAdditions.h"
#import <Foundation/Foundation.h>
#import "NSString+MiscAdditions.h"


/* Writes to stderr */
void ErrVPrintf(NSString *format, va_list arguments)
{
    NSString *logString = [[NSString alloc] initWithFormat:format arguments:arguments];
    fwrite([logString cString], 1, [logString cStringLength], stderr);
    if (![logString hasSuffix:@"\n"]) fputc('\n', stdout);
    [logString release];
}

void ErrPrintf(NSString *format, ...)
{
    va_list arguments;

    va_start(arguments, format);
    ErrVPrintf(format, arguments);
    va_end(arguments);
}

void VPrintf(NSString *format, va_list arguments)
{
    NSString *logString = [[NSString alloc] initWithFormat:format arguments:arguments];
    fwrite([logString cString], 1, [logString cStringLength], stdout);
    if (![logString hasSuffix:@"\n"]) fputc('\n', stdout);
    [logString release];
}

void Printf(NSString *format, ...)
{
    va_list arguments;

    va_start(arguments, format);
    VPrintf(format, arguments);
    va_end(arguments);
}


@interface NSObject (WarningAvoidance)
- (NSString *)name;  // method on EOAttribute/EOEntity etc.
- (id)valueForKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;
@end

@implementation NSArray (FoundationAdditions)

- (NSArray *)reversedArray
{
    return [[self reverseObjectEnumerator] allObjects];
}

// does an @reversedArray KeyValue key
- (id)computeReversedArrayForKey:(NSString *) key
{
    if ([key length] == 0)
        return [self reversedArray];
    else
        return [[self reversedArray] valueForKeyPath:key];
}

static int sortByName(id obj1, id obj2, void *context)
{
    return [(NSString *)[obj1 valueForKey:@"name"] compare:[obj2 valueForKey:@"name"]];
}

// does an @sortedNameArray KeyValue key
- (id)computeSortedNameArrayForKey:(NSString *)key
{
    if ([key length] == 0)
        return [self sortedArrayUsingFunction:sortByName context:NULL];
    else
        return [[self sortedArrayUsingFunction:sortByName context:NULL] valueForKeyPath:key];
}

// does an @sortedStringArray KeyValue key
- (id)computeSortedStringArrayForKey:(NSString *)key
{
    if ([key length] == 0)
        return [self sortedArrayUsingSelector:@selector(compare:)];
    else
        return [[self sortedArrayUsingSelector:@selector(compare:)] valueForKeyPath:key];
}

/*"
 * Calls -#performSelector: on each object in the receiver, and returns an
 * array of the return values from the method calls.  If a result is nil,
 * it is not added to the array.
"*/
- (NSArray *)arrayByMakingObjectsPerformSelector:(SEL)aSelector
{
    return [self arrayByMakingObjectsPerformSelector:aSelector withObject:nil withObject:nil];
}

/*"
 * Calls -#performSelector:withObject: on each object in the receiver, and
 * returns an array of the return values from the method calls.  If a
 * result is nil, it is not added to the array.
"*/
- (NSArray *)arrayByMakingObjectsPerformSelector:(SEL)aSelector withObject:anObject
{
    return [self arrayByMakingObjectsPerformSelector:aSelector withObject:anObject withObject:nil];
}

/*"
 * Calls -#performSelector:withObject:withObject: on each object in the
 * receiver, and returns an array of the return values from the method
 * calls.  If a result is nil, it is not added to the array.
"*/
- (NSArray *)arrayByMakingObjectsPerformSelector:(SEL)aSelector withObject:anObject
                                      withObject:anObject2
{
    unsigned		i, count = [self count];
    NSMutableArray	*array = [NSMutableArray arrayWithCapacity:count];

    for(i=0; i<count; i++)
    {
        id object = [self objectAtIndex:i];
        id value = [object performSelector:aSelector withObject:anObject withObject:anObject2];

        if (value != nil) {
            [array addObject:value];
        }
    }

    return array;
}

@end

@implementation NSString (FoundationAdditions)

- (NSString *)initialCapitalString
{
    NSRange  firstLetterRange;
    NSString *firstLetterString;
    NSString *restOfString;

    if ([self length] == 0) return self;

    firstLetterRange  = [self rangeOfComposedCharacterSequenceAtIndex:0];
    firstLetterString = [[self substringWithRange:firstLetterRange] uppercaseString];
    restOfString      = [self substringFromIndex:NSMaxRange(firstLetterRange)];

    return [firstLetterString stringByAppendingString:restOfString];
}

- (NSString *)beautifyString
{
    NSString *newString;
    NSCharacterSet *invalidSet;
    NSMutableCharacterSet *validSet = [[[NSCharacterSet letterCharacterSet] mutableCopy] autorelease];
    [validSet formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]];
    [validSet formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet]];
    invalidSet = [[[validSet copy] autorelease] invertedSet];

    newString = [self stringByReplacingEveryOccurrenceOfCharactersFromSet:invalidSet withString:@" "];

    if ( [newString rangeOfString:@" "].location != NSNotFound ) {
        newString = [newString stringByTrimmingWhitespace];
        newString = [newString stringBySquashingWhitespace];

        if ( [newString rangeOfString:@" "].location != NSNotFound ) {
            NSArray *components = [newString componentsSeparatedByString:@" "];
            components = [components arrayByMakingObjectsPerformSelector:@selector(initialCapitalString)];
            newString = [components componentsJoinedByString:@""];
        }
    }

    return [newString initialCapitalString];
}

@end

@implementation NSFileManager (FoundationAdditions)

- (BOOL)directoryExistsAtPath:(NSString *)path
{
    BOOL isDir = NO;
    BOOL isFile = [self fileExistsAtPath:path isDirectory:&isDir];
    return (isFile && isDir);
}

- (BOOL)regularFileExistsAtPath:(NSString *)path
{
    BOOL isDir = NO;
    BOOL isFile = [self fileExistsAtPath:path isDirectory:&isDir];
    return (isFile && !isDir);
}

- (NSString *)findFile:(NSString *)filename inSearchPath:(NSArray *)paths
{
    int i, count = [paths count];

    for (i=0; i<count; i++)
    {
        NSString *currPath = [paths objectAtIndex:i];
        NSString *fullPath = [currPath stringByAppendingPathComponent:filename];

        if ([self regularFileExistsAtPath:fullPath])
            return fullPath;
    }

    return nil;
}

- (void)touchPath:(NSString *)filePath
{
    NSMutableDictionary *attributes;

    attributes = [[NSMutableDictionary alloc] initWithCapacity:1];
    [attributes setObject:[NSDate date] forKey:NSFileModificationDate];
    [self changeFileAttributes:attributes atPath:filePath];
    [attributes release];
}

- (BOOL)deepCreateDirectoryAtPath:(NSString *)path attributes:(NSDictionary *)attributes
{
    NSString *parent = [path stringByDeletingLastPathComponent];

    if ([parent length] > 0 && ![self directoryExistsAtPath:parent])
    {
        // May want to ensure owner write permissions here...
        if (![self deepCreateDirectoryAtPath:parent attributes:attributes])
            return NO;
    }

    return [self createDirectoryAtPath:path attributes:attributes];
}

@end




See more files for this project here

redshed

Code for Mac+WebObjects.

Project homepage: http://sourceforge.net/projects/redshed
Programming language(s): C,Java,Objective C
License: other

  Xmod/
    English.lproj/
      InfoPlist.strings
    Xmod.xcodeproj/
      project.pbxproj
      wolf.mode1
      wolf.pbxuser
    Autocustomize Entity Classes.applescript
    Info.plist
    MethodSwizzle.h
    MethodSwizzle.m
    Xmod.applescript
    Xmod.h
    Xmod.m
    Xmod_Prefix.pch
  ddcli/
    DDCliApplication.h
    DDCliApplication.m
    DDCliParseException.h
    DDCliParseException.m
    DDCliUtil.h
    DDCliUtil.m
    DDCommandLineInterface.h
    DDGetoptLongParser.h
    DDGetoptLongParser.m
  installer/
    Description.plist
    Info.plist
    make_installer.command
  mogenerator.xcodeproj/
    project.pbxproj
    wolf.mode1
    wolf.mode1v3
    wolf.pbxuser
  mogeneratorTestMule/
    English.lproj/
      MainMenu.nib/
        classes.nib
        info.nib
        keyedobjects.nib
      InfoPlist.strings
    MOs/
      ChildMO.h
      ChildMO.m
      HumanMO.h
      HumanMO.m
      ParentMO.h
      ParentMO.m
      _ChildMO.h
      _ChildMO.m
      _HumanMO.h
      _HumanMO.m
      _ParentMO.h
      _ParentMO.m
      include.m
    mogeneratorTestMule.xcodeproj/
      project.pbxproj
      wolf.mode1
      wolf.mode1v3
      wolf.pbxuser
    mogeneratorTestMule_DataModel.xcdatamodel/
      elements
      layout
    Info.plist
    MyBaseClass.h
    MyBaseClass.m
    main.m
    mogenerate.command
    mogeneratorTestMule_AppDelegate.h
    mogeneratorTestMule_AppDelegate.m
    mogeneratorTestMule_Prefix.pch
    version.plist
  FoundationAdditions.h
  FoundationAdditions.m
  human.h.motemplate
  human.m.motemplate
  machine.h.motemplate
  machine.m.motemplate
  mogenerator.m
  mogenerator_Prefix.pch
  nsenumerate.h