view dwt/internal/cocoa/NSString.d @ 13:f565d3a95c0a

Ported dwt.internal
author Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
date Fri, 22 Aug 2008 16:46:34 +0200
parents 8b48be5454ce
children 642f460a0908
line wrap: on
line source

/*******************************************************************************
 * Copyright (c) 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     
 * Port to the D programming language:
 *     Jacob Carlborg <jacob.carlborg@gmail.com>
 *******************************************************************************/
module dwt.internal.cocoa.NSString;

import tango.core.Vararg : va_list;
import tango.stdc.stringz : toString16z;
import tango.text.convert.Utf : toString16;

import dwt.dwthelper.utils;
import dwt.internal.cocoa.id;
import dwt.internal.cocoa.NSArray;
import dwt.internal.cocoa.NSCharacterSet;
import dwt.internal.cocoa.NSComparisonResult;
import dwt.internal.cocoa.NSData;
import dwt.internal.cocoa.NSDictionary;
import dwt.internal.cocoa.NSInteger;
import dwt.internal.cocoa.NSLocale;
import dwt.internal.cocoa.NSObject;
import dwt.internal.cocoa.NSRange;
import dwt.internal.cocoa.NSURL;
import dwt.internal.cocoa.OS;
import objc = dwt.internal.objc.runtime;

enum NSStringEncoding : NSUInteger
{
    NSASCIIStringEncoding = 1,
    NSNEXTSTEPStringEncoding = 2,
    NSJapaneseEUCStringEncoding = 3,
    NSUTF8StringEncoding = 4,
    NSISOLatin1StringEncoding = 5,
    NSSymbolStringEncoding = 6,
    NSNonLossyASCIIStringEncoding = 7,
    NSShiftJISStringEncoding = 8,
    NSISOLatin2StringEncoding = 9,
    NSUnicodeStringEncoding = 10,
    NSWindowsCP1251StringEncoding = 11,
    NSWindowsCP1252StringEncoding = 12,
    NSWindowsCP1253StringEncoding = 13,
    NSWindowsCP1254StringEncoding = 14,
    NSWindowsCP1250StringEncoding = 15,
    NSISO2022JPStringEncoding = 21,
    NSMacOSRomanStringEncoding = 30,
    NSUTF16BigEndianStringEncoding = 0x90000100,
    NSUTF16LittleEndianStringEncoding = 0x94000100,
    NSUTF32StringEncoding = 0x8c000100,
    NSUTF32BigEndianStringEncoding = 0x98000100,
    NSUTF32LittleEndianStringEncoding = 0x9c000100,
    NSProprietaryStringEncoding = 65536
}

alias NSStringEncoding.NSASCIIStringEncoding NSASCIIStringEncoding;
alias NSStringEncoding.NSNEXTSTEPStringEncoding NSNEXTSTEPStringEncoding;
alias NSStringEncoding.NSJapaneseEUCStringEncoding NSJapaneseEUCStringEncoding;
alias NSStringEncoding.NSUTF8StringEncoding NSUTF8StringEncoding;
alias NSStringEncoding.NSISOLatin1StringEncoding NSISOLatin1StringEncoding;
alias NSStringEncoding.NSSymbolStringEncoding NSSymbolStringEncoding;
alias NSStringEncoding.NSNonLossyASCIIStringEncoding NSNonLossyASCIIStringEncoding;
alias NSStringEncoding.NSShiftJISStringEncoding NSShiftJISStringEncoding;
alias NSStringEncoding.NSISOLatin2StringEncoding NSISOLatin2StringEncoding;
alias NSStringEncoding.NSUnicodeStringEncoding NSUnicodeStringEncoding;
alias NSStringEncoding.NSWindowsCP1251StringEncoding NSWindowsCP1251StringEncoding;
alias NSStringEncoding.NSWindowsCP1252StringEncoding NSWindowsCP1252StringEncoding;
alias NSStringEncoding.NSWindowsCP1253StringEncoding NSWindowsCP1253StringEncoding;
alias NSStringEncoding.NSWindowsCP1254StringEncoding NSWindowsCP1254StringEncoding;
alias NSStringEncoding.NSWindowsCP1250StringEncoding NSWindowsCP1250StringEncoding;
alias NSStringEncoding.NSISO2022JPStringEncoding NSISO2022JPStringEncoding;
alias NSStringEncoding.NSMacOSRomanStringEncoding NSMacOSRomanStringEncoding;
alias NSStringEncoding.NSUTF16BigEndianStringEncoding NSUTF16BigEndianStringEncoding;
alias NSStringEncoding.NSUTF16LittleEndianStringEncoding NSUTF16LittleEndianStringEncoding;
alias NSStringEncoding.NSUTF32StringEncoding NSUTF32StringEncoding;
alias NSStringEncoding.NSUTF32BigEndianStringEncoding NSUTF32BigEndianStringEncoding;
alias NSStringEncoding.NSUTF32LittleEndianStringEncoding NSUTF32LittleEndianStringEncoding;
alias NSStringEncoding.NSProprietaryStringEncoding NSProprietaryStringEncoding;

