aboutsummaryrefslogtreecommitdiff
path: root/core/sys/darwin/Foundation/NSString.odin
diff options
context:
space:
mode:
Diffstat (limited to 'core/sys/darwin/Foundation/NSString.odin')
-rw-r--r--core/sys/darwin/Foundation/NSString.odin140
1 files changed, 140 insertions, 0 deletions
diff --git a/core/sys/darwin/Foundation/NSString.odin b/core/sys/darwin/Foundation/NSString.odin
new file mode 100644
index 000000000..d3c6c454d
--- /dev/null
+++ b/core/sys/darwin/Foundation/NSString.odin
@@ -0,0 +1,140 @@
+package objc_Foundation
+
+foreign import "system:Foundation.framework"
+
+@(objc_class="NSString")
+String :: struct {using _: Copying(String)}
+
+StringEncoding :: enum UInteger {
+ ASCII = 1,
+ NEXTSTEP = 2,
+ JapaneseEUC = 3,
+ UTF8 = 4,
+ ISOLatin1 = 5,
+ Symbol = 6,
+ NonLossyASCII = 7,
+ ShiftJIS = 8,
+ ISOLatin2 = 9,
+ Unicode = 10,
+ WindowsCP1251 = 11,
+ WindowsCP1252 = 12,
+ WindowsCP1253 = 13,
+ WindowsCP1254 = 14,
+ WindowsCP1250 = 15,
+ ISO2022JP = 21,
+ MacOSRoman = 30,
+
+ UTF16 = Unicode,
+
+ UTF16BigEndian = 0x90000100,
+ UTF16LittleEndian = 0x94000100,
+
+ UTF32 = 0x8c000100,
+ UTF32BigEndian = 0x98000100,
+ UTF32LittleEndian = 0x9c000100,
+}
+
+StringCompareOptions :: distinct bit_set[StringCompareOption; UInteger]
+StringCompareOption :: enum UInteger {
+ CaseInsensitive = 0,
+ LiteralSearch = 1,
+ BackwardsSearch = 2,
+ AnchoredSearch = 3,
+ NumericSearch = 6,
+ DiacriticInsensitive = 7,
+ WidthInsensitive = 8,
+ ForcedOrdering = 9,
+ RegularExpression = 10,
+}
+
+unichar :: distinct u16
+
+@(link_prefix="NS", default_calling_convention="c")
+foreign Foundation {
+ StringFromClass :: proc(cls: Class) -> ^String ---
+}
+
+AT :: MakeConstantString
+MakeConstantString :: proc "c" (#const c: cstring) -> ^String {
+ foreign Foundation {
+ __CFStringMakeConstantString :: proc "c" (c: cstring) -> ^String ---
+ }
+ return __CFStringMakeConstantString(c)
+}
+
+
+@(objc_type=String, objc_name="alloc", objc_is_class_method=true)
+String_alloc :: proc "c" () -> ^String {
+ return msgSend(^String, String, "alloc")
+}
+
+@(objc_type=String, objc_name="init")
+String_init :: proc "c" (self: ^String) -> ^String {
+ return msgSend(^String, self, "init")
+}
+
+
+@(objc_type=String, objc_name="initWithString")
+String_initWithString :: proc "c" (self: ^String, other: ^String) -> ^String {
+ return msgSend(^String, self, "initWithString:", other)
+}
+
+@(objc_type=String, objc_name="initWithCString")
+String_initWithCString :: proc "c" (self: ^String, pString: cstring, encoding: StringEncoding) -> ^String {
+ return msgSend(^String, self, "initWithCstring:encoding:", pString, encoding)
+}
+
+@(objc_type=String, objc_name="initWithBytesNoCopy")
+String_initWithBytesNoCopy :: proc "c" (self: ^String, pBytes: rawptr, length: UInteger, encoding: StringEncoding, freeWhenDone: bool) -> ^String {
+ return msgSend(^String, self, "initWithBytesNoCopy:length:encoding:freeWhenDone:", pBytes, length, encoding, freeWhenDone)
+}
+
+@(objc_type=String, objc_name="initWithOdinString")
+String_initWithOdinString :: proc "c" (self: ^String, str: string) -> ^String {
+ return String_initWithBytesNoCopy(self, raw_data(str), UInteger(len(str)), .UTF8, false)
+}
+
+@(objc_type=String, objc_name="characterAtIndex")
+String_characterAtIndex :: proc "c" (self: ^String, index: UInteger) -> unichar {
+ return msgSend(unichar, self, "characterAtIndex:", index)
+}
+
+@(objc_type=String, objc_name="length")
+String_length :: proc "c" (self: ^String) -> UInteger {
+ return msgSend(UInteger, self, "length")
+}
+
+@(objc_type=String, objc_name="cstringUsingEncoding")
+String_cstringUsingEncoding :: proc "c" (self: ^String, encoding: StringEncoding) -> cstring {
+ return msgSend(cstring, self, "cStringUsingEncoding:", encoding)
+}
+
+@(objc_type=String, objc_name="UTF8String")
+String_UTF8String :: proc "c" (self: ^String) -> cstring {
+ return msgSend(cstring, self, "UTF8String")
+}
+
+@(objc_type=String, objc_name="odinString")
+String_odinString :: proc "c" (self: ^String) -> string {
+ return string(String_UTF8String(self))
+}
+
+@(objc_type=String, objc_name="maximumLengthOfBytesUsingEncoding")
+String_maximumLengthOfBytesUsingEncoding :: proc "c" (self: ^String, encoding: StringEncoding) -> UInteger {
+ return msgSend(UInteger, self, "maximumLengthOfBytesUsingEncoding:", encoding)
+}
+
+@(objc_type=String, objc_name="lengthOfBytesUsingEncoding")
+String_lengthOfBytesUsingEncoding :: proc "c" (self: ^String, encoding: StringEncoding) -> UInteger {
+ return msgSend(UInteger, self, "lengthOfBytesUsingEncoding:", encoding)
+}
+
+@(objc_type=String, objc_name="isEqualToString")
+String_isEqualToString :: proc "c" (self, other: ^String) -> BOOL {
+ return msgSend(BOOL, self, "isEqualToString:", other)
+}
+
+@(objc_type=String, objc_name="rangeOfString")
+String_rangeOfString :: proc "c" (self, other: ^String, options: StringCompareOptions) -> Range {
+ return msgSend(Range, self, "rangeOfString:options:", other, options)
+} \ No newline at end of file