NSString.odin 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package objc_Foundation
  2. foreign import "system:Foundation.framework"
  3. @(objc_class="NSString")
  4. String :: struct {using _: Copying(String)}
  5. StringEncoding :: enum UInteger {
  6. ASCII = 1,
  7. NEXTSTEP = 2,
  8. JapaneseEUC = 3,
  9. UTF8 = 4,
  10. ISOLatin1 = 5,
  11. Symbol = 6,
  12. NonLossyASCII = 7,
  13. ShiftJIS = 8,
  14. ISOLatin2 = 9,
  15. Unicode = 10,
  16. WindowsCP1251 = 11,
  17. WindowsCP1252 = 12,
  18. WindowsCP1253 = 13,
  19. WindowsCP1254 = 14,
  20. WindowsCP1250 = 15,
  21. ISO2022JP = 21,
  22. MacOSRoman = 30,
  23. UTF16 = Unicode,
  24. UTF16BigEndian = 0x90000100,
  25. UTF16LittleEndian = 0x94000100,
  26. UTF32 = 0x8c000100,
  27. UTF32BigEndian = 0x98000100,
  28. UTF32LittleEndian = 0x9c000100,
  29. }
  30. StringCompareOptions :: distinct bit_set[StringCompareOption; UInteger]
  31. StringCompareOption :: enum UInteger {
  32. CaseInsensitive = 0,
  33. LiteralSearch = 1,
  34. BackwardsSearch = 2,
  35. AnchoredSearch = 3,
  36. NumericSearch = 6,
  37. DiacriticInsensitive = 7,
  38. WidthInsensitive = 8,
  39. ForcedOrdering = 9,
  40. RegularExpression = 10,
  41. }
  42. unichar :: distinct u16
  43. @(link_prefix="NS", default_calling_convention="c")
  44. foreign Foundation {
  45. StringFromClass :: proc(cls: Class) -> ^String ---
  46. }
  47. AT :: MakeConstantString
  48. MakeConstantString :: proc "c" (#const c: cstring) -> ^String {
  49. foreign Foundation {
  50. __CFStringMakeConstantString :: proc "c" (c: cstring) -> ^String ---
  51. }
  52. return __CFStringMakeConstantString(c)
  53. }
  54. @(objc_type=String, objc_name="alloc", objc_is_class_method=true)
  55. String_alloc :: proc "c" () -> ^String {
  56. return msgSend(^String, String, "alloc")
  57. }
  58. @(objc_type=String, objc_name="init")
  59. String_init :: proc "c" (self: ^String) -> ^String {
  60. return msgSend(^String, self, "init")
  61. }
  62. @(objc_type=String, objc_name="initWithString")
  63. String_initWithString :: proc "c" (self: ^String, other: ^String) -> ^String {
  64. return msgSend(^String, self, "initWithString:", other)
  65. }
  66. @(objc_type=String, objc_name="initWithCString")
  67. String_initWithCString :: proc "c" (self: ^String, pString: cstring, encoding: StringEncoding) -> ^String {
  68. return msgSend(^String, self, "initWithCstring:encoding:", pString, encoding)
  69. }
  70. @(objc_type=String, objc_name="initWithBytesNoCopy")
  71. String_initWithBytesNoCopy :: proc "c" (self: ^String, pBytes: rawptr, length: UInteger, encoding: StringEncoding, freeWhenDone: bool) -> ^String {
  72. return msgSend(^String, self, "initWithBytesNoCopy:length:encoding:freeWhenDone:", pBytes, length, encoding, freeWhenDone)
  73. }
  74. @(objc_type=String, objc_name="initWithOdinString")
  75. String_initWithOdinString :: proc "c" (self: ^String, str: string) -> ^String {
  76. return String_initWithBytesNoCopy(self, raw_data(str), UInteger(len(str)), .UTF8, false)
  77. }
  78. @(objc_type=String, objc_name="characterAtIndex")
  79. String_characterAtIndex :: proc "c" (self: ^String, index: UInteger) -> unichar {
  80. return msgSend(unichar, self, "characterAtIndex:", index)
  81. }
  82. @(objc_type=String, objc_name="length")
  83. String_length :: proc "c" (self: ^String) -> UInteger {
  84. return msgSend(UInteger, self, "length")
  85. }
  86. @(objc_type=String, objc_name="cstringUsingEncoding")
  87. String_cstringUsingEncoding :: proc "c" (self: ^String, encoding: StringEncoding) -> cstring {
  88. return msgSend(cstring, self, "cStringUsingEncoding:", encoding)
  89. }
  90. @(objc_type=String, objc_name="UTF8String")
  91. String_UTF8String :: proc "c" (self: ^String) -> cstring {
  92. return msgSend(cstring, self, "UTF8String")
  93. }
  94. @(objc_type=String, objc_name="odinString")
  95. String_odinString :: proc "c" (self: ^String) -> string {
  96. return string(String_UTF8String(self))
  97. }
  98. @(objc_type=String, objc_name="maximumLengthOfBytesUsingEncoding")
  99. String_maximumLengthOfBytesUsingEncoding :: proc "c" (self: ^String, encoding: StringEncoding) -> UInteger {
  100. return msgSend(UInteger, self, "maximumLengthOfBytesUsingEncoding:", encoding)
  101. }
  102. @(objc_type=String, objc_name="lengthOfBytesUsingEncoding")
  103. String_lengthOfBytesUsingEncoding :: proc "c" (self: ^String, encoding: StringEncoding) -> UInteger {
  104. return msgSend(UInteger, self, "lengthOfBytesUsingEncoding:", encoding)
  105. }
  106. @(objc_type=String, objc_name="isEqualToString")
  107. String_isEqualToString :: proc "c" (self, other: ^String) -> BOOL {
  108. return msgSend(BOOL, self, "isEqualToString:", other)
  109. }
  110. @(objc_type=String, objc_name="rangeOfString")
  111. String_rangeOfString :: proc "c" (self, other: ^String, options: StringCompareOptions) -> Range {
  112. return msgSend(Range, self, "rangeOfString:options:", other, options)
  113. }