enum NSStringCompareOptions : NSUInteger
{
    NSCaseInsensitiveSearch = 1,
    NSLiteralSearch = 2,
    NSBackwardsSearch = 4,
    NSAnchoredSearch = 8,
    NSNumericSearch = 64,
    NSDiacriticInsensitiveSearch = 128,
    NSWidthInsensitiveSearch = 256,
    NSForcedOrderingSearch = 512
}

alias NSStringCompareOptions.NSCaseInsensitiveSearch NSCaseInsensitiveSearch;
alias NSStringCompareOptions.NSLiteralSearch NSLiteralSearch;
alias NSStringCompareOptions.NSBackwardsSearch NSBackwardsSearch;
alias NSStringCompareOptions.NSAnchoredSearch NSAnchoredSearch;
alias NSStringCompareOptions.NSNumericSearch NSNumericSearch;
alias NSStringCompareOptions.NSDiacriticInsensitiveSearch NSDiacriticInsensitiveSearch;
alias NSStringCompareOptions.NSWidthInsensitiveSearch NSWidthInsensitiveSearch;
alias NSStringCompareOptions.NSForcedOrderingSearch NSForcedOrderingSearch;

enum NSStringEncodingConversionOptions : NSUInteger
{
    NSStringEncodingConversionAllowLossy = 1,
    NSStringEncodingConversionExternalRepresentation = 2
}

alias NSStringEncodingConversionOptions.NSStringEncodingConversionAllowLossy NSStringEncodingConversionAllowLossy;
alias NSStringEncodingConversionOptions.NSStringEncodingConversionExternalRepresentation NSStringEncodingConversionExternalRepresentation;

public class NSString : NSObject
{

    public this ()
    {
        super();
    }

    public this (objc.id id)
    {
        super(id);
    }

    public /*const*/char* UTF8String ()
    {
        return cast(/*const*/char*) OS.objc_msgSend(this.id_, OS.sel_UTF8String);
    }

    public static NSStringEncoding availableStringEncodings ()
    {
        return cast(NSStringEncoding) OS.objc_msgSend(OS.class_NSString, OS.sel_availableStringEncodings);
    }

    public bool boolValue ()
    {
        return OS.objc_msgSend(this.id_, OS.sel_boolValue) !is null;
    }

    public /*const*/char* cString ()
    {
        return cast(/*const*/char*) OS.objc_msgSend(this.id_, OS.sel_cString);
    }

    public NSUInteger cStringLength ()
    {
        return cast(NSUInteger) OS.objc_msgSend(this.id_, OS.sel_cStringLength);
    }

    public /*const*/char* cStringUsingEncoding (NSStringEncoding encoding)
    {
        return cast(/*const*/char*) OS.objc_msgSend(this.id_, OS.sel_cStringUsingEncoding_1, encoding);
    }

    public bool canBeConvertedToEncoding (NSStringEncoding encoding)
    {
        return OS.objc_msgSend(this.id_, OS.sel_canBeConvertedToEncoding_1, encoding) !is null;
    }

