io.encodings.japanese eucjp=>decode-char proper working version!

db4
Yun, Jonghyouk 2009-03-01 22:54:00 +09:00
parent 9a49a1b837
commit f4c5412337
1 changed files with 25 additions and 9 deletions

View File

@ -4,7 +4,7 @@ USING: sequences kernel io io.files combinators.short-circuit
math.order values assocs io.encodings io.binary fry strings math math.order values assocs io.encodings io.binary fry strings math
io.encodings.ascii arrays byte-arrays accessors splitting io.encodings.ascii arrays byte-arrays accessors splitting
math.parser biassocs io.encodings.iana io.encodings.asian math.parser biassocs io.encodings.iana io.encodings.asian
locals ; locals multiline combinators ;
IN: io.encodings.japanese IN: io.encodings.japanese
SINGLETON: shift-jis SINGLETON: shift-jis
@ -136,17 +136,33 @@ M: eucjp encode-char ( c stream encoding -- )
M: eucjp decode-char ( stream encoding -- char/f ) M: eucjp decode-char ( stream encoding -- char/f )
drop drop
[let | stream [ ] [let | stream [ ]
c1! [ 0 ] | c1! [ 0 ]
c2! [ 0 ] |
stream stream-read1 c1! stream stream-read1 c1!
c1 small? c1
[ c1 ]
[ [
c1 c1 HEX: 20 HEX: 7E between?
stream stream-read1 [ c1 euc-0201-table n>u ]
2byte-array be> [
eucjp>unicode stream stream-read1 c2!
c2
[
c1 HEX: 8E =
[
c2 euc-0201-table n>u
] ! 0201
[
! 0208, 0212
c1 c2 2byte-array be> HEX: 8080 -
[ euc-0208-table n>u ]
[ euc-0212-table n>u ] bi 2array harvest first
[ replacement-char ] unless*
] if
]
[ replacement-char ] if
] if
] ]
if [ f ] if
] ; ] ;