2011-09-12 03:56:24 -04:00
|
|
|
! Copyright (C) 2008, 2011 Slava Pestov.
|
2009-05-02 14:45:38 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2013-03-05 13:34:47 -05:00
|
|
|
USING: accessors alien arrays byte-arrays init io io.encodings
|
|
|
|
io.encodings.utf16n io.encodings.utf8 io.streams.byte-array
|
|
|
|
io.streams.memory kernel kernel.private namespaces sequences
|
|
|
|
strings system system.private ;
|
2009-05-02 14:45:38 -04:00
|
|
|
IN: alien.strings
|
|
|
|
|
|
|
|
GENERIC# alien>string 1 ( c-ptr encoding -- string/f )
|
|
|
|
|
|
|
|
M: c-ptr alien>string
|
|
|
|
[ <memory-stream> ] [ <decoder> ] bi*
|
|
|
|
"\0" swap stream-read-until drop ;
|
|
|
|
|
2009-08-26 10:13:30 -04:00
|
|
|
M: object alien>string
|
|
|
|
[ underlying>> ] dip alien>string ;
|
|
|
|
|
2009-05-02 14:45:38 -04:00
|
|
|
M: f alien>string
|
|
|
|
drop ;
|
|
|
|
|
|
|
|
ERROR: invalid-c-string string ;
|
|
|
|
|
|
|
|
: check-string ( string -- )
|
2009-10-28 16:02:00 -04:00
|
|
|
0 over member-eq? [ invalid-c-string ] [ drop ] if ;
|
2009-05-02 14:45:38 -04:00
|
|
|
|
|
|
|
GENERIC# string>alien 1 ( string encoding -- byte-array )
|
|
|
|
|
|
|
|
M: c-ptr string>alien drop ;
|
|
|
|
|
|
|
|
M: string string>alien
|
|
|
|
over check-string
|
|
|
|
<byte-writer>
|
|
|
|
[ stream-write ]
|
|
|
|
[ 0 swap stream-write1 ]
|
|
|
|
[ stream>> >byte-array ]
|
|
|
|
tri ;
|
|
|
|
|
2009-08-29 20:55:27 -04:00
|
|
|
M: tuple string>alien drop underlying>> ;
|
|
|
|
|
2010-02-20 23:40:19 -05:00
|
|
|
HOOK: native-string-encoding os ( -- encoding ) foldable
|
2009-05-02 14:45:38 -04:00
|
|
|
|
2010-02-20 23:40:19 -05:00
|
|
|
M: unix native-string-encoding utf8 ;
|
|
|
|
M: windows native-string-encoding utf16n ;
|
2009-05-02 14:45:38 -04:00
|
|
|
|
2010-02-20 23:40:19 -05:00
|
|
|
: alien>native-string ( alien -- string )
|
|
|
|
native-string-encoding alien>string ; inline
|
2009-05-05 10:12:39 -04:00
|
|
|
|
2010-02-20 23:40:19 -05:00
|
|
|
: native-string>alien ( string -- alien )
|
|
|
|
native-string-encoding string>alien ; inline
|
2009-05-02 14:45:38 -04:00
|
|
|
|
|
|
|
: dll-path ( dll -- string )
|
|
|
|
path>> alien>native-string ;
|
|
|
|
|
2011-09-12 03:56:24 -04:00
|
|
|
GENERIC: string>symbol ( str/seq -- alien )
|
2009-05-05 15:41:38 -04:00
|
|
|
|
2011-09-12 03:56:24 -04:00
|
|
|
M: string string>symbol utf8 string>alien ;
|
2009-05-05 15:41:38 -04:00
|
|
|
|
2011-09-12 03:56:24 -04:00
|
|
|
M: sequence string>symbol [ utf8 string>alien ] map ;
|
2009-05-05 15:41:38 -04:00
|
|
|
|
2011-09-13 17:46:22 -04:00
|
|
|
: (symbol>string) ( alien -- str )
|
2011-09-12 03:56:24 -04:00
|
|
|
utf8 alien>string ;
|
2009-05-02 14:45:38 -04:00
|
|
|
|
2011-09-13 17:46:22 -04:00
|
|
|
GENERIC: symbol>string ( symbol(s) -- string(s) )
|
|
|
|
M: byte-array symbol>string (symbol>string) ;
|
|
|
|
M: array symbol>string [ (symbol>string) ] map ;
|
|
|
|
|
2009-05-02 14:45:38 -04:00
|
|
|
[
|
2011-11-02 15:54:31 -04:00
|
|
|
OBJ-CPU special-object utf8 alien>string string>cpu \ cpu set-global
|
|
|
|
OBJ-OS special-object utf8 alien>string string>os \ os set-global
|
|
|
|
OBJ-VM-COMPILER special-object utf8 alien>string \ vm-compiler set-global
|
2009-10-19 22:17:02 -04:00
|
|
|
] "alien.strings" add-startup-hook
|