    public NSString capitalizedString ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_capitalizedString);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSComparisonResult caseInsensitiveCompare (NSString string)
    {
        return cast(NSComparisonResult) OS.objc_msgSend(this.id_, OS.sel_caseInsensitiveCompare_1, string !is null ? string.id_ : null);
    }

    public wchar characterAtIndex (NSUInteger index)
    {
        return cast(wchar) OS.objc_msgSend(this.id_, OS.sel_characterAtIndex_1, index);
    }

    public NSString commonPrefixWithString (NSString aString, NSStringCompareOptions mask)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_commonPrefixWithString_1options_1, aString !is null ? aString.id_ : null, mask);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSComparisonResult compare_ (NSString string)
    {
        return cast(NSComparisonResult) OS.objc_msgSend(this.id_, OS.sel_compare_1, string !is null ? string.id_ : null);
    }

    public NSComparisonResult compare_options_ (NSString string, NSStringCompareOptions mask)
    {
        return cast(NSComparisonResult) OS.objc_msgSend(this.id_, OS.sel_compare_1options_1, string !is null ? string.id_ : null, mask);
    }

    public NSComparisonResult compare_options_range_ (NSString string, NSStringCompareOptions mask, NSRange compareRange)
    {
        return cast(NSComparisonResult) OS.objc_msgSend(this.id_, OS.sel_compare_1options_1range_1, string !is null ? string.id_ : null, mask,
                compareRange);
    }

    public NSComparisonResult compare_options_range_locale_ (NSString string, NSStringCompareOptions mask, NSRange compareRange, id locale)
    {
        return cast(NSComparisonResult) OS.objc_msgSend(this.id_, OS.sel_compare_1options_1range_1locale_1, string !is null ? string.id_ : null, mask,
                compareRange, locale !is null ? locale.id_ : null);
    }

    public NSUInteger completePathIntoString (/*NSString** */objc.id** outputName, bool flag, /*NSArray** */objc.id** outputArray,
            NSArray filterTypes)
    {
        return cast(NSUInteger) OS.objc_msgSend(this.id_, OS.sel_completePathIntoString_1caseSensitive_1matchesIntoArray_1filterTypes_1, outputName, flag, outputArray,
                filterTypes !is null ? filterTypes.id_ : null);
    }

    public NSArray componentsSeparatedByCharactersInSet (NSCharacterSet separator)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_componentsSeparatedByCharactersInSet_1, separator !is null ? separator.id_ : null);
        return result !is null ? new NSArray(result) : null;
    }

    public NSArray componentsSeparatedByString (NSString separator)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_componentsSeparatedByString_1, separator !is null ? separator.id_ : null);
        return result !is null ? new NSArray(result) : null;
    }

    public NSData dataUsingEncoding_ (NSStringEncoding encoding)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_dataUsingEncoding_1, encoding);
        return result !is null ? new NSData(result) : null;
    }

    public NSData dataUsingEncoding_allowLossyConversion_ (NSStringEncoding encoding, bool lossy)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_dataUsingEncoding_1allowLossyConversion_1, encoding, lossy);
        return result !is null ? new NSData(result) : null;
    }

    public NSString decomposedStringWithCanonicalMapping ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_decomposedStringWithCanonicalMapping);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString decomposedStringWithCompatibilityMapping ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_decomposedStringWithCompatibilityMapping);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public static NSStringEncoding defaultCStringEncoding ()
    {
        return cast(NSStringEncoding) OS.objc_msgSend(OS.class_NSString, OS.sel_defaultCStringEncoding);
    }

    public NSString description ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_description);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public double doubleValue ()
    {
        return OS.objc_msgSend_fpret(this.id_, OS.sel_doubleValue);
    }

    public NSStringEncoding fastestEncoding ()
    {
        return cast(NSStringEncoding) OS.objc_msgSend(this.id_, OS.sel_fastestEncoding);
    }

    public /*const*/char* fileSystemRepresentation ()
    {
        return cast(/*const*/char*) OS.objc_msgSend(this.id_, OS.sel_fileSystemRepresentation);
    }

    public float floatValue ()
    {
        return cast(float) OS.objc_msgSend_fpret(this.id_, OS.sel_floatValue);
    }

    public bool getBytes (void* buffer, NSUInteger maxBufferCount, NSUInteger* usedBufferCount, NSStringEncoding encoding, NSStringEncodingConversionOptions options,
            NSRange range, NSRangePointer leftover)
    {
        return OS.objc_msgSend(this.id_, OS.sel_getBytes_1maxLength_1usedLength_1encoding_1options_1range_1remainingRange_1, buffer, maxBufferCount,
                usedBufferCount, encoding, options, range, leftover) !is null;
    }

    public void getCString_ (/*char* */byte* bytes)
    {
        OS.objc_msgSend(this.id_, OS.sel_getCString_1, bytes);
    }

    public void getCString_maxLength_ (/*char* */byte* bytes, NSUInteger maxLength)
    {
        OS.objc_msgSend(this.id_, OS.sel_getCString_1maxLength_1, bytes, maxLength);
    }

    public bool getCString_maxLength_encoding_ (/*char* */byte* buffer, NSUInteger maxBufferCount, NSStringEncoding encoding)
    {
        return OS.objc_msgSend(this.id_, OS.sel_getCString_1maxLength_1encoding_1, buffer, maxBufferCount, encoding) !is null;
    }

    public void getCString_maxLength_range_remainingRange_ (/*char* */byte* bytes, NSUInteger maxLength, NSRange aRange, NSRangePointer leftoverRange)
    {
        OS.objc_msgSend(this.id_, OS.sel_getCString_1maxLength_1range_1remainingRange_1, bytes, maxLength, aRange, leftoverRange);
    }

    public void getCharacters_ (wchar* buffer)
    {
        OS.objc_msgSend(this.id_, OS.sel_getCharacters_1, buffer);
    }

    public void getCharacters_range_ (wchar* buffer, NSRange aRange)
    {
        OS.objc_msgSend(this.id_, OS.sel_getCharacters_1range_1, buffer, aRange);
    }

    public bool getFileSystemRepresentation (/*char* */byte* cname, NSUInteger max)
    {
        return OS.objc_msgSend(this.id_, OS.sel_getFileSystemRepresentation_1maxLength_1, cname, max) !is null;
    }

    public void getLineStart (NSUInteger* startPtr, NSUInteger* lineEndPtr, NSUInteger* contentsEndPtr, NSRange range)
    {
        OS.objc_msgSend(this.id_, OS.sel_getLineStart_1end_1contentsEnd_1forRange_1, startPtr, lineEndPtr, contentsEndPtr, range);
    }

    public void getParagraphStart (NSUInteger* startPtr, NSUInteger* parEndPtr, NSUInteger* contentsEndPtr, NSRange range)
    {
        OS.objc_msgSend(this.id_, OS.sel_getParagraphStart_1end_1contentsEnd_1forRange_1, startPtr, parEndPtr, contentsEndPtr, range);
    }

    public bool hasPrefix (NSString aString)
    {
        return OS.objc_msgSend(this.id_, OS.sel_hasPrefix_1, aString !is null ? aString.id_ : null) !is null;
    }

    public bool hasSuffix (NSString aString)
    {
        return OS.objc_msgSend(this.id_, OS.sel_hasSuffix_1, aString !is null ? aString.id_ : null) !is null;
    }

    public NSUInteger hash ()
    {
        return cast(NSUInteger) OS.objc_msgSend(this.id_, OS.sel_hash);
    }

    public NSString initWithBytes (/*const*/void* bytes, NSUInteger len, NSStringEncoding encoding)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithBytes_1length_1encoding_1, bytes, len, encoding);
        return result !is null ? this : null;
    }

    public NSString initWithBytesNoCopy (/*const*/void* bytes, NSUInteger len, NSStringEncoding encoding, bool freeBuffer)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithBytesNoCopy_1length_1encoding_1freeWhenDone_1, bytes, len, encoding, freeBuffer);
        return result !is null ? this : null;
    }

    public NSString initWithCString_ (/*const*/char* bytes)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithCString_1, bytes);
        return result !is null ? this : null;
    }

    public NSString initWithCString_encoding_ (/*const*/char* nullTerminatedCString, NSStringEncoding encoding)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithCString_1encoding_1, nullTerminatedCString, encoding);
        return result !is null ? this : null;
    }

    public NSString initWithCString_length_ (/*const*/char* bytes, NSUInteger length)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithCString_1length_1, bytes, length);
        return result !is null ? this : null;
    }

    public NSString initWithCStringNoCopy (/*const*/char* bytes, NSUInteger length, bool freeBuffer)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithCStringNoCopy_1length_1freeWhenDone_1, bytes, length, freeBuffer);
        return result !is null ? this : null;
    }

    public NSString initWithCharacters (/*const*/wchar* characters, NSUInteger length)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithCharacters_1length_1, characters, length);
        return result !is null ? this : null;
    }

    public NSString initWithCharactersNoCopy (/*const*/wchar* characters, NSUInteger length, bool freeBuffer)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithCharactersNoCopy_1length_1freeWhenDone_1, characters, length, freeBuffer);
        return result !is null ? this : null;
    }

    public NSString initWithContentsOfFile_ (NSString path)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithContentsOfFile_1, path !is null ? path.id_ : null);
        return result !is null ? this : null;
    }

    public NSString initWithContentsOfFile_encoding_error_ (NSString path, NSStringEncoding enc, /*NSError** */objc.id** error)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithContentsOfFile_1encoding_1error_1, path !is null ? path.id_ : null, enc, error);
        return result !is null ? this : null;
    }

    public NSString initWithContentsOfFile_usedEncoding_error_ (NSString path, NSStringEncoding enc, /*NSError** */objc.id** error)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithContentsOfFile_1usedEncoding_1error_1, path !is null ? path.id_ : null, enc, error);
        return result !is null ? this : null;
    }

    public NSString initWithContentsOfURL_ (NSURL url)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithContentsOfURL_1, url !is null ? url.id_ : null);
        return result !is null ? this : null;
    }

    public NSString initWithContentsOfURL_encoding_error_ (NSURL url, NSStringEncoding enc, /*NSError** */objc.id** error)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithContentsOfURL_1encoding_1error_1, url !is null ? url.id_ : null, enc, error);
        return result !is null ? this : null;
    }

    public NSString initWithContentsOfURL_usedEncoding_error_ (NSURL url, NSStringEncoding enc, /*NSError** */objc.id** error)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithContentsOfURL_1usedEncoding_1error_1, url !is null ? url.id_ : null, enc, error);
        return result !is null ? this : null;
    }

    public NSString initWithData (NSData data, NSStringEncoding encoding)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithData_1encoding_1, data !is null ? data.id_ : null, encoding);
        return result !is null ? this : null;
    }

    public NSString initWithFormat_ (NSString initWithFormat)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithFormat_1, initWithFormat !is null ? initWithFormat.id_ : null);
        return result !is null ? this : null;
    }

    public NSString initWithFormat_arguments_ (NSString format, va_list argList)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithFormat_1arguments_1, format !is null ? format.id_ : null, argList);
        return result !is null ? this : null;
    }

    public NSString initWithFormat_locale_ (NSString format, id locale)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithFormat_1locale_1, format !is null ? format.id_ : null,
                locale !is null ? locale.id_ : null);
        return result !is null ? this : null;
    }

    public NSString initWithFormat_locale_arguments_ (NSString format, id locale, va_list argList)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithFormat_1locale_1arguments_1, format !is null ? format.id_ : null,
                locale !is null ? locale.id_ : null, argList);
        return result !is null ? this : null;
    }

    public NSString initWithString (NSString aString)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithString_1, aString !is null ? aString.id_ : null);
        return result !is null ? this : null;
    }

    public NSString initWithUTF8String (/*const*/char* nullTerminatedCString)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_initWithUTF8String_1, nullTerminatedCString);
        return result !is null ? this : null;
    }

    public int intValue ()
    {
        return cast(int) OS.objc_msgSend(this.id_, OS.sel_intValue);
    }

    public NSInteger integerValue ()
    {
        return cast(NSInteger) OS.objc_msgSend(this.id_, OS.sel_integerValue);
    }

    public bool isAbsolutePath ()
    {
        return OS.objc_msgSend(this.id_, OS.sel_isAbsolutePath) !is null;
    }

    public bool isEqualToString (NSString aString)
    {
        return OS.objc_msgSend(this.id_, OS.sel_isEqualToString_1, aString !is null ? aString.id_ : null) !is null;
    }

    public NSString lastPathComponent ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_lastPathComponent);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSUInteger length ()
    {
        return cast(NSUInteger) OS.objc_msgSend(this.id_, OS.sel_length);
    }

    public NSUInteger lengthOfBytesUsingEncoding (NSStringEncoding enc)
    {
        return cast(NSUInteger) OS.objc_msgSend(this.id_, OS.sel_lengthOfBytesUsingEncoding_1, enc);
    }

    public NSRange lineRangeForRange (NSRange range)
    {
        NSRange result;
        OS.objc_msgSend_struct(&result, this.id_, OS.sel_lineRangeForRange_1, &range);
        return result;
    }

    public NSComparisonResult localizedCaseInsensitiveCompare (NSString string)
    {
        return cast(NSComparisonResult) OS.objc_msgSend(this.id_, OS.sel_localizedCaseInsensitiveCompare_1, string !is null ? string.id_ : null);
    }

    public NSComparisonResult localizedCompare (NSString string)
    {
        return cast(NSComparisonResult) OS.objc_msgSend(this.id_, OS.sel_localizedCompare_1, string !is null ? string.id_ : null);
    }

    public static NSString localizedNameOfStringEncoding (NSStringEncoding encoding)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_localizedNameOfStringEncoding_1, encoding);
        return result !is null ? new NSString(result) : null;
    }

    public static id localizedStringWithFormat (NSString localizedStringWithFormat)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_localizedStringWithFormat_1,
                localizedStringWithFormat !is null ? localizedStringWithFormat.id_ : null);
        return result !is null ? new id(result) : null;
    }

    public long longLongValue ()
    {
        return cast(long) OS.objc_msgSend(this.id_, OS.sel_longLongValue);
    }

    public /*const*/char* lossyCString ()
    {
        return cast(/*const*/char*) OS.objc_msgSend(this.id_, OS.sel_lossyCString);
    }

    public NSString lowercaseString ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_lowercaseString);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSUInteger maximumLengthOfBytesUsingEncoding (NSStringEncoding enc)
    {
        return cast(NSUInteger) OS.objc_msgSend(this.id_, OS.sel_maximumLengthOfBytesUsingEncoding_1, enc);
    }

    public NSRange paragraphRangeForRange (NSRange range)
    {
        NSRange result;
        OS.objc_msgSend_stret(&result, this.id_, OS.sel_paragraphRangeForRange_1, range);
        return result;
    }

    public NSArray pathComponents ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_pathComponents);
        return result !is null ? new NSArray(result) : null;
    }

    public NSString pathExtension ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_pathExtension);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public static NSString pathWithComponents (NSArray components)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_pathWithComponents_1, components !is null ? components.id_ : null);
        return result !is null ? new NSString(result) : null;
    }

    public NSString precomposedStringWithCanonicalMapping ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_precomposedStringWithCanonicalMapping);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString precomposedStringWithCompatibilityMapping ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_precomposedStringWithCompatibilityMapping);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public id propertyList ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_propertyList);
        return result !is null ? new id(result) : null;
    }

    public NSDictionary propertyListFromStringsFileFormat ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_propertyListFromStringsFileFormat);
        return result !is null ? new NSDictionary(result) : null;
    }

    public NSRange rangeOfCharacterFromSet_ (NSCharacterSet aSet)
    {
        NSRange result;
        OS.objc_msgSend_stret(&result, this.id_, OS.sel_rangeOfCharacterFromSet_1, aSet !is null ? aSet.id_ : null);
        return result;
    }

    public NSRange rangeOfCharacterFromSet_options_ (NSCharacterSet aSet, NSStringCompareOptions mask)
    {
        NSRange result;
        OS.objc_msgSend_stret(&result, this.id_, OS.sel_rangeOfCharacterFromSet_1options_1, aSet !is null ? aSet.id_ : null, mask);
        return result;
    }

    public NSRange rangeOfCharacterFromSet_options_range_ (NSCharacterSet aSet, NSStringCompareOptions mask, NSRange searchRange)
    {
        NSRange result;
        OS.objc_msgSend_stret(&result, this.id_, OS.sel_rangeOfCharacterFromSet_1options_1range_1, aSet !is null ? aSet.id_ : null, mask, searchRange);
        return result;
    }

    public NSRange rangeOfComposedCharacterSequenceAtIndex (NSUInteger index)
    {
        NSRange result;
        OS.objc_msgSend_stret(&result, this.id_, OS.sel_rangeOfComposedCharacterSequenceAtIndex_1, index);
        return result;
    }

    public NSRange rangeOfComposedCharacterSequencesForRange (NSRange range)
    {
        NSRange result;
        OS.objc_msgSend_stret(&result, this.id_, OS.sel_rangeOfComposedCharacterSequencesForRange_1, range);
        return result;
    }

    public NSRange rangeOfString_ (NSString aString)
    {
        NSRange result;
        OS.objc_msgSend_stret(&result, this.id_, OS.sel_rangeOfString_1, aString !is null ? aString.id_ : null);
        return result;
    }

    public NSRange rangeOfString_options_ (NSString aString, NSStringCompareOptions mask)
    {
        NSRange result;
        OS.objc_msgSend_stret(&result, this.id_, OS.sel_rangeOfString_1options_1, aString !is null ? aString.id_ : null, mask);
        return result;
    }

    public NSRange rangeOfString_options_range_ (NSString aString, NSStringCompareOptions mask, NSRange searchRange)
    {
        NSRange result;
        OS.objc_msgSend_stret(&result, this.id_, OS.sel_rangeOfString_1options_1range_1, aString !is null ? aString.id_ : null, mask, searchRange);
        return result;
    }

    public NSRange rangeOfString_options_range_locale_ (NSString aString, NSStringCompareOptions mask, NSRange searchRange, NSLocale locale)
    {
        NSRange result;
        OS.objc_msgSend_stret(&result, this.id_, OS.sel_rangeOfString_1options_1range_1locale_1, aString !is null ? aString.id_ : null, mask,
                searchRange, locale !is null ? locale.id_ : null);
        return result;
    }

    public NSStringEncoding smallestEncoding ()
    {
        return cast(NSStringEncoding) OS.objc_msgSend(this.id_, OS.sel_smallestEncoding);
    }

    public static NSString string ()
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_string);
        return result !is null ? new NSString(result) : null;
    }

    public NSString stringByAbbreviatingWithTildeInPath ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByAbbreviatingWithTildeInPath);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByAddingPercentEscapesUsingEncoding (NSStringEncoding enc)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByAddingPercentEscapesUsingEncoding_1, enc);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByAppendingFormat (NSString stringByAppendingFormat)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByAppendingFormat_1,
                stringByAppendingFormat !is null ? stringByAppendingFormat.id_ : null);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByAppendingPathComponent (NSString str)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByAppendingPathComponent_1, str !is null ? str.id_ : null);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByAppendingPathExtension (NSString str)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByAppendingPathExtension_1, str !is null ? str.id_ : null);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByAppendingString (NSString aString)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByAppendingString_1, aString !is null ? aString.id_ : null);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByDeletingLastPathComponent ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByDeletingLastPathComponent);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByDeletingPathExtension ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByDeletingPathExtension);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByExpandingTildeInPath ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByExpandingTildeInPath);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByFoldingWithOptions (NSStringCompareOptions options, NSLocale locale)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByFoldingWithOptions_1locale_1, options, locale !is null ? locale.id_ : null);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByPaddingToLength (NSUInteger newLength, NSString padString, NSUInteger padIndex)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByPaddingToLength_1withString_1startingAtIndex_1, newLength,
                padString !is null ? padString.id_ : null, padIndex);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByReplacingCharactersInRange (NSRange range, NSString replacement)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByReplacingCharactersInRange_1withString_1, range,
                replacement !is null ? replacement.id_ : null);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByReplacingOccurrencesOfString_withString_ (NSString target, NSString replacement)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByReplacingOccurrencesOfString_1withString_1, target !is null ? target.id_ : null,
                replacement !is null ? replacement.id_ : null);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByReplacingOccurrencesOfString_withString_options_range_ (NSString target, NSString replacement, NSStringCompareOptions options,
            NSRange searchRange)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByReplacingOccurrencesOfString_1withString_1options_1range_1,
                target !is null ? target.id_ : null, replacement !is null ? replacement.id_ : null, options, searchRange);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByReplacingPercentEscapesUsingEncoding (NSStringEncoding enc)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByReplacingPercentEscapesUsingEncoding_1, enc);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByResolvingSymlinksInPath ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByResolvingSymlinksInPath);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByStandardizingPath ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByStandardizingPath);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString stringByTrimmingCharactersInSet (NSCharacterSet set)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringByTrimmingCharactersInSet_1, set !is null ? set.id_ : null);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public static id static_stringWithCString_ (/*const*/char* bytes)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithCString_1, bytes);
        return result !is null ? new NSString(result) : null;
    }

    public static id static_stringWithCString_encoding_ (/*const*/char* cString, NSStringEncoding enc)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithCString_1encoding_1, cString, enc);
        return result !is null ? new NSString(result) : null;
    }

    public static NSString static_stringWithCString_length_ (/*const*/char* bytes, NSUInteger length)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithCString_1length_1, bytes, length);
        return result !is null ? new NSString(result) : null;
    }

    public static NSString stringWithCharacters (/*const*/wchar* characters, NSUInteger length)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithCharacters_1length_1, characters, length);
        return result !is null ? new NSString(result) : null;
    }

    public static NSString stringWith (String str)
    {
        char[] chars = new char[str.length];
        str.getChars(0, chars.length, chars, 0);
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithCharacters_1length_1, toString16z(chars.toString16()), chars.length);
        return result !is null ? new NSString(result) : null;
    }

    public static id static_stringWithContentsOfFile_ (NSString path)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithContentsOfFile_1, path !is null ? path.id_ : null);
        return result !is null ? new id(result) : null;
    }

    public static id static_stringWithContentsOfFile_encoding_error_ (NSString path, NSStringEncoding enc, /*NSError** */objc.id** error)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithContentsOfFile_1encoding_1error_1, path !is null ? path.id_ : null, enc,
                error);
        return result !is null ? new id(result) : null;
    }

    public static id static_stringWithContentsOfFile_usedEncoding_error_ (NSString path, NSStringEncoding enc, /*NSError** */objc.id** error)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithContentsOfFile_1usedEncoding_1error_1, path !is null ? path.id_ : null,
                enc, error);
        return result !is null ? new id(result) : null;
    }

    public static id static_stringWithContentsOfURL_ (NSURL url)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithContentsOfURL_1, url !is null ? url.id_ : null);
        return result !is null ? new id(result) : null;
    }

    public static id static_stringWithContentsOfURL_encoding_error_ (NSURL url, NSStringEncoding enc, /*NSError** */objc.id** error)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithContentsOfURL_1encoding_1error_1, url !is null ? url.id_ : null, enc,
                error);
        return result !is null ? new id(result) : null;
    }

    public static id static_stringWithContentsOfURL_usedEncoding_error_ (NSURL url, NSStringEncoding enc, /*NSError** */objc.id** error)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithContentsOfURL_1usedEncoding_1error_1, url !is null ? url.id_ : null, enc,
                error);
        return result !is null ? new id(result) : null;
    }

    public static id stringWithFormat (NSString stringWithFormat)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithFormat_1, stringWithFormat !is null ? stringWithFormat.id_ : null);
        return result !is null ? new id(result) : null;
    }

    public static id stringWithString (NSString string)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithString_1, string !is null ? string.id_ : null);
        return result !is null ? new id(result) : null;
    }

    public static id stringWithUTF8String (/*const*/char* nullTerminatedCString)
    {
        objc.id result = OS.objc_msgSend(OS.class_NSString, OS.sel_stringWithUTF8String_1, nullTerminatedCString);
        return result !is null ? new id(result) : null;
    }

    public NSArray stringsByAppendingPaths (NSArray paths)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_stringsByAppendingPaths_1, paths !is null ? paths.id_ : null);
        return result !is null ? new NSArray(result) : null;
    }

    public NSString substringFromIndex (NSUInteger from)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_substringFromIndex_1, from);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString substringToIndex (NSUInteger to)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_substringToIndex_1, to);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString substringWithRange (NSRange range)
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_substringWithRange_1, range);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public NSString uppercaseString ()
    {
        objc.id result = OS.objc_msgSend(this.id_, OS.sel_uppercaseString);
        return result is this.id_ ? this : (result !is null ? new NSString(result) : null);
    }

    public bool writeToFile_atomically_ (NSString path, bool useAuxiliaryFile)
    {
        return OS.objc_msgSend(this.id_, OS.sel_writeToFile_1atomically_1, path !is null ? path.id_ : null, useAuxiliaryFile) !is null;
    }

    public bool writeToFile_atomically_encoding_error_ (NSString path, bool useAuxiliaryFile, NSStringEncoding enc, /*NSError** */objc.id** error)
    {
        return OS.objc_msgSend(this.id_, OS.sel_writeToFile_1atomically_1encoding_1error_1, path !is null ? path.id_ : null, useAuxiliaryFile, enc,
                error) !is null;
    }

    public bool writeToURL_atomically_ (NSURL url, bool atomically)
    {
        return OS.objc_msgSend(this.id_, OS.sel_writeToURL_1atomically_1, url !is null ? url.id_ : null, atomically) !is null;
    }

    public bool writeToURL_atomically_encoding_error_ (NSURL url, bool useAuxiliaryFile, NSStringEncoding enc, /*NSError** */objc.id** error)
    {
        return OS.objc_msgSend(this.id_, OS.sel_writeToURL_1atomically_1encoding_1error_1, url !is null ? url.id_ : null, useAuxiliaryFile, enc, error) !is null;
    }

}