]> git.wincent.com - WOTest.git/blob - NSString+WOTest.m
Fix object-to-pointer comparisons on Leopard
[WOTest.git] / NSString+WOTest.m
1 //
2 //  NSString+WOTest.m
3 //  WOTest
4 //
5 //  Created by Wincent Colaiuta on 07 June 2005.
6 //
7 //  Copyright 2005-2007 Wincent Colaiuta.
8 //  This program is free software: you can redistribute it and/or modify
9 //  it under the terms of the GNU General Public License as published by
10 //  the Free Software Foundation, either version 3 of the License, or
11 //  (at your option) any later version.
12 //
13 //  This program is distributed in the hope that it will be useful,
14 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
15 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 //  GNU General Public License for more details.
17 //
18 //  You should have received a copy of the GNU General Public License
19 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 //
21
22 #import "NSString+WOTest.h"
23
24 void _WOLog(NSString *format, ...)
25 {
26     if (!format) return; // bail
27     va_list args;
28     va_start(args, format);
29     NSString *string = [[NSString alloc] initWithFormat:format arguments:args];
30     if (string)
31     {
32         fprintf(stdout, "%s\n", [string UTF8String]);
33         fflush(NULL); // flush all open streams (not just stdout)
34         [string release];
35     }
36     va_end(args);
37 }
38
39 void _WOLogv(NSString *format, va_list args)
40 {
41     if (!format) return; // bail
42     NSString *string = [[NSString alloc] initWithFormat:format arguments:args];
43     if (string)
44     {
45         fprintf(stdout, "%s\n", [string UTF8String]);
46         fflush(NULL); // flush all open streams (not just stdout)
47         [string release]; 
48     }
49 }
50
51 @implementation NSString (WOTest)
52
53 + (NSString *)WOTest_stringWithFormat:(NSString *)format arguments:(va_list)argList
54 {
55     return [[[NSString alloc] initWithFormat:format 
56                                    arguments:argList] autorelease];
57 }
58
59 + (NSString *)WOTest_stringWithCharacter:(unichar)character
60 {
61     return [NSString stringWithFormat:@"%C", character];
62 }
63
64 - (NSString *)WOTest_stringByConvertingToAbsolutePath
65 {
66     if ([self isAbsolutePath])
67         return self;
68     NSString *path = [[NSFileManager defaultManager] currentDirectoryPath];
69  
70     // TODO: strictly speaking, should write a method stringByAppendPathComponents (see draft above)
71     return [path stringByAppendingPathComponent:self];
72 }
73
74 - (NSString *)WOTest_stringByCollapsingWhitespace
75 {
76     NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
77     NSMutableString *temp = [NSMutableString stringWithString:self];
78     unsigned int length = [temp length];
79     for (unsigned int i = 0; i < length; i++)
80     {
81         if ([whitespace characterIsMember:[temp characterAtIndex:i]])
82         {
83             // convert newslines, tabs etc to spaces
84             [temp replaceCharactersInRange:NSMakeRange(i, 1) withString:@" "];
85             
86             // was the last character also a space?
87             if ((i > 0) && ([temp characterAtIndex:i - 1] == ' '))
88             {
89                 // two consecutive whitespace characters, delete the second
90                 [temp deleteCharactersInRange:NSMakeRange(i - 1, 1)];
91                 i--;
92                 length--;
93             }
94         }
95     }
96     return [NSString stringWithString:temp]; // return immutable, autoreleased
97 }
98
99 - (NSString *)WOTest_stringByAppendingCharacter:(unichar)character
100 {
101     return [self stringByAppendingFormat:@"%C", character];
102 }
103
104 @end