forked from erkyrath/Inform7-IDE-Mac
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIFStandardProject.m
144 lines (110 loc) · 3.68 KB
/
IFStandardProject.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
136
137
138
139
140
141
142
143
//
// IFStandardProject.m
// Inform
//
// Created by Andrew Hunter on Sat Sep 13 2003.
// Copyright (c) 2003 Andrew Hunter. All rights reserved.
//
#import "IFStandardProject.h"
// Some useful functions
NSString* quoteInformString(NSString* stringIn) {
// Turns characters such as '"' into '^'
NSMutableString* res = [[NSMutableString alloc] init];
int x, len;
len = [stringIn length];
// Strip spaces at the end of the string
while ([stringIn characterAtIndex: len-1] == 10)
len--;
// Quote character appropriately
for (x=0; x<len; x++) {
unichar chr = [stringIn characterAtIndex: x];
if (chr == 10) {
[res appendString: @"^\n\t\t"];
} else if (chr < 32) {
// Ignore
} else if (chr < 255) {
switch (chr) {
case '"':
[res appendString: @"~"];
break;
case '@':
[res appendString: @"@@64"];
break;
case '\\':
[res appendString: @"@@92"];
break;
case '^':
[res appendString: @"@@94"];
break;
case '~':
[res appendString: @"@@126"];
break;
default:
[res appendFormat: @"%c", chr];
}
} else {
}
}
return [res autorelease];
}
@implementation IFStandardProject
- (NSString*) projectName {
return [[NSBundle mainBundle] localizedStringForKey: @"Single room"
value: @"Single room"
table: nil];
}
- (NSString*) projectHeading {
return [[NSBundle mainBundle] localizedStringForKey: @"InformVersion"
value: @"Inform 6.3"
table: nil];
}
- (NSAttributedString*) projectDescription {
return [[[NSAttributedString alloc] initWithString:
[[NSBundle mainBundle] localizedStringForKey: @"Creates an Inform project using the standard library and containing a single room"
value: @"Creates an Inform project using the standard library and containing a single room"
table: nil]] autorelease];
}
- (NSObject<IFProjectSetupView>*) configView {
IFStandardProjectView* vw;
vw = [[IFStandardProjectView alloc] init];
[NSBundle loadNibNamed: @"StandardProjectOptions"
owner: vw];
return [vw autorelease];
}
- (void) setupFile: (IFProjectFile*) file
fromView: (NSObject<IFProjectSetupView>*) view {
IFStandardProjectView* theView = (IFStandardProjectView*) view;
NSString* sourceTemplate = [NSString stringWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"standardMain" ofType: @"inf"]];
NSString* sourceFile = [NSString stringWithFormat: sourceTemplate,
quoteInformString([theView name]), quoteInformString([theView headline]),
quoteInformString([theView initialRoom]),
quoteInformString([theView initialRoomDescription]),
quoteInformString([theView teaser])];
[file addSourceFile: @"main.inf"
withContents: [sourceFile dataUsingEncoding: NSUTF8StringEncoding]];
}
@end
@implementation IFStandardProjectView
- (void) dealloc {
[view release];
[super dealloc];
}
- (NSView*) view {
return view;
}
- (NSString*) name {
return [name stringValue];
}
- (NSString*) headline {
return [headline stringValue];
}
- (NSString*) teaser {
return [[teaser textStorage] string];
}
- (NSString*) initialRoom {
return [initialRoom stringValue];
}
- (NSString*) initialRoomDescription {
return [[initialRoomDescription textStorage] string];
}
@end