]> gitweb.factorcode.org Git - factor.git/blob - basis/core-foundation/strings/strings.factor
use radix literals
[factor.git] / basis / core-foundation / strings / strings.factor
1 ! Copyright (C) 2008, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.c-types alien.data alien.syntax alien.strings
4 io.encodings.string kernel sequences byte-arrays
5 io.encodings.utf8 math core-foundation core-foundation.arrays
6 core-foundation.data destructors parser fry alien words ;
7 IN: core-foundation.strings
8
9 TYPEDEF: void* CFStringRef
10
11 TYPEDEF: int CFStringEncoding
12 CONSTANT: kCFStringEncodingMacRoman 0x0
13 CONSTANT: kCFStringEncodingWindowsLatin1 0x0500
14 CONSTANT: kCFStringEncodingISOLatin1 0x0201
15 CONSTANT: kCFStringEncodingNextStepLatin 0x0B01
16 CONSTANT: kCFStringEncodingASCII 0x0600
17 CONSTANT: kCFStringEncodingUnicode 0x0100
18 CONSTANT: kCFStringEncodingUTF8 0x08000100
19 CONSTANT: kCFStringEncodingNonLossyASCII 0x0BFF
20 CONSTANT: kCFStringEncodingUTF16 0x0100
21 CONSTANT: kCFStringEncodingUTF16BE 0x10000100
22 CONSTANT: kCFStringEncodingUTF16LE 0x14000100
23 CONSTANT: kCFStringEncodingUTF32 0x0c000100
24 CONSTANT: kCFStringEncodingUTF32BE 0x18000100
25 CONSTANT: kCFStringEncodingUTF32LE 0x1c000100
26
27 FUNCTION: CFStringRef CFStringCreateWithBytes (
28     CFAllocatorRef alloc,
29     UInt8* bytes,
30     CFIndex numBytes,
31     CFStringEncoding encoding,
32     Boolean isExternalRepresentation
33 ) ;
34
35 FUNCTION: CFIndex CFStringGetLength ( CFStringRef theString ) ;
36
37 FUNCTION: void CFStringGetCharacters ( void* theString, CFIndex start, CFIndex length, void* buffer ) ;
38
39 FUNCTION: Boolean CFStringGetCString (
40     CFStringRef theString,
41     UInt8* buffer,
42     CFIndex bufferSize,
43     CFStringEncoding encoding
44 ) ;
45
46 FUNCTION: CFIndex CFStringGetBytes (
47    CFStringRef theString,
48    CFRange range,
49    CFStringEncoding encoding,
50    UInt8 lossByte,
51    Boolean isExternalRepresentation,
52    UInt8* buffer,
53    CFIndex maxBufLen,
54    CFIndex* usedBufLen
55 ) ;
56
57 FUNCTION: CFStringRef CFStringCreateWithCString (
58     CFAllocatorRef alloc,
59     UInt8* cStr,
60     CFStringEncoding encoding
61 ) ;
62
63 FUNCTION: CFStringRef CFCopyDescription ( CFTypeRef cf ) ;
64 FUNCTION: CFStringRef CFCopyTypeIDDescription ( CFTypeID type_id ) ;
65
66 : prepare-CFString ( string -- byte-array )
67     [
68         dup 0x10ffff >
69         [ drop 0xfffd ] when
70     ] map utf8 encode ;
71
72 : <CFString> ( string -- alien )
73     [ f ] dip
74     prepare-CFString dup length
75     kCFStringEncodingUTF8 f
76     CFStringCreateWithBytes
77     [ "CFStringCreateWithBytes failed" throw ] unless* ;
78
79 : CF>string ( alien -- string )
80     dup CFStringGetLength
81     [ 0 swap <CFRange> kCFStringEncodingUTF8 0 f ] keep
82     4 * 1 + <byte-array> [
83         dup length
84         { CFIndex } [ CFStringGetBytes drop ] with-out-parameters
85     ] keep
86     swap head-slice utf8 decode ;
87
88 : CF>string-array ( alien -- seq )
89     CF>array [ CF>string ] map ;
90
91 : <CFStringArray> ( seq -- alien )
92     [ [ <CFString> &CFRelease ] map <CFArray> ] with-destructors ;
93
94 : CF>description ( cf -- description )
95     [ CFCopyDescription &CFRelease CF>string ] with-destructors ;
96 : CFType>description ( cf -- description )
97     CFGetTypeID [ CFCopyTypeIDDescription &CFRelease CF>string ] with-destructors ;
98
99 SYNTAX: CFSTRING: 
100     scan-new-word scan-object 
101     [ drop ] [ '[ _ [ _ <CFString> ] initialize-alien ] ] 2bi
102     ( -- alien ) define-declared ;