forked from erkyrath/Inform7-IDE-Mac
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIFProjectFile.m
135 lines (103 loc) · 3.98 KB
/
IFProjectFile.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//
// IFProjectFile.m
// Inform
//
// Created by Andrew Hunter on Fri Sep 12 2003.
// Copyright (c) 2003 Andrew Hunter. All rights reserved.
//
#import "IFProjectFile.h"
@implementation IFProjectFile
// = Empty project creation =
- (id) initWithEmptyProject {
// First we have to create the source directory, etc
NSFileWrapper* srcDir;
NSFileWrapper* bldDir;
NSFileWrapper* indexDir;
srcDir = [[NSFileWrapper alloc] initDirectoryWithFileWrappers: [NSDictionary dictionary]];
bldDir = [[NSFileWrapper alloc] initDirectoryWithFileWrappers: [NSDictionary dictionary]];
indexDir = [[NSFileWrapper alloc] initDirectoryWithFileWrappers: [NSDictionary dictionary]];
[srcDir setPreferredFilename: @"Source"];
[bldDir setPreferredFilename: @"Build"];
[indexDir setPreferredFilename: @"Index"];
[srcDir autorelease]; [bldDir autorelease]; [indexDir autorelease];
if (srcDir == nil || bldDir == nil) {
return nil;
}
self = [super initDirectoryWithFileWrappers:
[NSDictionary dictionaryWithObjectsAndKeys: srcDir, @"Source", bldDir, @"Build", indexDir, @"Index", nil]];
if (self) {
sourceDirectory = [srcDir retain];
buildDirectory = [bldDir retain];
}
return self;
}
- (void) dealloc {
[sourceDirectory release];
[buildDirectory release];
[super dealloc];
}
- (void) addSourceFile: (NSString*) filename {
[sourceDirectory addRegularFileWithContents: [NSData data]
preferredFilename: filename];
}
- (void) addSourceFile: (NSString*) filename
withContents: (NSData*) contents {
[sourceDirectory addRegularFileWithContents: contents
preferredFilename: filename];
}
- (void) setSettings: (IFCompilerSettings*) settings {
// Add the settings plist to the wrapper
NSFileWrapper* settingsWrapper;
[self removeFileWrapper: [[self fileWrappers] objectForKey:
@"Settings.plist"]];
NSData* settingsData = [settings currentPlist];
settingsWrapper = [[NSFileWrapper alloc] initRegularFileWithContents:
settingsData];
[settingsWrapper setPreferredFilename: @"Settings.plist"];
[settingsWrapper setFilename: @"Settings.plist"];
[self addFileWrapper: [settingsWrapper autorelease]];
// Delete the old-style file, if it exists
NSFileWrapper* settingsFile = [[self fileWrappers] objectForKey: @"Settings"];
if (settingsFile) [self removeFileWrapper: settingsFile];
}
- (IFCompilerSettings*) settings {
NSFileWrapper* settingsFile = [[self fileWrappers] objectForKey: @"Settings.plist"];
if (settingsFile == nil) {
// Old-style loading
settingsFile = [[self fileWrappers] objectForKey: @"Settings"];
if (settingsFile == nil) {
return nil;
//return [[[IFCompilerSettings alloc] init] autorelease];
}
NSData* settingsData = [settingsFile regularFileContents];
NSUnarchiver* theCoder = [[NSUnarchiver alloc] initForReadingWithData:
settingsData];
// Decode the file
NSString* creator = [theCoder decodeObject];
int version = -1;
[theCoder decodeValueOfObjCType: @encode(int) at: &version];
IFCompilerSettings* settings = [[theCoder decodeObject] retain];
// Release the decoder
[theCoder release];
if (creator == nil || version != 1 || settings == nil) {
// We don't understand this file
return [[[IFCompilerSettings alloc] init] autorelease];
}
return [settings autorelease];
} else {
// New-style loading
IFCompilerSettings* newSettings = [[[IFCompilerSettings alloc] init] autorelease];
[newSettings restoreSettingsFromPlist: [settingsFile regularFileContents]];
return newSettings;
}
}
- (void) clearIndex {
// Delete the contents of the index file wrapper
NSFileWrapper* index = [[self fileWrappers] objectForKey: @"Index"];
NSString* file;
NSEnumerator* fileEnum = [[[[index fileWrappers] copy] autorelease] keyEnumerator];
while (file = [fileEnum nextObject]) {
[index removeFileWrapper: [[index fileWrappers] objectForKey: file]];
}
}
@end