Fix stream-read-partial on a line-reader
parent
0c57b8e086
commit
a552625ee3
|
@ -41,6 +41,14 @@ unit-test
|
||||||
4 swap stream-read
|
4 swap stream-read
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
[
|
||||||
|
"1234"
|
||||||
|
] [
|
||||||
|
"Hello world\r\n1234" <string-reader>
|
||||||
|
dup stream-readln drop
|
||||||
|
4 swap stream-read-partial
|
||||||
|
] unit-test
|
||||||
|
|
||||||
[
|
[
|
||||||
CHAR: 1
|
CHAR: 1
|
||||||
] [
|
] [
|
||||||
|
|
|
@ -32,15 +32,26 @@ M: line-reader stream-readln ( stream -- str )
|
||||||
"\r\n" over delegate stream-read-until handle-readln ;
|
"\r\n" over delegate stream-read-until handle-readln ;
|
||||||
|
|
||||||
: fix-read ( stream string -- string )
|
: fix-read ( stream string -- string )
|
||||||
"\n" ?head [ swap stream-read1 [ add ] when* ] [ nip ] if ;
|
over line-reader-cr [
|
||||||
|
over cr-
|
||||||
|
"\n" ?head [
|
||||||
|
swap stream-read1 [ add ] when*
|
||||||
|
] [ nip ] if
|
||||||
|
] [ nip ] if ;
|
||||||
|
|
||||||
M: line-reader stream-read
|
M: line-reader stream-read
|
||||||
tuck delegate stream-read
|
tuck delegate stream-read fix-read ;
|
||||||
over line-reader-cr [ over cr- fix-read ] [ nip ] if ;
|
|
||||||
|
M: line-reader stream-read-partial
|
||||||
|
tuck delegate stream-read-partial fix-read ;
|
||||||
|
|
||||||
: fix-read1 ( stream char -- char )
|
: fix-read1 ( stream char -- char )
|
||||||
dup CHAR: \n = [ drop stream-read1 ] [ nip ] if ;
|
over line-reader-cr [
|
||||||
|
over cr-
|
||||||
|
dup CHAR: \n = [
|
||||||
|
drop stream-read1
|
||||||
|
] [ nip ] if
|
||||||
|
] [ nip ] if ;
|
||||||
|
|
||||||
M: line-reader stream-read1 ( stream -- char )
|
M: line-reader stream-read1 ( stream -- char )
|
||||||
dup delegate stream-read1
|
dup delegate stream-read1 fix-read1 ;
|
||||||
over line-reader-cr [ over cr- fix-read1 ] [ nip ] if ;
|
|
||||||
|
|
Loading…
Reference in New Issue