1 /* vi:set ts=8 sts=4 sw=4 ft=objc:
3 * VIM - Vi IMproved by Bram Moolenaar
4 * MacVim GUI port by Bjorn Winckler
6 * Do ":help uganda" in Vim to read copying and usage conditions.
7 * Do ":help credits" in Vim to see a list of people who contributed.
8 * See README.txt for an overview of the Vim source code.
11 * MacVim.m: Code shared between Vim and MacVim.
16 char *MessageStrings[] =
31 "SetTextDimensionsMsgID",
32 "SetWindowTitleMsgID",
40 "RemoveMenuItemMsgID",
41 "EnableMenuItemMsgID",
45 "CreateScrollbarMsgID",
46 "DestroyScrollbarMsgID",
48 "SetScrollbarPositionMsgID",
49 "SetScrollbarThumbMsgID",
50 "ScrollbarEventMsgID",
53 "VimShouldCloseMsgID",
54 "SetDefaultColorsMsgID",
63 "AdjustLinespaceMsgID",
66 "EnterFullscreenMsgID",
67 "LeaveFullscreenMsgID",
68 "BuffersNotModifiedMsgID",
69 "BuffersModifiedMsgID",
71 "SetPreEditPositionMsgID",
75 "EnableAntialiasMsgID",
76 "DisableAntialiasMsgID",
78 "SetDocumentFilenameMsgID",
79 "OpenWithArgumentsMsgID",
86 // Argument used to stop MacVim from opening an empty window on startup
87 // (techincally this is a user default but should not be used as such).
88 NSString *MMNoWindowKey = @"MMNoWindow";
90 // Vim pasteboard type (holds motion type + string)
91 NSString *VimPBoardType = @"VimPBoardType";
99 // This loads all fonts from the Resources folder. The fonts are only
100 // available to the process which loaded them, so loading has to be done
101 // once for MacVim and an additional time for each Vim process. The
102 // returned container ref should be used to deactiave the font.
104 // (Code taken from cocoadev.com)
105 ATSFontContainerRef fontContainerRef = 0;
106 NSString *fontsFolder = [[NSBundle mainBundle] resourcePath];
108 NSURL *fontsURL = [NSURL fileURLWithPath:fontsFolder];
112 CFURLGetFSRef((CFURLRef)fontsURL, &fsRef);
114 if (FSGetCatalogInfo(&fsRef, kFSCatInfoNone, NULL, NULL, &fsSpec,
116 ATSFontActivateFromFileSpecification(&fsSpec,
117 kATSFontContextLocal, kATSFontFormatUnspecified, NULL,
118 kATSOptionFlagsDefault, &fontContainerRef);
123 return fontContainerRef;
129 @implementation NSString (MMExtras)
131 - (NSString *)stringByEscapingSpecialFilenameCharacters
133 // NOTE: This code assumes that no characters already have been escaped.
134 NSMutableString *string = [self mutableCopy];
136 [string replaceOccurrencesOfString:@"\\"
138 options:NSLiteralSearch
139 range:NSMakeRange(0, [string length])];
140 [string replaceOccurrencesOfString:@" "
142 options:NSLiteralSearch
143 range:NSMakeRange(0, [string length])];
144 [string replaceOccurrencesOfString:@"\t"
146 options:NSLiteralSearch
147 range:NSMakeRange(0, [string length])];
148 [string replaceOccurrencesOfString:@"%"
150 options:NSLiteralSearch
151 range:NSMakeRange(0, [string length])];
152 [string replaceOccurrencesOfString:@"#"
154 options:NSLiteralSearch
155 range:NSMakeRange(0, [string length])];
156 [string replaceOccurrencesOfString:@"|"
158 options:NSLiteralSearch
159 range:NSMakeRange(0, [string length])];
160 [string replaceOccurrencesOfString:@"\""
162 options:NSLiteralSearch
163 range:NSMakeRange(0, [string length])];
165 return [string autorelease];
168 @end // NSString (MMExtras)
172 @implementation NSColor (MMExtras)
174 + (NSColor *)colorWithRgbInt:(unsigned)rgb
176 float r = ((rgb>>16) & 0xff)/255.0f;
177 float g = ((rgb>>8) & 0xff)/255.0f;
178 float b = (rgb & 0xff)/255.0f;
180 return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f];
183 + (NSColor *)colorWithArgbInt:(unsigned)argb
185 float a = ((argb>>24) & 0xff)/255.0f;
186 float r = ((argb>>16) & 0xff)/255.0f;
187 float g = ((argb>>8) & 0xff)/255.0f;
188 float b = (argb & 0xff)/255.0f;
190 return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:a];
193 @end // NSColor (MMExtras)
198 @implementation NSDictionary (MMExtras)
200 + (id)dictionaryWithData:(NSData *)data
202 id plist = [NSPropertyListSerialization
203 propertyListFromData:data
204 mutabilityOption:NSPropertyListImmutable
206 errorDescription:NULL];
208 return [plist isKindOfClass:[NSDictionary class]] ? plist : nil;
211 - (NSData *)dictionaryAsData
213 return [NSPropertyListSerialization dataFromPropertyList:self
214 format:NSPropertyListBinaryFormat_v1_0 errorDescription:NULL];
222 @implementation NSMutableDictionary (MMExtras)
224 + (id)dictionaryWithData:(NSData *)data
226 id plist = [NSPropertyListSerialization
227 propertyListFromData:data
228 mutabilityOption:NSPropertyListMutableContainers
230 errorDescription:NULL];
232 return [plist isKindOfClass:[NSMutableDictionary class]] ? plist : nil;