//// FileSettings.m// PythonLauncher//// Created by Jack Jansen on Sun Jul 21 2002.// Copyright (c) 2002 __MyCompanyName__. All rights reserved.//#import "FileSettings.h"@implementation FileSettings+ (id)getFactorySettingsForFileType: (NSString *)filetype{static FileSettings *fsdefault_py, *fsdefault_pyw, *fsdefault_pyc;FileSettings **curdefault;if ([filetype isEqualToString: @"Python Script"]) {curdefault = &fsdefault_py;} else if ([filetype isEqualToString: @"Python GUI Script"]) {curdefault = &fsdefault_pyw;} else if ([filetype isEqualToString: @"Python Bytecode Document"]) {curdefault = &fsdefault_pyc;} else {NSLog(@"Funny File Type: %@\n", filetype);curdefault = &fsdefault_py;filetype = @"Python Script";}if (!*curdefault) {*curdefault = [[FileSettings new] initForFSDefaultFileType: filetype];}return *curdefault;}+ (id)getDefaultsForFileType: (NSString *)filetype{static FileSettings *default_py, *default_pyw, *default_pyc;FileSettings **curdefault;if ([filetype isEqualToString: @"Python Script"]) {curdefault = &default_py;} else if ([filetype isEqualToString: @"Python GUI Script"]) {curdefault = &default_pyw;} else if ([filetype isEqualToString: @"Python Bytecode Document"]) {curdefault = &default_pyc;} else {NSLog(@"Funny File Type: %@\n", filetype);curdefault = &default_py;filetype = @"Python Script";}if (!*curdefault) {*curdefault = [[FileSettings new] initForDefaultFileType: filetype];}return *curdefault;}+ (id)newSettingsForFileType: (NSString *)filetype{FileSettings *cur;cur = [FileSettings new];[cur initForFileType: filetype];return [cur retain];}- (id)initWithFileSettings: (FileSettings *)source{self = [super init];if (!self) return self;interpreter = [source->interpreter retain];honourhashbang = source->honourhashbang;debug = source->debug;verbose = source->verbose;inspect = source->inspect;optimize = source->optimize;nosite = source->nosite;tabs = source->tabs;others = [source->others retain];scriptargs = [source->scriptargs retain];with_terminal = source->with_terminal;prefskey = source->prefskey;if (prefskey) [prefskey retain];return self;}- (id)initForFileType: (NSString *)filetype{FileSettings *defaults;defaults = [FileSettings getDefaultsForFileType: filetype];self = [self initWithFileSettings: defaults];origsource = [defaults retain];return self;}- (id)initForFSDefaultFileType: (NSString *)filetype{int i;NSString *filename;NSDictionary *dict;static NSDictionary *factorySettings;self = [super init];if (!self) return self;if (factorySettings == NULL) {NSBundle *bdl = [NSBundle mainBundle];NSString *path = [ bdl pathForResource: @"factorySettings"ofType: @"plist"];factorySettings = [[NSDictionary dictionaryWithContentsOfFile:path] retain];if (factorySettings == NULL) {NSLog(@"Missing %@", path);return NULL;}}dict = [factorySettings objectForKey: filetype];if (dict == NULL) {NSLog(@"factorySettings.plist misses file type \"%@\"", filetype);interpreter = [@"no default found" retain];return NULL;}[self applyValuesFromDict: dict];interpreters = [dict objectForKey: @"interpreter_list"];interpreter = NULL;for (i=0; i < [interpreters count]; i++) {filename = [interpreters objectAtIndex: i];filename = [filename stringByExpandingTildeInPath];if ([[NSFileManager defaultManager] fileExistsAtPath: filename]) {interpreter = [filename retain];break;}}if (interpreter == NULL)interpreter = [@"no default found" retain];origsource = NULL;return self;}- (void)applyUserDefaults: (NSString *)filetype{NSUserDefaults *defaults;NSDictionary *dict;defaults = [NSUserDefaults standardUserDefaults];dict = [defaults dictionaryForKey: filetype];if (!dict)return;[self applyValuesFromDict: dict];}- (id)initForDefaultFileType: (NSString *)filetype{FileSettings *fsdefaults;fsdefaults = [FileSettings getFactorySettingsForFileType: filetype];self = [self initWithFileSettings: fsdefaults];if (!self) return self;interpreters = [fsdefaults->interpreters retain];scriptargs = [@"" retain];[self applyUserDefaults: filetype];prefskey = [filetype retain];return self;}- (void)reset{if (origsource) {[self updateFromSource: origsource];} else {FileSettings *fsdefaults;fsdefaults = [FileSettings getFactorySettingsForFileType: prefskey];[self updateFromSource: fsdefaults];}}- (void)updateFromSource: (id <FileSettingsSource>)source{interpreter = [[source interpreter] retain];honourhashbang = [source honourhashbang];debug = [source debug];verbose = [source verbose];inspect = [source inspect];optimize = [source optimize];nosite = [source nosite];tabs = [source tabs];others = [[source others] retain];scriptargs = [[source scriptargs] retain];with_terminal = [source with_terminal];// And if this is a user defaults object we also save the// valuesif (!origsource) {NSUserDefaults *defaults;NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:interpreter, @"interpreter",[NSNumber numberWithBool: honourhashbang], @"honourhashbang",[NSNumber numberWithBool: debug], @"debug",[NSNumber numberWithBool: verbose], @"verbose",[NSNumber numberWithBool: inspect], @"inspect",[NSNumber numberWithBool: optimize], @"optimize",[NSNumber numberWithBool: nosite], @"nosite",[NSNumber numberWithBool: tabs], @"tabs",others, @"others",scriptargs, @"scriptargs",[NSNumber numberWithBool: with_terminal], @"with_terminal",nil];defaults = [NSUserDefaults standardUserDefaults];[defaults setObject: dict forKey: prefskey];}}- (void)applyValuesFromDict: (NSDictionary *)dict{id value;value = [dict objectForKey: @"interpreter"];if (value) interpreter = [value retain];value = [dict objectForKey: @"honourhashbang"];if (value) honourhashbang = [value boolValue];value = [dict objectForKey: @"debug"];if (value) debug = [value boolValue];value = [dict objectForKey: @"verbose"];if (value) verbose = [value boolValue];value = [dict objectForKey: @"inspect"];if (value) inspect = [value boolValue];value = [dict objectForKey: @"optimize"];if (value) optimize = [value boolValue];value = [dict objectForKey: @"nosite"];if (value) nosite = [value boolValue];value = [dict objectForKey: @"tabs"];if (value) tabs = [value boolValue];value = [dict objectForKey: @"others"];if (value) others = [value retain];value = [dict objectForKey: @"scriptargs"];if (value) scriptargs = [value retain];value = [dict objectForKey: @"with_terminal"];if (value) with_terminal = [value boolValue];}- (NSString*)_replaceSingleQuotes: (NSString*)string{/* Replace all single-quotes by '"'"', that way shellquoting will* be correct when the result value is delimited using single quotes.*/NSArray* components = [string componentsSeparatedByString:@"'"];return [components componentsJoinedByString:@"'\"'\"'"];}- (NSString *)commandLineForScript: (NSString *)script{NSString *cur_interp = NULL;NSString* script_dir = NULL;char hashbangbuf[1024];FILE *fp;char *p;script_dir = [script substringToIndex:[script length]-[[script lastPathComponent] length]];if (honourhashbang &&(fp=fopen([script fileSystemRepresentation], "r")) &&fgets(hashbangbuf, sizeof(hashbangbuf), fp) &&strncmp(hashbangbuf, "#!", 2) == 0 &&(p=strchr(hashbangbuf, '\n'))) {*p = '0円';p = hashbangbuf + 2;while (*p == ' ') p++;cur_interp = [NSString stringWithUTF8String: p];}if (!cur_interp)cur_interp = interpreter;return [NSString stringWithFormat:@"cd '%@' && '%@'%s%s%s%s%s%s %@ '%@' %@ %s",[self _replaceSingleQuotes:script_dir],[self _replaceSingleQuotes:cur_interp],debug?" -d":"",verbose?" -v":"",inspect?" -i":"",optimize?" -O":"",nosite?" -S":"",tabs?" -t":"",others,[self _replaceSingleQuotes:script],scriptargs ? scriptargs : @"",with_terminal? "&& echo Exit status: $? && exit 1" : " &"];}- (NSArray *) interpreters { return interpreters;};// FileSettingsSource protocol- (NSString *) interpreter { return interpreter;};- (BOOL) honourhashbang { return honourhashbang; };- (BOOL) debug { return debug;};- (BOOL) verbose { return verbose;};- (BOOL) inspect { return inspect;};- (BOOL) optimize { return optimize;};- (BOOL) nosite { return nosite;};- (BOOL) tabs { return tabs;};- (NSString *) others { return others;};- (NSString *) scriptargs { return scriptargs;};- (BOOL) with_terminal { return with_terminal;};@end
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。