1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.syntax alien.strings kernel sequences byte-arrays
4 io.encodings.utf8 math core-foundation core-foundation.arrays ;
5 IN: core-foundation.strings
7 TYPEDEF: void* CFStringRef
9 TYPEDEF: int CFStringEncoding
10 : kCFStringEncodingMacRoman HEX: 0 ;
11 : kCFStringEncodingWindowsLatin1 HEX: 0500 ;
12 : kCFStringEncodingISOLatin1 HEX: 0201 ;
13 : kCFStringEncodingNextStepLatin HEX: 0B01 ;
14 : kCFStringEncodingASCII HEX: 0600 ;
15 : kCFStringEncodingUnicode HEX: 0100 ;
16 : kCFStringEncodingUTF8 HEX: 08000100 ;
17 : kCFStringEncodingNonLossyASCII HEX: 0BFF ;
18 : kCFStringEncodingUTF16 HEX: 0100 ;
19 : kCFStringEncodingUTF16BE HEX: 10000100 ;
20 : kCFStringEncodingUTF16LE HEX: 14000100 ;
21 : kCFStringEncodingUTF32 HEX: 0c000100 ;
22 : kCFStringEncodingUTF32BE HEX: 18000100 ;
23 : kCFStringEncodingUTF32LE HEX: 1c000100 ;
25 FUNCTION: CFStringRef CFStringCreateWithBytes (
29 CFStringEncoding encoding,
30 Boolean isExternalRepresentation
33 FUNCTION: CFIndex CFStringGetLength ( CFStringRef theString ) ;
35 FUNCTION: void CFStringGetCharacters ( void* theString, CFIndex start, CFIndex length, void* buffer ) ;
37 FUNCTION: Boolean CFStringGetCString (
38 CFStringRef theString,
41 CFStringEncoding encoding
44 FUNCTION: CFStringRef CFStringCreateWithCString (
47 CFStringEncoding encoding
50 : <CFString> ( string -- alien )
51 f swap utf8 string>alien kCFStringEncodingUTF8 CFStringCreateWithCString
52 [ "CFStringCreateWithCString failed" throw ] unless* ;
54 : CF>string ( alien -- string )
55 dup CFStringGetLength 4 * 1 + <byte-array> [
59 [ "CFStringGetCString failed" throw ] unless
60 ] keep utf8 alien>string ;
62 : CF>string-array ( alien -- seq )
63 CF>array [ CF>string ] map ;
65 : <CFStringArray> ( seq -- alien )
66 [ <CFString> ] map [ <CFArray> ] [ [ CFRelease ] each ] bi ;