rename `NativeString` to `CString`
[nit.git] / lib / cocoa / foundation.nit
index ab027fd..2e50e39 100644 (file)
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 # The Foundation Kit provides basic Objective-C classes and structures
-module foundation is c_linker_option "-framework Foundation"
+module foundation is ldflags "-framework Foundation"
 
 in "ObjC Header" `{
        #import <Foundation/Foundation.h>
@@ -30,18 +30,143 @@ end
 # Created using `Text::to_nsstring`.
 extern class NSString in "ObjC" `{ NSString * `}
        super NSObject
+
+       # Null pointer
+       new nil in "ObjC" `{ return nil; `}
+
+       # Get an UTF8 encoded `char*` copy of `self`
+       fun utf8_string: CString in "ObjC" `{ return (char *)[self UTF8String]; `}
+
+       redef fun to_s do return utf8_string.to_s_with_copy
 end
 
-redef class NativeString
+redef class CString
        # Get a `NSString` from `self` with the specified `length`
        fun to_nsstring(length: Int): NSString in "ObjC" `{
-               return [[NSString alloc] initWithBytes:recv
+               return [[NSString alloc] initWithBytes:self
                        length:length
-                       encoding:NSASCIIStringEncoding];
+                       encoding:NSUTF8StringEncoding];
        `}
 end
 
 redef class Text
        # Get a `NSString` from `self`
-       fun to_nsstring: NSString do return to_cstring.to_nsstring(length)
+       fun to_nsstring: NSString do return to_cstring.to_nsstring(byte_length)
+end
+
+# Wrapper of byte buffers
+extern class NSData in "ObjC" `{ NSData * `}
+
+       # Pointer to contained data
+       fun bytes: CString in "ObjC" `{ return (char*)self.bytes; `}
+
+       # Number of bytes containted in `self`
+       fun length: Int in "ObjC" `{ return self.length; `}
+
+       redef fun to_s do return bytes.to_s_with_copy_and_length(length)
+end
+
+# Error condition
+extern class NSError in "ObjC" `{ NSError * `}
+
+       # Wraps: `[self initWithDomain:(NSString)domain code:(NSInteger)code userInfo:(NSDictionary)dict]`
+       #new init_with_domain_code_user_info(domain: NSString, code: Int, dict: NSDictionary) in "ObjC" `{
+       #       return [[NSError alloc] initWithDomain: domain code: code userInfo: dict];
+       #`}
+
+       # Wraps: `NSError.domain`
+       fun domain: NSString in "ObjC" `{
+               return [self domain];
+       `}
+
+       # Wraps: `NSError.code`
+       fun code: Int in "ObjC" `{
+               return [self code];
+       `}
+
+       # Wraps: `NSError.userInfo`
+       #fun user_info: NSDictionary in "ObjC" `{
+       #       return [self userInfo];
+       #`}
+
+       # Wraps: `NSError.localizedDescription`
+       fun localized_description: NSString in "ObjC" `{
+               return [self localizedDescription];
+       `}
+
+       # Wraps: `NSError.localizedFailureReason`
+       fun localized_failure_reason: NSString in "ObjC" `{
+               return [self localizedFailureReason];
+       `}
+
+       # Wraps: `NSError.localizedRecoverySuggestion`
+       fun localized_recovery_suggestion: NSString in "ObjC" `{
+               return [self localizedRecoverySuggestion];
+       `}
+
+       # Wraps: `NSError.localizedRecoveryOptions`
+       #fun localized_recovery_options: NSArray in "ObjC" `{
+       #       return [self localizedRecoveryOptions];
+       #`}
+
+       # Wraps: `NSError.recoveryAttempter`
+       fun recovery_attempter: NSObject in "ObjC" `{
+               return [self recoveryAttempter];
+       `}
+
+       # Wraps: `NSError.helpAnchor`
+       fun help_anchor: NSString in "ObjC" `{
+               return [self helpAnchor];
+       `}
+end
+
+# Path to a specific node in a tree of nested array collections
+extern class NSIndexPath in "ObjC" `{ NSIndexPath * `}
+       super NSObject
+
+       # Wraps: `[self initWithIndex:(NSUInteger)index]`
+       new init_with_index(index: Int) in "ObjC" `{
+               return [[NSIndexPath alloc] initWithIndex: index];
+       `}
+
+       # Wraps: `NSIndexPath.length`
+       fun length: Int in "ObjC" `{
+               return [self length];
+       `}
+
+       # Wraps: `[self indexPathByAddingIndex:(NSUInteger)index]`
+       fun index_path_by_adding_index(index: Int): NSIndexPath in "ObjC" `{
+               return [self indexPathByAddingIndex: index];
+       `}
+
+       # Wraps: `[self indexPathByRemovingLastIndex]`
+       fun index_path_by_removing_last_index: NSIndexPath in "ObjC" `{
+               return [self indexPathByRemovingLastIndex];
+       `}
+
+       # Wraps: `[self indexAtPosition:(NSUInteger)position]`
+       fun index_at_position(position: Int): Int in "ObjC" `{
+               return [self indexAtPosition: position];
+       `}
+end
+
+# Interface to the defaults system for an app to customize its behavior to match a user's preferences
+extern class NSUserDefaults in "ObjC" `{ NSUserDefaults * `}
+       super NSObject
+
+       # Wraps: `[NSUserDefaults standardUserDefaults]`
+       new standard_user_defaults in "ObjC" `{
+               return [NSUserDefaults standardUserDefaults];
+       `}
+
+       # Wraps: `[NSIndexPath stringForKey:]`
+       fun string_for_key(key: NSString): NSString in "ObjC" `{
+               return [self stringForKey: key];
+       `}
+
+       # Wraps: `[NSIndexPath setObject: forKey:]`
+       fun set_object(value: NSObject, default_name: NSString)
+       in "ObjC" `{
+               [self setObject:value forKey:default_name];
+       `}
 end