Mercurial > projects > dstep
diff dstep/foundation/NSString.d @ 16:19885b43130e
Huge update, the bridge actually works now
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Sun, 03 Jan 2010 22:06:11 +0100 |
parents | 89f3c3ef1fd2 |
children | b9de51448c6b |
line wrap: on
line diff
--- a/dstep/foundation/NSString.d Mon Aug 03 15:31:48 2009 +0200 +++ b/dstep/foundation/NSString.d Sun Jan 03 22:06:11 2010 +0100 @@ -8,27 +8,51 @@ import dstep.foundation.NSArray; import dstep.foundation.NSCharacterSet; +import dstep.foundation.NSCoder; import dstep.foundation.NSData; import dstep.foundation.NSDictionary; import dstep.foundation.NSError; import dstep.foundation.NSLocale; +import dstep.foundation.NSObjCRuntime; import dstep.foundation.NSObject; +import dstep.foundation.NSPathUtilities; import dstep.foundation.NSRange; import dstep.foundation.NSURL; -import dstep.limits; +import dstep.foundation.NSZone; +import dstep.internal.String; +import dstep.internal.Version; +import dstep.objc.bridge.Wrapper; import dstep.objc.bridge.Bridge; -import dstep.objc.objc : id; -import dstep.stdarg; +import dstep.objc.objc; import bindings = dstep.foundation.NSString_bindings; -alias ushort unichar; +alias wchar unichar; alias NSUInteger NSStringCompareOptions; alias NSUInteger NSStringEncoding; alias NSUInteger NSStringEncodingConversionOptions; -const NSString NSParseErrorException; -const NSString NSCharacterConversionException; +private +{ + NSString NSParseErrorException_; + NSString NSCharacterConversionException_; +} + +NSString NSParseErrorException () +{ + if (NSParseErrorException_) + return NSParseErrorException_; + + return NSParseErrorException_ = new NSString(bindings.NSParseErrorException); +} + +NSString NSCharacterConversionException () +{ + if (NSCharacterConversionException_) + return NSCharacterConversionException_; + + return NSCharacterConversionException_ = new NSString(bindings.NSCharacterConversionException); +} enum { @@ -75,76 +99,8 @@ NSStringEncodingConversionExternalRepresentation = 2 } -static this () -{ - NSParseErrorException = new NSString(bindings.NSParseErrorException); - NSCharacterConversionException = new NSString(bindings.NSCharacterConversionException); -} - -class NSMutableString : NSString -{ - mixin ObjcWrap; - mixin TNSMutableStringExtensionMethods; - - void replaceCharactersInRange (NSRange range, NSString aString) - { - return invokeObjcSelf!(void, "replaceCharactersInRange:withString:", NSRange, NSString)(range, aString); - } -} - -class NSString : NSObject, INSCopying, INSMutableCopying, INSCoding -{ - mixin ObjcWrap; - mixin TNSExtendedStringPropertyListParsing; - mixin TNSStringExtensionMethods; - mixin TNSStringPathExtensions; - mixin TNSURLUtilities; - mixin TNSStringDeprecated; - - NSUInteger length () - { - return invokeObjcSelf!(NSUInteger, "length"); - } +const TNSExtendedStringPropertyListParsing = ` - ushort characterAtIndex (NSUInteger index) - { - return invokeObjcSelf!(ushort, "characterAtIndex:", NSUInteger)(index); - } - - Object copyWithZone (NSZone* zone) - { - return invokeObjcSelf!(Object, "copyWithZone:", NSZone*)(zone); - } - - Object mutableCopyWithZone (NSZone* zone) - { - return invokeObjcSelf!(Object, "mutableCopyWithZone:", NSZone*)(zone); - } - - void encodeWithCoder (NSCoder aCoder) - { - return invokeObjcSelf!(void, "encodeWithCoder:", NSCoder)(aCoder); - } - - Object initWithCoder (NSCoder aDecoder) - { - return invokeObjcSelf!(Object, "initWithCoder:", NSCoder)(aDecoder); - } - - this (NSCoder aDecoder) - { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithCoder:", NSCoder)(objcObject, aDecoder); - - if (result) - objcObject = ret; - - dObject = this; - } -} - -template TNSExtendedStringPropertyListParsing () -{ Object propertyList () { return invokeObjcSelf!(Object, "propertyList"); @@ -154,10 +110,10 @@ { return invokeObjcSelf!(NSDictionary, "propertyListFromStringsFileFormat"); } -} +`; -template TNSMutableStringExtensionMethods () -{ +const TNSMutableStringExtensionMethods = ` + void insertString (NSString aString, NSUInteger loc) { return invokeObjcSelf!(void, "insertString:atIndex:", NSString, NSUInteger)(aString, loc); @@ -183,35 +139,29 @@ return invokeObjcSelf!(void, "setString:", NSString)(aString); } - Object initWithCapacity (NSUInteger capacity) + NSString initWithCapacity (NSUInteger capacity) { return invokeObjcSelf!(Object, "initWithCapacity:", NSUInteger)(capacity); } - this (NSUInteger capacity) + /*this (NSUInteger capacity) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithCapacity:", NSUInteger)(objcObject, capacity); - - if (result) - objcObject = ret; - - dObject = this; - } + typeof(this).alloc.initWithCapacity(capacity); + }*/ static Object stringWithCapacity (NSUInteger capacity) { - return invokeObjcSelfClass!(Object, "stringWithCapacity:", NSUInteger)(capacity); + return invokeObjcSuperClass!(Object, "stringWithCapacity:", NSUInteger)(capacity); } NSUInteger replaceOccurrencesOfString (NSString target, NSString replacement, uint options, NSRange searchRange) { return invokeObjcSelf!(NSUInteger, "replaceOccurrencesOfString:withString:options:range:", NSString, NSString, uint, NSRange)(target, replacement, options, searchRange); } -} +`; -template TNSStringExtensionMethods () -{ +const TNSStringExtensionMethods = ` + void getCharacters (unichar* buffer) { return invokeObjcSelf!(void, "getCharacters:", unichar*)(buffer); @@ -539,359 +489,337 @@ static uint defaultCStringEncoding () { - return invokeObjcSelfClass!(uint, "defaultCStringEncoding"); + return invokeObjcSuperClass!(uint, "defaultCStringEncoding"); } static NSStringEncoding* availableStringEncodings () { - return invokeObjcSelfClass!(NSStringEncoding*, "availableStringEncodings"); + return invokeObjcSuperClass!(NSStringEncoding*, "availableStringEncodings"); } static NSString localizedNameOfStringEncoding (uint encoding) { - return invokeObjcSelfClass!(NSString, "localizedNameOfStringEncoding:", uint)(encoding); - } - - Object init () - { - return invokeObjcSelf!(Object, "init"); + return invokeObjcSuperClass!(NSString, "localizedNameOfStringEncoding:", uint)(encoding); } - this () - { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "init")(objcObject); - - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithCharactersNoCopy (unichar* characters, NSUInteger length, bool freeBuffer) + NSString initWithCharactersNoCopy (unichar* characters, NSUInteger length, bool freeBuffer) { return invokeObjcSelf!(Object, "initWithCharactersNoCopy:length:freeWhenDone:", unichar*, NSUInteger, bool)(characters, length, freeBuffer); } - this (unichar* characters, NSUInteger length, bool freeBuffer) + /*this (unichar* characters, NSUInteger length, bool freeBuffer) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithCharactersNoCopy:length:freeWhenDone:", unichar*, NSUInteger, bool)(objcObject, characters, length, freeBuffer); + typeof(this).alloc.initWithCharactersNoCopy(characters, length, freeBuffer); + }*/ - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithCharacters (unichar* characters, NSUInteger length) + NSString initWithCharacters (unichar* characters, NSUInteger length) { return invokeObjcSelf!(Object, "initWithCharacters:length:", unichar*, NSUInteger)(characters, length); } - this (unichar* characters, NSUInteger length) + /*this (unichar* characters, NSUInteger length) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithCharacters:length:", unichar*, NSUInteger)(objcObject, characters, length); + typeof(this).alloc.initWithCharacters(characters, length); + }*/ - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithUTF8String (char* nullTerminatedCString) + NSString initWithUTF8String (char* nullTerminatedCString) { return invokeObjcSelf!(Object, "initWithUTF8String:", char*)(nullTerminatedCString); } - this (char* nullTerminatedCString) + /*this (char* nullTerminatedCString) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithUTF8String:", char*)(objcObject, nullTerminatedCString); + typeof(this).alloc.initWithUTF8String(nullTerminatedCString); + }*/ - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithString (NSString aString) + NSString initWithString (NSString aString) { return invokeObjcSelf!(Object, "initWithString:", NSString)(aString); } - this (NSString aString) + /*this (NSString aString) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithString:", NSString)(objcObject, aString); + typeof(this).alloc.initWithString(aString); + }*/ - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithFormat (NSString initWithFormat, ...) + NSString initWithFormat (NSString initWithFormat, ...) { return invokeObjcSelf!(Object, "initWithFormat:", NSString)(initWithFormat); } - this (NSString initWithFormat, ...) + /*this (NSString initWithFormat, ...) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithFormat:", NSString)(objcObject, initWithFormat); + typeof(this).alloc.initWithFormat(initWithFormat); + }*/ - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithFormat (NSString format, char* argList) + NSString initWithFormat (NSString format, char* argList) { return invokeObjcSelf!(Object, "initWithFormat:arguments:", NSString, char*)(format, argList); } - this (NSString format, char* argList) + /*this (NSString format, char* argList) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithFormat:arguments:", NSString, char*)(objcObject, format, argList); + typeof(this).alloc.initWithFormat(format, argList); + }*/ - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithFormat (NSString format, Object locale, ...) + NSString initWithFormat (NSString format, Object locale, ...) { return invokeObjcSelf!(Object, "initWithFormat:locale:", NSString, Object)(format, locale); } - this (NSString format, Object locale, ...) + /*this (NSString format, Object locale, ...) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithFormat:locale:", NSString, Object)(objcObject, format, locale); + typeof(this).alloc.initWithFormat(format, locale); + }*/ - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithFormat (NSString format, Object locale, char* argList) + NSString initWithFormat (NSString format, Object locale, char* argList) { return invokeObjcSelf!(Object, "initWithFormat:locale:arguments:", NSString, Object, char*)(format, locale, argList); } - this (NSString format, Object locale, char* argList) + /*this (NSString format, Object locale, char* argList) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithFormat:locale:arguments:", NSString, Object, char*)(objcObject, format, locale, argList); + typeof(this).alloc.initWithFormat(format, locale, argList); + }*/ - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithData (NSData data, uint encoding) + NSString initWithData (NSData data, uint encoding) { return invokeObjcSelf!(Object, "initWithData:encoding:", NSData, uint)(data, encoding); } - this (NSData data, uint encoding) + /*this (NSData data, uint encoding) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithData:encoding:", NSData, uint)(objcObject, data, encoding); + typeof(this).alloc.initWithData(data, encoding); + }*/ - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithBytes (void* bytes, NSUInteger len, uint encoding) + NSString initWithBytes (void* bytes, NSUInteger len, uint encoding) { return invokeObjcSelf!(Object, "initWithBytes:length:encoding:", void*, NSUInteger, uint)(bytes, len, encoding); } - this (void* bytes, NSUInteger len, uint encoding) + /*this (void* bytes, NSUInteger len, uint encoding) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithBytes:length:encoding:", void*, NSUInteger, uint)(objcObject, bytes, len, encoding); + typeof(this).alloc.initWithBytes(bytes, len, encoding); + }*/ - if (result) - objcObject = ret; - - dObject = this; + NSString initWithBytesNoCopy (void* bytes, NSUInteger len, NSStringEncoding encoding, bool freeBuffer) + { + return invokeObjcSelf!(Object, "initWithBytesNoCopy:length:encoding:freeWhenDone:", void*, NSUInteger, NSStringEncoding, bool)(bytes, len, encoding, freeBuffer); } - Object initWithBytesNoCopy (void* bytes, NSUInteger len, uint encoding, bool freeBuffer) - { - return invokeObjcSelf!(Object, "initWithBytesNoCopy:length:encoding:freeWhenDone:", void*, NSUInteger, uint, bool)(bytes, len, encoding, freeBuffer); - } - - this (void* bytes, NSUInteger len, uint encoding, bool freeBuffer) + /*this (void* bytes, NSUInteger len, uint encoding, bool freeBuffer) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithBytesNoCopy:length:encoding:freeWhenDone:", void*, NSUInteger, uint, bool)(objcObject, bytes, len, encoding, freeBuffer); - - if (result) - objcObject = ret; - - dObject = this; - } + typeof(this).alloc.initWithBytesNoCopy(bytes, len, encoding, freeBuffer); + }*/ static Object string () { - return invokeObjcSelfClass!(Object, "string"); + return invokeObjcSuperClass!(Object, "string"); } static Object stringWithString (NSString string) { - return invokeObjcSelfClass!(Object, "stringWithString:", NSString)(string); + return invokeObjcSuperClass!(Object, "stringWithString:", NSString)(string); } static Object stringWithCharacters (unichar* characters, NSUInteger length) { - return invokeObjcSelfClass!(Object, "stringWithCharacters:length:", unichar*, NSUInteger)(characters, length); + return invokeObjcSuperClass!(Object, "stringWithCharacters:length:", unichar*, NSUInteger)(characters, length); } - static Object stringWithUTF8String (char* nullTerminatedCString) + static NSString stringWithUTF8String (char* nullTerminatedCString) { - return invokeObjcSelfClass!(Object, "stringWithUTF8String:", char*)(nullTerminatedCString); + return invokeObjcSuperClass!(NSString, "stringWithUTF8String:", char*)(nullTerminatedCString); } static Object stringWithFormat (NSString stringWithFormat, ...) { - return invokeObjcSelfClass!(Object, "stringWithFormat:", NSString)(stringWithFormat); + return invokeObjcSuperClass!(Object, "stringWithFormat:", NSString)(stringWithFormat); } static Object localizedStringWithFormat (NSString localizedStringWithFormat, ...) { - return invokeObjcSelfClass!(Object, "localizedStringWithFormat:", NSString)(localizedStringWithFormat); - } - - Object initWithCString (char* nullTerminatedCString, uint encoding) - { - return invokeObjcSelf!(Object, "initWithCString:encoding:", char*, uint)(nullTerminatedCString, encoding); - } - - this (char* nullTerminatedCString, uint encoding) - { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithCString:encoding:", char*, uint)(objcObject, nullTerminatedCString, encoding); - - if (result) - objcObject = ret; - - dObject = this; + return invokeObjcSuperClass!(Object, "localizedStringWithFormat:", NSString)(localizedStringWithFormat); } static Object stringWithCString (char* cString, uint enc) { - return invokeObjcSelfClass!(Object, "stringWithCString:encoding:", char*, uint)(cString, enc); + return invokeObjcSuperClass!(Object, "stringWithCString:encoding:", char*, uint)(cString, enc); } - Object initWithContentsOfURL (NSURL url, uint enc, NSError** error) + NSString initWithContentsOfURL (NSURL url, NSStringEncoding enc, ref NSError error) { - return invokeObjcSelf!(Object, "initWithContentsOfURL:encoding:error:", NSURL, uint, NSError**)(url, enc, error); + id err; + + if (error) + err = new objc_object; + + Object result = invokeObjcSelf!(Object, "initWithContentsOfURL:encoding:error:", NSURL, NSStringEncoding, id*)(url, enc, &err); + + if (err) + error = new NSError(err); + + return result; } - this (NSURL url, uint enc, NSError** error) + /*this (NSURL url, NSStringEncoding enc, ref NSError error) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithContentsOfURL:encoding:error:", NSURL, uint, NSError**)(objcObject, url, enc, error); + typeof(this).alloc.initWithContentsOfURL(url, enc, error); + }*/ - if (result) - objcObject = ret; - - dObject = this; - } - - Object initWithContentsOfFile (NSString path, uint enc, NSError** error) + NSString initWithContentsOfFile (NSString path, NSStringEncoding enc, ref NSError error) { - return invokeObjcSelf!(Object, "initWithContentsOfFile:encoding:error:", NSString, uint, NSError**)(path, enc, error); + id err; + + if (error) + err = new objc_object; + + Object result = invokeObjcSelf!(Object, "initWithContentsOfFile:encoding:error:", NSString, NSStringEncoding, id*)(path, enc, &err); + + if (err) + error = new NSError(err); + + return result; } - this (NSString path, uint enc, NSError** error) + /*this (NSString path, NSStringEncoding enc, ref NSError error) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithContentsOfFile:encoding:error:", NSString, uint, NSError**)(objcObject, path, enc, error); + typeof(this).alloc.initWithContentsOfFile(path, enc, error); + }*/ - if (result) - objcObject = ret; - - dObject = this; + static Object stringWithContentsOfURL (NSURL url, NSStringEncoding enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + Object result = invokeObjcSuperClass!(Object, "stringWithContentsOfURL:encoding:error:", NSURL, NSStringEncoding, id*)(url, enc, &err); + + if (err) + error = new NSError(err); + + return result; } - static Object stringWithContentsOfURL (NSURL url, uint enc, NSError** error) + static Object stringWithContentsOfFile (NSString path, NSStringEncoding enc, ref NSError error) { - return invokeObjcSelfClass!(Object, "stringWithContentsOfURL:encoding:error:", NSURL, uint, NSError**)(url, enc, error); + id err; + + if (error) + err = new objc_object; + + Object result = invokeObjcSuperClass!(Object, "stringWithContentsOfFile:encoding:error:", NSString, NSStringEncoding, id*)(path, enc, &err); + + if (err) + error = new NSError(err); + + return result; } - static Object stringWithContentsOfFile (NSString path, uint enc, NSError** error) + NSString initWithContentsOfURL (NSURL url, NSStringEncoding* enc, ref NSError error) { - return invokeObjcSelfClass!(Object, "stringWithContentsOfFile:encoding:error:", NSString, uint, NSError**)(path, enc, error); - } - - Object initWithContentsOfURL (NSURL url, NSStringEncoding* enc, NSError** error) - { - return invokeObjcSelf!(Object, "initWithContentsOfURL:usedEncoding:error:", NSURL, NSStringEncoding*, NSError**)(url, enc, error); + id err; + + if (error) + err = new objc_object; + + Object result = invokeObjcSelf!(Object, "initWithContentsOfURL:usedEncoding:error:", NSURL, NSStringEncoding*, id*)(url, enc, &err); + + if (err) + error = new NSError(err); + + return result; } - this (NSURL url, NSStringEncoding* enc, NSError** error) + /*this (NSURL url, NSStringEncoding* enc, ref NSError error) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithContentsOfURL:usedEncoding:error:", NSURL, NSStringEncoding*, NSError**)(objcObject, url, enc, error); + typeof(this).alloc.initWithContentsOfURL(url, enc, error); + }*/ - if (result) - objcObject = ret; - - dObject = this; + NSString initWithContentsOfFile (NSString path, NSStringEncoding* enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + Object result = invokeObjcSelf!(Object, "initWithContentsOfFile:usedEncoding:error:", NSString, NSStringEncoding*, id*)(path, enc, &err); + + if (err) + error = new NSError(err); + + return result; } - Object initWithContentsOfFile (NSString path, NSStringEncoding* enc, NSError** error) + /*this (NSString path, NSStringEncoding* enc, ref NSError error) + { + typeof(this).alloc.initWithContentsOfFile(path, enc, error); + }*/ + + static Object stringWithContentsOfURL (NSURL url, NSStringEncoding* enc, ref NSError error) { - return invokeObjcSelf!(Object, "initWithContentsOfFile:usedEncoding:error:", NSString, NSStringEncoding*, NSError**)(path, enc, error); + id err; + + if (error) + err = new objc_object; + + Object result = invokeObjcSuperClass!(Object, "stringWithContentsOfURL:usedEncoding:error:", NSURL, NSStringEncoding*, id*)(url, enc, &err); + + if (err) + error = new NSError(err); + + return result; } - this (NSString path, NSStringEncoding* enc, NSError** error) + static Object stringWithContentsOfFile (NSString path, NSStringEncoding* enc, ref NSError error) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithContentsOfFile:usedEncoding:error:", NSString, NSStringEncoding*, NSError**)(objcObject, path, enc, error); - - if (result) - objcObject = ret; - - dObject = this; - } - - static Object stringWithContentsOfURL (NSURL url, NSStringEncoding* enc, NSError** error) - { - return invokeObjcSelfClass!(Object, "stringWithContentsOfURL:usedEncoding:error:", NSURL, NSStringEncoding*, NSError**)(url, enc, error); + id err; + + if (error) + err = new objc_object; + + Object result = invokeObjcSuperClass!(Object, "stringWithContentsOfFile:usedEncoding:error:", NSString, NSStringEncoding*, id*)(path, enc, &err); + + if (err) + error = new NSError(err); + + return result; } - static Object stringWithContentsOfFile (NSString path, NSStringEncoding* enc, NSError** error) + bool writeToURL (NSURL url, bool useAuxiliaryFile, uint enc, ref NSError error) { - return invokeObjcSelfClass!(Object, "stringWithContentsOfFile:usedEncoding:error:", NSString, NSStringEncoding*, NSError**)(path, enc, error); + id err; + + if (error) + err = new objc_object; + + bool result = invokeObjcSelf!(bool, "writeToURL:atomically:encoding:error:", NSURL, bool, uint, id*)(url, useAuxiliaryFile, enc, &err); + + if (err) + error = new NSError(err); + + return result; } - bool writeToURL (NSURL url, bool useAuxiliaryFile, uint enc, NSError** error) - { - return invokeObjcSelf!(bool, "writeToURL:atomically:encoding:error:", NSURL, bool, uint, NSError**)(url, useAuxiliaryFile, enc, error); - } - - bool writeToFile (NSString path, bool useAuxiliaryFile, uint enc, NSError** error) + bool writeToFile (NSString path, bool useAuxiliaryFile, uint enc, ref NSError error) { - return invokeObjcSelf!(bool, "writeToFile:atomically:encoding:error:", NSString, bool, uint, NSError**)(path, useAuxiliaryFile, enc, error); + id err; + + if (error) + err = new objc_object; + + bool result = invokeObjcSelf!(bool, "writeToFile:atomically:encoding:error:", NSString, bool, uint, id*)(path, useAuxiliaryFile, enc, &err); + + if (err) + error = new NSError(err); + + return result; } -} +`; -template TNSStringDeprecated () -{ +const TNSStringDeprecated = ` + char* cString () { return invokeObjcSelf!(char*, "cString"); @@ -932,104 +860,1105 @@ return invokeObjcSelf!(bool, "writeToURL:atomically:", NSURL, bool)(url, atomically); } - Object initWithContentsOfFile (NSString path) + /*NSString initWithContentsOfFile (NSString path) { return invokeObjcSelf!(Object, "initWithContentsOfFile:", NSString)(path); } this (NSString path) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithContentsOfFile:", NSString)(objcObject, path); - - if (result) - objcObject = ret; - - dObject = this; + typeof(this).alloc.initWithContentsOfFile(path); } - Object initWithContentsOfURL (NSURL url) + NSString initWithContentsOfURL (NSURL url) { return invokeObjcSelf!(Object, "initWithContentsOfURL:", NSURL)(url); } this (NSURL url) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithContentsOfURL:", NSURL)(objcObject, url); - - if (result) - objcObject = ret; - - dObject = this; - } + typeof(this).alloc.initWithContentsOfURL(url); + }*/ static Object stringWithContentsOfFile (NSString path) { - return invokeObjcSelfClass!(Object, "stringWithContentsOfFile:", NSString)(path); + return invokeObjcSuperClass!(Object, "stringWithContentsOfFile:", NSString)(path); } static Object stringWithContentsOfURL (NSURL url) { - return invokeObjcSelfClass!(Object, "stringWithContentsOfURL:", NSURL)(url); + return invokeObjcSuperClass!(Object, "stringWithContentsOfURL:", NSURL)(url); } - Object initWithCStringNoCopy (char* bytes, NSUInteger length, bool freeBuffer) + NSString initWithCStringNoCopy (char* bytes, NSUInteger length, bool freeBuffer) { return invokeObjcSelf!(Object, "initWithCStringNoCopy:length:freeWhenDone:", char*, NSUInteger, bool)(bytes, length, freeBuffer); } this (char* bytes, NSUInteger length, bool freeBuffer) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithCStringNoCopy:length:freeWhenDone:", char*, NSUInteger, bool)(objcObject, bytes, length, freeBuffer); - - if (result) - objcObject = ret; - - dObject = this; + typeof(this).alloc.initWithCStringNoCopy(bytes, length, freeBuffer); } - Object initWithCString (char* bytes, NSUInteger length) + NSString initWithCString (char* bytes, NSUInteger length) { return invokeObjcSelf!(Object, "initWithCString:length:", char*, NSUInteger)(bytes, length); } this (char* bytes, NSUInteger length) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithCString:length:", char*, NSUInteger)(objcObject, bytes, length); - - if (result) - objcObject = ret; - - dObject = this; + typeof(this).alloc.initWithCString(bytes, length); } - Object initWithCString (char* bytes) + NSString initWithCString (char* bytes) { return invokeObjcSelf!(Object, "initWithCString:", char*)(bytes); } this (char* bytes) { - objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass); - id result = Bridge.invokeObjcMethod!(id, "initWithCString:", char*)(objcObject, bytes); - - if (result) - objcObject = ret; - - dObject = this; + typeof(this).alloc.initWithCString(bytes); } static Object stringWithCString (char* bytes, NSUInteger length) { - return invokeObjcSelfClass!(Object, "stringWithCString:length:", char*, NSUInteger)(bytes, length); + return invokeObjcSuperClass!(Object, "stringWithCString:length:", char*, NSUInteger)(bytes, length); } static Object stringWithCString (char* bytes) { - return invokeObjcSelfClass!(Object, "stringWithCString:", char*)(bytes); + return invokeObjcSuperClass!(Object, "stringWithCString:", char*)(bytes); + } +`; + +class NSMutableString : NSString +{ + mixin (ObjcClusterWrap); + + this () + { + super(typeof(this).alloc.init.objcObject); + } + + typeof(this) init () + { + return invokeObjcSelf!(typeof(this), "init"); + } + + void replaceCharactersInRange (NSRange range, NSString aString) + { + return invokeObjcSelf!(void, "replaceCharactersInRange:withString:", NSRange, NSString)(range, aString); + } + + // TNSMutableStringExtensionMethods + void insertString (NSString aString, NSUInteger loc) + { + return invokeObjcSelf!(void, "insertString:atIndex:", NSString, NSUInteger)(aString, loc); + } + + void deleteCharactersInRange (NSRange range) + { + return invokeObjcSelf!(void, "deleteCharactersInRange:", NSRange)(range); + } + + void appendString (NSString aString) + { + return invokeObjcSelf!(void, "appendString:", NSString)(aString); + } + + void appendFormat (NSString appendFormat, ...) + { + return invokeObjcSelf!(void, "appendFormat:", NSString)(appendFormat); + } + + void setString (NSString aString) + { + return invokeObjcSelf!(void, "setString:", NSString)(aString); + } + + NSMutableString initWithCapacity (NSUInteger capacity) + { + return invokeObjcSelf!(NSMutableString, "initWithCapacity:", NSUInteger)(capacity); + } + + /*this (NSUInteger capacity) + { + typeof(this).alloc.initWithCapacity(capacity); + }*/ + + static NSMutableString stringWithCapacity (NSUInteger capacity) + { + return invokeObjcSuperClass!(NSMutableString, "stringWithCapacity:", NSUInteger)(capacity); + } + + NSUInteger replaceOccurrencesOfString (NSString target, NSString replacement, uint options, NSRange searchRange) + { + return invokeObjcSelf!(NSUInteger, "replaceOccurrencesOfString:withString:options:range:", NSString, NSString, uint, NSRange)(target, replacement, options, searchRange); } } +class NSString : NSObject, INSCopying, INSMutableCopying, INSCoding +{ + mixin (ObjcClusterWrap); + + this () + { + super(typeof(this).alloc.init.objcObject); + } + + typeof(this) init () + { + return invokeObjcSelf!(typeof(this), "init"); + } + + NSUInteger length () + { + return invokeObjcSelf!(NSUInteger, "length"); + } + + unichar characterAtIndex (NSUInteger index) + { + return invokeObjcSelf!(unichar, "characterAtIndex:", NSUInteger)(index); + } + + NSString copyWithZone (NSZone* zone) + { + return invokeObjcSelf!(NSString, "copyWithZone:", NSZone*)(zone); + } + + NSString mutableCopyWithZone (NSZone* zone) + { + return invokeObjcSelf!(NSString, "mutableCopyWithZone:", NSZone*)(zone); + } + + void encodeWithCoder (NSCoder aCoder) + { + return invokeObjcSelf!(void, "encodeWithCoder:", NSCoder)(aCoder); + } + + NSString initWithCoder (NSCoder aDecoder) + { + return invokeObjcSelf!(NSString, "initWithCoder:", NSCoder)(aDecoder); + } + + this (NSCoder aDecoder) + { + typeof(this).alloc.initWithCoder(aDecoder); + } + + // TNSExtendedStringPropertyListParsing + Object propertyList () + { + return invokeObjcSelf!(Object, "propertyList"); + } + + NSDictionary propertyListFromStringsFileFormat () + { + return invokeObjcSelf!(NSDictionary, "propertyListFromStringsFileFormat"); + } + + // TNSStringExtensionMethods + void getCharacters (unichar* buffer) + { + return invokeObjcSelf!(void, "getCharacters:", unichar*)(buffer); + } + + void getCharacters (unichar* buffer, NSRange aRange) + { + return invokeObjcSelf!(void, "getCharacters:range:", unichar*, NSRange)(buffer, aRange); + } + + NSString substringFromIndex (NSUInteger from) + { + return invokeObjcSelf!(NSString, "substringFromIndex:", NSUInteger)(from); + } + + NSString substringToIndex (NSUInteger to) + { + return invokeObjcSelf!(NSString, "substringToIndex:", NSUInteger)(to); + } + + NSString substringWithRange (NSRange range) + { + return invokeObjcSelf!(NSString, "substringWithRange:", NSRange)(range); + } + + int compare (NSString string) + { + return invokeObjcSelf!(int, "compare:", NSString)(string); + } + + int compare (NSString string, uint mask) + { + return invokeObjcSelf!(int, "compare:options:", NSString, uint)(string, mask); + } + + int compare (NSString string, uint mask, NSRange compareRange) + { + return invokeObjcSelf!(int, "compare:options:range:", NSString, uint, NSRange)(string, mask, compareRange); + } + + int compare (NSString string, uint mask, NSRange compareRange, Object locale) + { + return invokeObjcSelf!(int, "compare:options:range:locale:", NSString, uint, NSRange, Object)(string, mask, compareRange, locale); + } + + int caseInsensitiveCompare (NSString string) + { + return invokeObjcSelf!(int, "caseInsensitiveCompare:", NSString)(string); + } + + int localizedCompare (NSString string) + { + return invokeObjcSelf!(int, "localizedCompare:", NSString)(string); + } + + int localizedCaseInsensitiveCompare (NSString string) + { + return invokeObjcSelf!(int, "localizedCaseInsensitiveCompare:", NSString)(string); + } + + bool isEqualToString (NSString aString) + { + return invokeObjcSelf!(bool, "isEqualToString:", NSString)(aString); + } + + bool hasPrefix (NSString aString) + { + return invokeObjcSelf!(bool, "hasPrefix:", NSString)(aString); + } + + bool hasSuffix (NSString aString) + { + return invokeObjcSelf!(bool, "hasSuffix:", NSString)(aString); + } + + NSRange rangeOfString (NSString aString) + { + return invokeObjcSelf!(NSRange, "rangeOfString:", NSString)(aString); + } + + NSRange rangeOfString (NSString aString, uint mask) + { + return invokeObjcSelf!(NSRange, "rangeOfString:options:", NSString, uint)(aString, mask); + } + + NSRange rangeOfString (NSString aString, uint mask, NSRange searchRange) + { + return invokeObjcSelf!(NSRange, "rangeOfString:options:range:", NSString, uint, NSRange)(aString, mask, searchRange); + } + + NSRange rangeOfString (NSString aString, uint mask, NSRange searchRange, NSLocale locale) + { + return invokeObjcSelf!(NSRange, "rangeOfString:options:range:locale:", NSString, uint, NSRange, NSLocale)(aString, mask, searchRange, locale); + } + + NSRange rangeOfCharacterFromSet (NSCharacterSet aSet) + { + return invokeObjcSelf!(NSRange, "rangeOfCharacterFromSet:", NSCharacterSet)(aSet); + } + + NSRange rangeOfCharacterFromSet (NSCharacterSet aSet, uint mask) + { + return invokeObjcSelf!(NSRange, "rangeOfCharacterFromSet:options:", NSCharacterSet, uint)(aSet, mask); + } + + NSRange rangeOfCharacterFromSet (NSCharacterSet aSet, uint mask, NSRange searchRange) + { + return invokeObjcSelf!(NSRange, "rangeOfCharacterFromSet:options:range:", NSCharacterSet, uint, NSRange)(aSet, mask, searchRange); + } + + NSRange rangeOfComposedCharacterSequenceAtIndex (NSUInteger index) + { + return invokeObjcSelf!(NSRange, "rangeOfComposedCharacterSequenceAtIndex:", NSUInteger)(index); + } + + NSRange rangeOfComposedCharacterSequencesForRange (NSRange range) + { + return invokeObjcSelf!(NSRange, "rangeOfComposedCharacterSequencesForRange:", NSRange)(range); + } + + NSString stringByAppendingString (NSString aString) + { + return invokeObjcSelf!(NSString, "stringByAppendingString:", NSString)(aString); + } + + NSString stringByAppendingFormat (NSString stringByAppendingFormat, ...) + { + return invokeObjcSelf!(NSString, "stringByAppendingFormat:", NSString)(stringByAppendingFormat); + } + + double doubleValue () + { + return invokeObjcSelf!(double, "doubleValue"); + } + + float floatValue () + { + return invokeObjcSelf!(float, "floatValue"); + } + + int intValue () + { + return invokeObjcSelf!(int, "intValue"); + } + + NSInteger integerValue () + { + return invokeObjcSelf!(NSInteger, "integerValue"); + } + + long longLongValue () + { + return invokeObjcSelf!(long, "longLongValue"); + } + + bool boolValue () + { + return invokeObjcSelf!(bool, "boolValue"); + } + + NSArray componentsSeparatedByString (NSString separator) + { + return invokeObjcSelf!(NSArray, "componentsSeparatedByString:", NSString)(separator); + } + + NSArray componentsSeparatedByCharactersInSet (NSCharacterSet separator) + { + return invokeObjcSelf!(NSArray, "componentsSeparatedByCharactersInSet:", NSCharacterSet)(separator); + } + + NSString commonPrefixWithString (NSString aString, uint mask) + { + return invokeObjcSelf!(NSString, "commonPrefixWithString:options:", NSString, uint)(aString, mask); + } + + NSString uppercaseString () + { + return invokeObjcSelf!(NSString, "uppercaseString"); + } + + NSString lowercaseString () + { + return invokeObjcSelf!(NSString, "lowercaseString"); + } + + NSString capitalizedString () + { + return invokeObjcSelf!(NSString, "capitalizedString"); + } + + NSString stringByTrimmingCharactersInSet (NSCharacterSet set) + { + return invokeObjcSelf!(NSString, "stringByTrimmingCharactersInSet:", NSCharacterSet)(set); + } + + NSString stringByPaddingToLength (NSUInteger newLength, NSString padString, NSUInteger padIndex) + { + return invokeObjcSelf!(NSString, "stringByPaddingToLength:withString:startingAtIndex:", NSUInteger, NSString, NSUInteger)(newLength, padString, padIndex); + } + + void getLineStart (NSUInteger* startPtr, NSUInteger* lineEndPtr, NSUInteger* contentsEndPtr, NSRange range) + { + return invokeObjcSelf!(void, "getLineStart:end:contentsEnd:forRange:", NSUInteger*, NSUInteger*, NSUInteger*, NSRange)(startPtr, lineEndPtr, contentsEndPtr, range); + } + + NSRange lineRangeForRange (NSRange range) + { + return invokeObjcSelf!(NSRange, "lineRangeForRange:", NSRange)(range); + } + + void getParagraphStart (NSUInteger* startPtr, NSUInteger* parEndPtr, NSUInteger* contentsEndPtr, NSRange range) + { + return invokeObjcSelf!(void, "getParagraphStart:end:contentsEnd:forRange:", NSUInteger*, NSUInteger*, NSUInteger*, NSRange)(startPtr, parEndPtr, contentsEndPtr, range); + } + + NSRange paragraphRangeForRange (NSRange range) + { + return invokeObjcSelf!(NSRange, "paragraphRangeForRange:", NSRange)(range); + } + + NSString description () + { + return invokeObjcSelf!(NSString, "description"); + } + + NSUInteger hash () + { + return invokeObjcSelf!(NSUInteger, "hash"); + } + + uint fastestEncoding () + { + return invokeObjcSelf!(uint, "fastestEncoding"); + } + + uint smallestEncoding () + { + return invokeObjcSelf!(uint, "smallestEncoding"); + } + + NSData dataUsingEncoding (uint encoding, bool lossy) + { + return invokeObjcSelf!(NSData, "dataUsingEncoding:allowLossyConversion:", uint, bool)(encoding, lossy); + } + + NSData dataUsingEncoding (uint encoding) + { + return invokeObjcSelf!(NSData, "dataUsingEncoding:", uint)(encoding); + } + + bool canBeConvertedToEncoding (uint encoding) + { + return invokeObjcSelf!(bool, "canBeConvertedToEncoding:", uint)(encoding); + } + + char* cStringUsingEncoding (uint encoding) + { + return invokeObjcSelf!(char*, "cStringUsingEncoding:", uint)(encoding); + } + + bool getCString (char* buffer, NSUInteger maxBufferCount, uint encoding) + { + return invokeObjcSelf!(bool, "getCString:maxLength:encoding:", char*, NSUInteger, uint)(buffer, maxBufferCount, encoding); + } + + bool getBytes (void* buffer, NSUInteger maxBufferCount, NSUInteger* usedBufferCount, uint encoding, uint options, NSRange range, NSRangePointer leftover) + { + return invokeObjcSelf!(bool, "getBytes:maxLength:usedLength:encoding:options:range:remainingRange:", void*, NSUInteger, NSUInteger*, uint, uint, NSRange, NSRangePointer)(buffer, maxBufferCount, usedBufferCount, encoding, options, range, leftover); + } + + NSUInteger maximumLengthOfBytesUsingEncoding (uint enc) + { + return invokeObjcSelf!(NSUInteger, "maximumLengthOfBytesUsingEncoding:", uint)(enc); + } + + NSUInteger lengthOfBytesUsingEncoding (uint enc) + { + return invokeObjcSelf!(NSUInteger, "lengthOfBytesUsingEncoding:", uint)(enc); + } + + NSString decomposedStringWithCanonicalMapping () + { + return invokeObjcSelf!(NSString, "decomposedStringWithCanonicalMapping"); + } + + NSString precomposedStringWithCanonicalMapping () + { + return invokeObjcSelf!(NSString, "precomposedStringWithCanonicalMapping"); + } + + NSString decomposedStringWithCompatibilityMapping () + { + return invokeObjcSelf!(NSString, "decomposedStringWithCompatibilityMapping"); + } + + NSString precomposedStringWithCompatibilityMapping () + { + return invokeObjcSelf!(NSString, "precomposedStringWithCompatibilityMapping"); + } + + NSString stringByFoldingWithOptions (uint options, NSLocale locale) + { + return invokeObjcSelf!(NSString, "stringByFoldingWithOptions:locale:", uint, NSLocale)(options, locale); + } + + NSString stringByReplacingOccurrencesOfString (NSString target, NSString replacement, uint options, NSRange searchRange) + { + return invokeObjcSelf!(NSString, "stringByReplacingOccurrencesOfString:withString:options:range:", NSString, NSString, uint, NSRange)(target, replacement, options, searchRange); + } + + NSString stringByReplacingOccurrencesOfString (NSString target, NSString replacement) + { + return invokeObjcSelf!(NSString, "stringByReplacingOccurrencesOfString:withString:", NSString, NSString)(target, replacement); + } + + NSString stringByReplacingCharactersInRange (NSRange range, NSString replacement) + { + return invokeObjcSelf!(NSString, "stringByReplacingCharactersInRange:withString:", NSRange, NSString)(range, replacement); + } + + char* UTF8String () + { + return invokeObjcSelf!(char*, "UTF8String"); + } + + static uint defaultCStringEncoding () + { + return invokeObjcSuperClass!(uint, "defaultCStringEncoding"); + } + + static NSStringEncoding* availableStringEncodings () + { + return invokeObjcSuperClass!(NSStringEncoding*, "availableStringEncodings"); + } + + static NSString localizedNameOfStringEncoding (uint encoding) + { + return invokeObjcSuperClass!(NSString, "localizedNameOfStringEncoding:", uint)(encoding); + } + + NSString initWithCharactersNoCopy (unichar* characters, NSUInteger length, bool freeBuffer) + { + return invokeObjcSelf!(NSString, "initWithCharactersNoCopy:length:freeWhenDone:", unichar*, NSUInteger, bool)(characters, length, freeBuffer); + } + + /*this (unichar* characters, NSUInteger length, bool freeBuffer) + { + typeof(this).alloc.initWithCharactersNoCopy(characters, length, freeBuffer); + }*/ + + NSString initWithCharacters (unichar* characters, NSUInteger length) + { + return invokeObjcSelf!(NSString, "initWithCharacters:length:", unichar*, NSUInteger)(characters, length); + } + + /*this (unichar* characters, NSUInteger length) + { + typeof(this).alloc.initWithCharacters(characters, length); + }*/ + + NSString initWithUTF8String (char* nullTerminatedCString) + { + return invokeObjcSelf!(NSString, "initWithUTF8String:", char*)(nullTerminatedCString); + } + + /*this (char* nullTerminatedCString) + { + typeof(this).alloc.initWithUTF8String(nullTerminatedCString); + }*/ + + NSString initWithString (NSString aString) + { + return invokeObjcSelf!(NSString, "initWithString:", NSString)(aString); + } + + /*this (NSString aString) + { + typeof(this).alloc.initWithString(aString); + }*/ + + NSString initWithFormat (NSString initWithFormat, ...) + { + return invokeObjcSelf!(NSString, "initWithFormat:", NSString)(initWithFormat); + } + + /*this (NSString initWithFormat, ...) + { + typeof(this).alloc.initWithFormat(initWithFormat); + }*/ + + NSString initWithFormat (NSString format, char* argList) + { + return invokeObjcSelf!(NSString, "initWithFormat:arguments:", NSString, char*)(format, argList); + } + + /*this (NSString format, char* argList) + { + typeof(this).alloc.initWithFormat(format, argList); + }*/ + + NSString initWithFormat (NSString format, Object locale, ...) + { + return invokeObjcSelf!(NSString, "initWithFormat:locale:", NSString, Object)(format, locale); + } + + /*this (NSString format, Object locale, ...) + { + typeof(this).alloc.initWithFormat(format, locale); + }*/ + + NSString initWithFormat (NSString format, Object locale, char* argList) + { + return invokeObjcSelf!(NSString, "initWithFormat:locale:arguments:", NSString, Object, char*)(format, locale, argList); + } + + /*this (NSString format, Object locale, char* argList) + { + typeof(this).alloc.initWithFormat(format, locale, argList); + }*/ + + NSString initWithData (NSData data, uint encoding) + { + return invokeObjcSelf!(NSString, "initWithData:encoding:", NSData, uint)(data, encoding); + } + + /*this (NSData data, uint encoding) + { + typeof(this).alloc.initWithData(data, encoding); + }*/ + + NSString initWithBytes (void* bytes, NSUInteger len, uint encoding) + { + return invokeObjcSelf!(NSString, "initWithBytes:length:encoding:", void*, NSUInteger, uint)(bytes, len, encoding); + } + + /*this (void* bytes, NSUInteger len, uint encoding) + { + typeof(this).alloc.initWithBytes(bytes, len, encoding); + }*/ + + NSString initWithBytesNoCopy (void* bytes, NSUInteger len, NSStringEncoding encoding, bool freeBuffer) + { + return invokeObjcSelf!(NSString, "initWithBytesNoCopy:length:encoding:freeWhenDone:", void*, NSUInteger, NSStringEncoding, bool)(bytes, len, encoding, freeBuffer); + } + + /*this (void* bytes, NSUInteger len, uint encoding, bool freeBuffer) + { + typeof(this).alloc.initWithBytesNoCopy(bytes, len, encoding, freeBuffer); + }*/ + + static NSString string () + { + return invokeObjcSuperClass!(NSString, "string"); + } + + static NSString stringWithString (NSString string) + { + return invokeObjcSuperClass!(NSString, "stringWithString:", NSString)(string); + } + + static NSString stringWithCharacters (unichar* characters, NSUInteger length) + { + return invokeObjcSuperClass!(NSString, "stringWithCharacters:length:", unichar*, NSUInteger)(characters, length); + } + + static NSString stringWithUTF8String (char* nullTerminatedCString) + { + return invokeObjcSuperClass!(NSString, "stringWithUTF8String:", char*)(nullTerminatedCString); + } + + static NSString stringWithFormat (NSString stringWithFormat, ...) + { + return invokeObjcSuperClass!(NSString, "stringWithFormat:", NSString)(stringWithFormat); + } + + static NSString localizedStringWithFormat (NSString localizedStringWithFormat, ...) + { + return invokeObjcSuperClass!(NSString, "localizedStringWithFormat:", NSString)(localizedStringWithFormat); + } + + static NSString stringWithCString (char* cString, uint enc) + { + return invokeObjcSuperClass!(NSString, "stringWithCString:encoding:", char*, uint)(cString, enc); + } + + NSString initWithContentsOfURL (NSURL url, NSStringEncoding enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + NSString result = invokeObjcSelf!(NSString, "initWithContentsOfURL:encoding:error:", NSURL, NSStringEncoding, id*)(url, enc, &err); + + if (err) + error = new NSError(err); + + return result; + } + + /*this (NSURL url, NSStringEncoding enc, ref NSError error) + { + typeof(this).alloc.initWithContentsOfURL(url, enc, error); + }*/ + + NSString initWithContentsOfFile (NSString path, NSStringEncoding enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + NSString result = invokeObjcSelf!(NSString, "initWithContentsOfFile:encoding:error:", NSString, NSStringEncoding, id*)(path, enc, &err); + + if (err) + error = new NSError(err); + + return result; + } + + /*this (NSString path, NSStringEncoding enc, ref NSError error) + { + typeof(this).alloc.initWithContentsOfFile(path, enc, error); + }*/ + + static NSString stringWithContentsOfURL (NSURL url, NSStringEncoding enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + NSString result = invokeObjcSuperClass!(NSString, "stringWithContentsOfURL:encoding:error:", NSURL, NSStringEncoding, id*)(url, enc, &err); + + if (err) + error = new NSError(err); + + return result; + } + + static NSString stringWithContentsOfFile (NSString path, NSStringEncoding enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + NSString result = invokeObjcSuperClass!(NSString, "stringWithContentsOfFile:encoding:error:", NSString, NSStringEncoding, id*)(path, enc, &err); + + if (err) + error = new NSError(err); + + return result; + } + + NSString initWithContentsOfURL (NSURL url, NSStringEncoding* enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + NSString result = invokeObjcSelf!(NSString, "initWithContentsOfURL:usedEncoding:error:", NSURL, NSStringEncoding*, id*)(url, enc, &err); + + if (err) + error = new NSError(err); + + return result; + } + + /*this (NSURL url, NSStringEncoding* enc, ref NSError error) + { + typeof(this).alloc.initWithContentsOfURL(url, enc, error); + }*/ + + NSString initWithContentsOfFile (NSString path, NSStringEncoding* enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + NSString result = invokeObjcSelf!(NSString, "initWithContentsOfFile:usedEncoding:error:", NSString, NSStringEncoding*, id*)(path, enc, &err); + + if (err) + error = new NSError(err); + + return result; + } + + /*this (NSString path, NSStringEncoding* enc, ref NSError error) + { + typeof(this).alloc.initWithContentsOfFile(path, enc, error); + }*/ + + static NSString stringWithContentsOfURL (NSURL url, NSStringEncoding* enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + NSString result = invokeObjcSuperClass!(NSString, "stringWithContentsOfURL:usedEncoding:error:", NSURL, NSStringEncoding*, id*)(url, enc, &err); + + if (err) + error = new NSError(err); + + return result; + } + + static NSString stringWithContentsOfFile (NSString path, NSStringEncoding* enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + NSString result = invokeObjcSuperClass!(NSString, "stringWithContentsOfFile:usedEncoding:error:", NSString, NSStringEncoding*, id*)(path, enc, &err); + + if (err) + error = new NSError(err); + + return result; + } + + bool writeToURL (NSURL url, bool useAuxiliaryFile, uint enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + bool result = invokeObjcSelf!(bool, "writeToURL:atomically:encoding:error:", NSURL, bool, uint, id*)(url, useAuxiliaryFile, enc, &err); + + if (err) + error = new NSError(err); + + return result; + } + + bool writeToFile (NSString path, bool useAuxiliaryFile, uint enc, ref NSError error) + { + id err; + + if (error) + err = new objc_object; + + bool result = invokeObjcSelf!(bool, "writeToFile:atomically:encoding:error:", NSString, bool, uint, id*)(path, useAuxiliaryFile, enc, &err); + + if (err) + error = new NSError(err); + + return result; + } + + // TNSStringPathExtensions + static NSString pathWithComponents (NSArray components) + { + return invokeObjcSuperClass!(NSString, "pathWithComponents:", NSArray)(components); + } + + NSArray pathComponents () + { + return invokeObjcSelf!(NSArray, "pathComponents"); + } + + bool isAbsolutePath () + { + return invokeObjcSelf!(bool, "isAbsolutePath"); + } + + NSString lastPathComponent () + { + return invokeObjcSelf!(NSString, "lastPathComponent"); + } + + NSString stringByDeletingLastPathComponent () + { + return invokeObjcSelf!(NSString, "stringByDeletingLastPathComponent"); + } + + NSString stringByAppendingPathComponent (NSString str) + { + return invokeObjcSelf!(NSString, "stringByAppendingPathComponent:", NSString)(str); + } + + NSString pathExtension () + { + return invokeObjcSelf!(NSString, "pathExtension"); + } + + NSString stringByDeletingPathExtension () + { + return invokeObjcSelf!(NSString, "stringByDeletingPathExtension"); + } + + NSString stringByAppendingPathExtension (NSString str) + { + return invokeObjcSelf!(NSString, "stringByAppendingPathExtension:", NSString)(str); + } + + NSString stringByAbbreviatingWithTildeInPath () + { + return invokeObjcSelf!(NSString, "stringByAbbreviatingWithTildeInPath"); + } + + NSString stringByExpandingTildeInPath () + { + return invokeObjcSelf!(NSString, "stringByExpandingTildeInPath"); + } + + NSString stringByStandardizingPath () + { + return invokeObjcSelf!(NSString, "stringByStandardizingPath"); + } + + NSString stringByResolvingSymlinksInPath () + { + return invokeObjcSelf!(NSString, "stringByResolvingSymlinksInPath"); + } + + NSArray stringsByAppendingPaths (NSArray paths) + { + return invokeObjcSelf!(NSArray, "stringsByAppendingPaths:", NSArray)(paths); + } + + NSUInteger completePathIntoString (NSString** outputName, bool flag, NSArray** outputArray, NSArray filterTypes) + { + return invokeObjcSelf!(NSUInteger, "completePathIntoString:caseSensitive:matchesIntoArray:filterTypes:", NSString**, bool, NSArray**, NSArray)(outputName, flag, outputArray, filterTypes); + } + + char* fileSystemRepresentation () + { + return invokeObjcSelf!(char*, "fileSystemRepresentation"); + } + + bool getFileSystemRepresentation (char* cname, NSUInteger max) + { + return invokeObjcSelf!(bool, "getFileSystemRepresentation:maxLength:", char*, NSUInteger)(cname, max); + } + + // TNSURLUtilities + NSString stringByAddingPercentEscapesUsingEncoding (uint enc) + { + return invokeObjcSelf!(NSString, "stringByAddingPercentEscapesUsingEncoding:", uint)(enc); + } + + NSString stringByReplacingPercentEscapesUsingEncoding (uint enc) + { + return invokeObjcSelf!(NSString, "stringByReplacingPercentEscapesUsingEncoding:", uint)(enc); + } + + // TNSStringDeprecated + char* cString () + { + return invokeObjcSelf!(char*, "cString"); + } + + char* lossyCString () + { + return invokeObjcSelf!(char*, "lossyCString"); + } + + NSUInteger cStringLength () + { + return invokeObjcSelf!(NSUInteger, "cStringLength"); + } + + void getCString (char* bytes) + { + return invokeObjcSelf!(void, "getCString:", char*)(bytes); + } + + void getCString (char* bytes, NSUInteger maxLength) + { + return invokeObjcSelf!(void, "getCString:maxLength:", char*, NSUInteger)(bytes, maxLength); + } + + void getCString (char* bytes, NSUInteger maxLength, NSRange aRange, NSRangePointer leftoverRange) + { + return invokeObjcSelf!(void, "getCString:maxLength:range:remainingRange:", char*, NSUInteger, NSRange, NSRangePointer)(bytes, maxLength, aRange, leftoverRange); + } + + bool writeToFile (NSString path, bool useAuxiliaryFile) + { + return invokeObjcSelf!(bool, "writeToFile:atomically:", NSString, bool)(path, useAuxiliaryFile); + } + + bool writeToURL (NSURL url, bool atomically) + { + return invokeObjcSelf!(bool, "writeToURL:atomically:", NSURL, bool)(url, atomically); + } + + NSString initWithContentsOfFile (NSString path) + { + return invokeObjcSelf!(NSString, "initWithContentsOfFile:", NSString)(path); + } + + NSString initWithContentsOfURL (NSURL url) + { + return invokeObjcSelf!(NSString, "initWithContentsOfURL:", NSURL)(url); + } + + static NSString stringWithContentsOfFile (NSString path) + { + return invokeObjcSuperClass!(NSString, "stringWithContentsOfFile:", NSString)(path); + } + + static NSString stringWithContentsOfURL (NSURL url) + { + return invokeObjcSuperClass!(NSString, "stringWithContentsOfURL:", NSURL)(url); + } + + NSString initWithCStringNoCopy (char* bytes, NSUInteger length, bool freeBuffer) + { + return invokeObjcSelf!(NSString, "initWithCStringNoCopy:length:freeWhenDone:", char*, NSUInteger, bool)(bytes, length, freeBuffer); + } + + /*this (char* bytes, NSUInteger length, bool freeBuffer) + { + typeof(this).alloc.initWithCStringNoCopy(bytes, length, freeBuffer); + }*/ + + NSString initWithCString (char* bytes, NSUInteger length) + { + return invokeObjcSelf!(NSString, "initWithCString:length:", char*, NSUInteger)(bytes, length); + } + + /*this (char* bytes, NSUInteger length) + { + typeof(this).alloc.initWithCString(bytes, length); + }*/ + + NSString initWithCString (char* bytes) + { + return invokeObjcSelf!(NSString, "initWithCString:", char*)(bytes); + } + + /*this (char* bytes) + { + typeof(this).alloc.initWithCString(bytes); + }*/ + + static NSString stringWithCString_length (char* bytes, NSUInteger length) + { + return invokeObjcSuperClass!(NSString, "stringWithCString:length:", char*, NSUInteger)(bytes, length); + } + + static NSString stringWithCString (char* bytes) + { + return invokeObjcSuperClass!(NSString, "stringWithCString:", char*)(bytes); + } + + // D extensions + static NSString opCall (.string str) + { + return stringWithUTF8String((str ~ '\0').ptr); + } + + equals_t opEquals (Object object) + { + if (auto str = cast(NSString) object) + return isEqual(object); + + return false; + } + + final equals_t opEquals (.string str) + { + return str == cStringUsingEncoding(NSUTF8StringEncoding)[0 .. lengthOfBytesUsingEncoding(NSUTF8StringEncoding)]; + } + + NSString opCatAssign (NSString str) + { + objcObject = stringByAppendingString(str).objcObject; + return this; + } + + NSString opCatAssign (.string str) + { + objcObject = stringByAppendingString(NSString(str)).objcObject; + return this; + } + + NSString opCat (NSString str) + { + return stringByAppendingString(str); + } + + NSString opCat (.string str) + { + return stringByAppendingString(NSString(str)); + } + + .string toString () + { + return cStringUsingEncoding(NSUTF8StringEncoding)[0 .. lengthOfBytesUsingEncoding(NSUTF8StringEncoding)]; + } + + wchar opIndex (size_t index) + { + return characterAtIndex(index); + } +} \ No newline at end of file