io.encodings.utf16: cleanup

Slava Pestov 2009-05-28 02:50:57 -05:00
parent cdf5cff3a6
commit 2d71c8d993
1 changed files with 19 additions and 21 deletions

View File

@ -59,7 +59,7 @@ M: utf16be decode-char
] [ append-nums ] if ; ] [ append-nums ] if ;
: begin-utf16le ( stream byte -- stream char ) : begin-utf16le ( stream byte -- stream char )
over stream-read1 [ double-le ] [ drop replacement-char ] if* ; over stream-read1 dup [ double-le ] [ 2drop replacement-char ] if ;
M: utf16le decode-char M: utf16le decode-char
drop dup stream-read1 dup [ begin-utf16le ] when nip ; drop dup stream-read1 dup [ begin-utf16le ] when nip ;
@ -68,36 +68,34 @@ M: utf16le decode-char
: encode-first ( char -- byte1 byte2 ) : encode-first ( char -- byte1 byte2 )
-10 shift -10 shift
dup -8 shift BIN: 11011000 bitor [ -8 shift BIN: 11011000 bitor ] [ HEX: FF bitand ] bi ;
swap HEX: FF bitand ;
: encode-second ( char -- byte3 byte4 ) : encode-second ( char -- byte3 byte4 )
BIN: 1111111111 bitand BIN: 1111111111 bitand
dup -8 shift BIN: 11011100 bitor [ -8 shift BIN: 11011100 bitor ] [ BIN: 11111111 bitand ] bi ;
swap BIN: 11111111 bitand ;
: stream-write2 ( stream char1 char2 -- ) : stream-write2 ( char1 char2 stream -- )
rot [ stream-write1 ] curry bi@ ; [ stream-write1 ] curry bi@ ;
: char>utf16be ( stream char -- ) : char>utf16be ( char stream -- )
dup HEX: FFFF > [ over HEX: FFFF > [
HEX: 10000 - [ HEX: 10000 - ] dip
2dup encode-first stream-write2 [ [ encode-first ] dip stream-write2 ]
encode-second stream-write2 [ [ encode-second ] dip stream-write2 ] 2bi
] [ h>b/b swap stream-write2 ] if ; ] [ [ h>b/b swap ] dip stream-write2 ] if ;
M: utf16be encode-char ( char stream encoding -- ) M: utf16be encode-char ( char stream encoding -- )
drop swap char>utf16be ; drop char>utf16be ;
: char>utf16le ( char stream -- ) : char>utf16le ( stream char -- )
dup HEX: FFFF > [ over HEX: FFFF > [
HEX: 10000 - [ HEX: 10000 - ] dip
2dup encode-first swap stream-write2 [ [ encode-first swap ] dip stream-write2 ]
encode-second swap stream-write2 [ [ encode-second swap ] dip stream-write2 ] 2bi
] [ h>b/b stream-write2 ] if ; ] [ [ h>b/b ] dip stream-write2 ] if ;
M: utf16le encode-char ( char stream encoding -- ) M: utf16le encode-char ( char stream encoding -- )
drop swap char>utf16le ; drop char>utf16le ;
! UTF-16 ! UTF-16