]> gitweb.factorcode.org Git - factor.git/blob - basis/core-foundation/strings/strings.factor
Merge branch 'master' of git://factorcode.org/git/factor into regexp
[factor.git] / basis / core-foundation / strings / strings.factor
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
6
7 TYPEDEF: void* CFStringRef
8
9 TYPEDEF: int CFStringEncoding
10 CONSTANT: kCFStringEncodingMacRoman HEX: 0
11 CONSTANT: kCFStringEncodingWindowsLatin1 HEX: 0500
12 CONSTANT: kCFStringEncodingISOLatin1 HEX: 0201
13 CONSTANT: kCFStringEncodingNextStepLatin HEX: 0B01
14 CONSTANT: kCFStringEncodingASCII HEX: 0600
15 CONSTANT: kCFStringEncodingUnicode HEX: 0100
16 CONSTANT: kCFStringEncodingUTF8 HEX: 08000100
17 CONSTANT: kCFStringEncodingNonLossyASCII HEX: 0BFF
18 CONSTANT: kCFStringEncodingUTF16 HEX: 0100
19 CONSTANT: kCFStringEncodingUTF16BE HEX: 10000100
20 CONSTANT: kCFStringEncodingUTF16LE HEX: 14000100
21 CONSTANT: kCFStringEncodingUTF32 HEX: 0c000100
22 CONSTANT: kCFStringEncodingUTF32BE HEX: 18000100
23 CONSTANT: kCFStringEncodingUTF32LE HEX: 1c000100
24
25 FUNCTION: CFStringRef CFStringCreateWithBytes (
26     CFAllocatorRef alloc,
27     UInt8* bytes,
28     CFIndex numBytes,
29     CFStringEncoding encoding,
30     Boolean isExternalRepresentation
31 ) ;
32
33 FUNCTION: CFIndex CFStringGetLength ( CFStringRef theString ) ;
34
35 FUNCTION: void CFStringGetCharacters ( void* theString, CFIndex start, CFIndex length, void* buffer ) ;
36
37 FUNCTION: Boolean CFStringGetCString (
38     CFStringRef theString,
39     char* buffer,
40     CFIndex bufferSize,
41     CFStringEncoding encoding
42 ) ;
43
44 FUNCTION: CFStringRef CFStringCreateWithCString (
45     CFAllocatorRef alloc,
46     char* cStr,
47     CFStringEncoding encoding
48 ) ;
49
50 : <CFString> ( string -- alien )
51     f swap utf8 string>alien kCFStringEncodingUTF8 CFStringCreateWithCString
52     [ "CFStringCreateWithCString failed" throw ] unless* ;
53
54 : CF>string ( alien -- string )
55     dup CFStringGetLength 4 * 1 + <byte-array> [
56         dup length
57         kCFStringEncodingUTF8
58         CFStringGetCString
59         [ "CFStringGetCString failed" throw ] unless
60     ] keep utf8 alien>string ;
61
62 : CF>string-array ( alien -- seq )
63     CF>array [ CF>string ] map ;
64
65 : <CFStringArray> ( seq -- alien )
66     [ <CFString> ] map [ <CFArray> ] [ [ CFRelease ] each ] bi ;