]> git.wincent.com - WOTest.git/blob - NSString+WOTest.m
Code clean-up for garbage collection
[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     }
35     va_end(args);
36 }
37
38 void _WOLogv(NSString *format, va_list args)
39 {
40     if (!format) return; // bail
41     NSString *string = [[NSString alloc] initWithFormat:format arguments:args];
42     if (string)
43     {
44         fprintf(stdout, "%s\n", [string UTF8String]);
45         fflush(NULL); // flush all open streams (not just stdout)
46     }
47 }
48
49 @implementation NSString (WOTest)
50
51 + (NSString *)WOTest_stringWithFormat:(NSString *)format arguments:(va_list)argList
52 {
53     return [[NSString alloc] initWithFormat:format arguments:argList];
54 }
55
56 + (NSString *)WOTest_stringWithCharacter:(unichar)character
57 {
58     return [NSString stringWithFormat:@"%C", character];
59 }
60
61 - (NSString *)WOTest_stringByConvertingToAbsolutePath
62 {
63     if ([self isAbsolutePath])
64         return self;
65     NSString *path = [[NSFileManager defaultManager] currentDirectoryPath];
66
67     // TODO: strictly speaking, should write a method stringByAppendPathComponents (see draft above)
68     return [path stringByAppendingPathComponent:self];
69 }
70
71 - (NSString *)WOTest_stringByCollapsingWhitespace
72 {
73     NSCharacterSet  *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
74     NSMutableString *temp       = [NSMutableString stringWithString:self];
75     unsigned int    length      = [temp length];
76     for (unsigned int i = 0; i < length; i++)
77     {
78         if ([whitespace characterIsMember:[temp characterAtIndex:i]])
79         {
80             // convert newslines, tabs etc to spaces
81             [temp replaceCharactersInRange:NSMakeRange(i, 1) withString:@" "];
82
83             // was the last character also a space?
84             if ((i > 0) && ([temp characterAtIndex:i - 1] == ' '))
85             {
86                 // two consecutive whitespace characters, delete the second
87                 [temp deleteCharactersInRange:NSMakeRange(i - 1, 1)];
88                 i--;
89                 length--;
90             }
91         }
92     }
93     return [temp copy]; // return immutable
94 }
95
96 - (NSString *)WOTest_stringByAppendingCharacter:(unichar)character
97 {
98     return [self stringByAppendingFormat:@"%C", character];
99 }
100
101 @end