2009-01-19 17:29:52 -05:00
|
|
|
! Copyright (C) 2008, 2009 Slava Pestov.
|
2008-12-12 01:33:05 -05:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2009-09-27 00:14:57 -04:00
|
|
|
USING: alien.c-types alien.syntax alien.strings io.encodings.string
|
|
|
|
kernel sequences byte-arrays io.encodings.utf8 math core-foundation
|
2009-09-13 01:17:24 -04:00
|
|
|
core-foundation.arrays destructors parser fry alien words ;
|
2008-12-12 01:33:05 -05:00
|
|
|
IN: core-foundation.strings
|
|
|
|
|
|
|
|
TYPEDEF: void* CFStringRef
|
|
|
|
|
|
|
|
TYPEDEF: int CFStringEncoding
|
2009-01-19 17:29:52 -05:00
|
|
|
CONSTANT: kCFStringEncodingMacRoman HEX: 0
|
|
|
|
CONSTANT: kCFStringEncodingWindowsLatin1 HEX: 0500
|
|
|
|
CONSTANT: kCFStringEncodingISOLatin1 HEX: 0201
|
|
|
|
CONSTANT: kCFStringEncodingNextStepLatin HEX: 0B01
|
|
|
|
CONSTANT: kCFStringEncodingASCII HEX: 0600
|
|
|
|
CONSTANT: kCFStringEncodingUnicode HEX: 0100
|
|
|
|
CONSTANT: kCFStringEncodingUTF8 HEX: 08000100
|
|
|
|
CONSTANT: kCFStringEncodingNonLossyASCII HEX: 0BFF
|
|
|
|
CONSTANT: kCFStringEncodingUTF16 HEX: 0100
|
|
|
|
CONSTANT: kCFStringEncodingUTF16BE HEX: 10000100
|
|
|
|
CONSTANT: kCFStringEncodingUTF16LE HEX: 14000100
|
|
|
|
CONSTANT: kCFStringEncodingUTF32 HEX: 0c000100
|
|
|
|
CONSTANT: kCFStringEncodingUTF32BE HEX: 18000100
|
|
|
|
CONSTANT: kCFStringEncodingUTF32LE HEX: 1c000100
|
2008-12-12 01:33:05 -05:00
|
|
|
|
|
|
|
FUNCTION: CFStringRef CFStringCreateWithBytes (
|
2008-12-18 19:09:22 -05:00
|
|
|
CFAllocatorRef alloc,
|
|
|
|
UInt8* bytes,
|
|
|
|
CFIndex numBytes,
|
|
|
|
CFStringEncoding encoding,
|
|
|
|
Boolean isExternalRepresentation
|
2008-12-12 01:33:05 -05:00
|
|
|
) ;
|
|
|
|
|
|
|
|
FUNCTION: CFIndex CFStringGetLength ( CFStringRef theString ) ;
|
|
|
|
|
|
|
|
FUNCTION: void CFStringGetCharacters ( void* theString, CFIndex start, CFIndex length, void* buffer ) ;
|
|
|
|
|
|
|
|
FUNCTION: Boolean CFStringGetCString (
|
2008-12-18 19:09:22 -05:00
|
|
|
CFStringRef theString,
|
2010-02-23 14:42:02 -05:00
|
|
|
c-string buffer,
|
2008-12-18 19:09:22 -05:00
|
|
|
CFIndex bufferSize,
|
|
|
|
CFStringEncoding encoding
|
2008-12-12 01:33:05 -05:00
|
|
|
) ;
|
|
|
|
|
2009-01-25 20:02:59 -05:00
|
|
|
FUNCTION: CFIndex CFStringGetBytes (
|
|
|
|
CFStringRef theString,
|
|
|
|
CFRange range,
|
|
|
|
CFStringEncoding encoding,
|
|
|
|
UInt8 lossByte,
|
|
|
|
Boolean isExternalRepresentation,
|
|
|
|
UInt8* buffer,
|
|
|
|
CFIndex maxBufLen,
|
|
|
|
CFIndex* usedBufLen
|
|
|
|
) ;
|
|
|
|
|
2008-12-12 01:33:05 -05:00
|
|
|
FUNCTION: CFStringRef CFStringCreateWithCString (
|
2008-12-18 19:09:22 -05:00
|
|
|
CFAllocatorRef alloc,
|
2010-02-23 14:42:02 -05:00
|
|
|
c-string cStr,
|
2008-12-18 19:09:22 -05:00
|
|
|
CFStringEncoding encoding
|
2008-12-12 01:33:05 -05:00
|
|
|
) ;
|
|
|
|
|
2009-02-02 14:44:44 -05:00
|
|
|
: prepare-CFString ( string -- byte-array )
|
|
|
|
[
|
|
|
|
dup HEX: 10ffff >
|
2009-03-31 09:03:27 -04:00
|
|
|
[ drop HEX: fffd ] when
|
2009-02-02 14:44:44 -05:00
|
|
|
] map utf8 encode ;
|
|
|
|
|
2008-12-12 01:33:05 -05:00
|
|
|
: <CFString> ( string -- alien )
|
2009-02-02 14:44:44 -05:00
|
|
|
[ f ] dip
|
|
|
|
prepare-CFString dup length
|
|
|
|
kCFStringEncodingUTF8 f
|
|
|
|
CFStringCreateWithBytes
|
2009-01-25 20:02:59 -05:00
|
|
|
[ "CFStringCreateWithBytes failed" throw ] unless* ;
|
2008-12-12 01:33:05 -05:00
|
|
|
|
|
|
|
: CF>string ( alien -- string )
|
2009-01-25 20:02:59 -05:00
|
|
|
dup CFStringGetLength
|
|
|
|
[ 0 swap <CFRange> kCFStringEncodingUTF8 0 f ] keep
|
|
|
|
4 * 1 + <byte-array> [ dup length 0 <CFIndex> [ CFStringGetBytes drop ] keep ] keep
|
|
|
|
swap *CFIndex head-slice utf8 decode ;
|
2008-12-12 01:33:05 -05:00
|
|
|
|
|
|
|
: CF>string-array ( alien -- seq )
|
|
|
|
CF>array [ CF>string ] map ;
|
|
|
|
|
|
|
|
: <CFStringArray> ( seq -- alien )
|
2009-01-19 17:29:52 -05:00
|
|
|
[ [ <CFString> &CFRelease ] map <CFArray> ] with-destructors ;
|
2009-09-12 20:43:23 -04:00
|
|
|
|
|
|
|
SYNTAX: CFSTRING:
|
|
|
|
CREATE scan-object
|
|
|
|
[ drop ] [ '[ _ [ _ <CFString> ] initialize-alien ] ] 2bi
|
|
|
|
(( -- alien )) define-declared ;
|