Removed old commented-out code.
[CleverRabbit.git] / RTKRevision.m
blobc8680fe0458de3fbaca4b211d47d8147336c1869
1 //
2 //   RTKRevision.m
3 //   (CleverRabbit.app)
4 //
5 //   Copyright (c) 2005 A. Karl Keller (http://karlk.net)
6 //
7 //   This code is open-source, free software, made available without warranty under
8 //   the terms of the GNU General Public License, either version 2 or later (see 
9 //   http://www.gnu.org/licenses/gpl.html or included copy); as such, it may be 
10 //   redistributed and/or modified in accordance with that document.
15 #import "RTKRevision.h"
16 #import "RTKStringCategory.h"
17 #import "RTKMutableAttributedStringCategory.h"
18 #import "Chomp/Chomp.h"
21 @implementation RTKRevision
23 - (id)init
25     if(self = [super init]) {
26         roman = @"";
27         script = @"";
28         backTranslation = @"";
29         notes = @"";
30         checking = @"";
31                 locked = NO;
32         
33         [self setDictionary:[NSDictionary dictionary]];
34     }
35     return self;
38 - (id)initWithDictionary:(NSDictionary *)dict
40     if(self = [self init]) {
41         [self setRoman:[dict objectForKey:@"roman"]];
42         [self setScript:[dict objectForKey:@"script"]];
43         [self setBackTranslation:[dict objectForKey:@"backTranslation"]];
44         [self setNotes:[dict objectForKey:@"notes"]];
45         [self setChecking:[dict objectForKey:@"checking"]];
46                 [self setLocked:[[dict objectForKey:@"locked"] intValue]];
47         
48         [self setDictionary:dict];
49     }
50     return self;
54 + (RTKRevision *)revisionWithDictionary:(NSDictionary *)dict
56     return [[[RTKRevision alloc] initWithDictionary:dict] autorelease];
60 - (id)initWithString:(NSString *)string
62     if(self = [self init]) {
63         NSEnumerator * e = [[string componentsSeparatedByString:[[NSUserDefaults standardUserDefaults] objectForKey:@"RTKPlainTextDelimiter"]] objectEnumerator];
64         
65         [self setScript:[self stringFromTextSafeString:[e nextObject]]];
66         [self setRoman:[self stringFromTextSafeString:[e nextObject]]];
67         [self setBackTranslation:[self stringFromTextSafeString:[e nextObject]]];
68         [self setNotes:[self stringFromTextSafeString:[e nextObject]]];
69         [self setChecking:[self stringFromTextSafeString:[e nextObject]]];
70     }
71     return self;
74 + (RTKRevision *)revisionWithString:string
76     return [[[RTKRevision alloc] initWithString:string] autorelease];
80 - (id)initWithSFMString:(NSString *)string
82     if(self = [self init]) {
83         [self setRoman:string];
84     }
85     return self;
88 + (RTKRevision *)revisionWithSFMString:string
90     return [[[RTKRevision alloc] initWithSFMString:string] autorelease];
93 - (void)appendLine:(NSString *)line
95     [self setRoman:[NSString stringWithFormat:@"%@\n%@", roman, line]];
98 - (void)dealloc
100     [script release];
101     [roman release];
102     [backTranslation release];
103     [notes release];
104     [checking release];
105         
106     [dictionary release];
107     
108     [super dealloc];
112 - (id)deepCopy
114     RTKRevision * copy = [[[RTKRevision alloc] init] autorelease];
115     
116     // Should be safe, since NSString is immutable.
117     [copy setScript:script];
118     [copy setRoman:roman];
119     [copy setBackTranslation:backTranslation];
120     [copy setNotes:notes];
121     [copy setChecking:checking];
122         [copy setLocked:locked];
123     
124     [copy setDictionary:dictionary];
125     
126     return copy;
130 - (NSMutableDictionary *)dictionaryRepresentation
132     NSMutableDictionary * dict = [NSMutableDictionary dictionaryWithDictionary:dictionary];
133     
134     [dict setObject:roman forKey:@"roman"];
135     [dict setObject:script forKey:@"script"];
136     [dict setObject:backTranslation forKey:@"backTranslation"];
137     [dict setObject:notes forKey:@"notes"];
138     [dict setObject:checking forKey:@"checking"];
139         [dict setObject:[NSNumber numberWithInt:locked] forKey:@"locked"];
140     
141     return dict;
145 - (NSMutableString *)textSafeStringForString:(NSString *)string;
147     NSMutableString * textSafeString = [string mutableCopy];
148     
149     [textSafeString replaceOccurrencesOfString:[NSString stringWithFormat:@"%C", 0x2028] // LINE SEPARATOR
150                                     withString:[[NSUserDefaults standardUserDefaults] objectForKey:@"RTKPlainTextReturnCharacter"]
151                                        options:NSLiteralSearch
152                                          range:NSMakeRange(0,[string length])];
153     
154     [textSafeString replaceOccurrencesOfString:@"\n" // newline
155                                     withString:[[NSUserDefaults standardUserDefaults] objectForKey:@"RTKPlainTextReturnCharacter"]
156                                        options:NSLiteralSearch
157                                          range:NSMakeRange(0,[string length])];
158     
159     [textSafeString replaceOccurrencesOfString:@"\r" // return
160                                     withString:[[NSUserDefaults standardUserDefaults] objectForKey:@"RTKPlainTextReturnCharacter"]
161                                        options:NSLiteralSearch
162                                          range:NSMakeRange(0,[string length])];
163     
164     return textSafeString;
168 - (NSMutableString *)stringFromTextSafeString:(NSString *)textSafeString;
170     NSMutableString * string = [textSafeString mutableCopy];
171     
172     [string replaceOccurrencesOfString:[[NSUserDefaults standardUserDefaults] objectForKey:@"RTKPlainTextReturnCharacter"]
173                             withString:@"\n" // newline -- just go with standard unix way
174                                options:NSLiteralSearch
175                                  range:NSMakeRange(0,[string length])];
176     if(!string)
177         string = [NSMutableString stringWithString:@""];  // AKK 2012
178     
179     return string;
182 - (NSString *)stringWithVerseNumber:(NSString *)verseNumber
184     NSMutableString * string = [NSMutableString new];
185     NSString * delimiter = [[NSUserDefaults standardUserDefaults] objectForKey:@"RTKPlainTextDelimiter"];
186     if(!verseNumber)
187         verseNumber = @"";
188     
189     [string appendString:[self textSafeStringForString:[verseNumber stringByAppendingString:script]]];
190     [string appendString:delimiter];
191     [string appendString:[self textSafeStringForString:[verseNumber stringByAppendingString:roman]]];
192     [string appendString:delimiter];
193     [string appendString:[self textSafeStringForString:backTranslation]];
194     [string appendString:delimiter];
195     [string appendString:[self textSafeStringForString:notes]];
196     [string appendString:delimiter];
197     [string appendString:[self textSafeStringForString:checking]];
199     return string;
202 - (NSMutableAttributedString *)mutableAttributedString:(BOOL)romanString
204     // TODO: Add support for transliteration.
205     NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:(romanString ? roman : script)];
206     // Provide a link back from the string to this object.
207     [string addAttribute:@"RTKRevision" value:self];
208     return string;
212 - (void)setDictionary:(NSDictionary *)theDictionary
214     [theDictionary retain];
215     [dictionary release];
216     dictionary = theDictionary;
219 - (NSDictionary *)dictionary
221     return dictionary;
225 - (RTKRevision *)copy
227     return [self deepCopy];
231 - (NSString *)roman
233     return roman;
237 - (NSString *)script
239     return script;
243 - (NSString *)backTranslation
245     return backTranslation;
249 - (NSString *)notes
251     return notes;
255 - (NSString *)checking
257     return checking;
261 - (BOOL)locked
263         return locked;
267 - (void)setRoman:(NSString *)string
269     [string retain];
270     [roman release];
271     roman = string;
272     
273     [[NSNotificationCenter defaultCenter] postNotificationName:@"RTKRevisionSetRoman" object:self userInfo:nil];
276 - (void)setScript:(NSString *)string
278     [string retain];
279     [script release];
280     script = string;
282     [[NSNotificationCenter defaultCenter] postNotificationName:@"RTKRevisionSetScript" object:self userInfo:nil];
285 - (void)setBackTranslation:(NSString *)string
287     [string retain];
288     [backTranslation release];
289     backTranslation = string;
290     
291     [[NSNotificationCenter defaultCenter] postNotificationName:@"RTKRevisionSetBackTranslation" object:self userInfo:nil];
294 - (void)setNotes:(NSString *)string
296     [string retain];
297     [notes release];
298     notes = string;
299     
300     [[NSNotificationCenter defaultCenter] postNotificationName:@"RTKRevisionSetNotes" object:self userInfo:nil];
303 - (void)setChecking:(NSString *)string
305     [string retain];
306     [checking release];
307     checking = string;
308     
309     [[NSNotificationCenter defaultCenter] postNotificationName:@"RTKRevisionSetChecking" object:self userInfo:nil];
312 - (void)setLocked:(bool)state
314         locked = state;
315     
316     [[NSNotificationCenter defaultCenter] postNotificationName:@"RTKRevisionSetLocked" object:self userInfo:nil];
320 // Returns YES if all fields are still set to default values.
321 - (BOOL)blank
323     //if(![script isEqualToString:@""])
324     //    return NO;
325     if(![roman isEqualToString:@""])
326         return NO;
327     if(![backTranslation isEqualToString:@""])
328         return NO;
329     if(![notes isEqualToString:@""])
330         return NO;
331     if(![checking isEqualToString:@""])
332         return NO;
333     if(locked)
334         return NO;
335     
336     return YES;
339 - (BOOL)matchesString:(NSString *)string
341     if([script containsCaseInsensitiveSubstring:string])
342         return YES;
343     if([roman containsCaseInsensitiveSubstring:string])
344         return YES;
345     if([backTranslation containsCaseInsensitiveSubstring:string])
346         return YES;
347     if([notes containsCaseInsensitiveSubstring:string])
348         return YES;
349     if([checking containsCaseInsensitiveSubstring:string])
350         return YES;
351     return NO;
355 @end