Skip to content

Commit f64c2b3

Browse files
committed
Add keep argument to readuntil, readlines, readline and eachline
1 parent b1e6668 commit f64c2b3

File tree

2 files changed

+34
-27
lines changed

2 files changed

+34
-27
lines changed

src/StringEncodings.jl

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -413,38 +413,45 @@ Base.read(s::IO, ::Type{String}, enc::Encoding) = read(StringDecoder(s, enc), St
413413
Base.read(filename::AbstractString, ::Type{String}, enc::Encoding) = open(io->read(io, String, enc), filename)
414414

415415
"""
416-
readline(stream::IO, enc::Encoding)
417-
readline(filename::AbstractString, enc::Encoding)
416+
readline(stream::IO, enc::Encoding; keep::Bool=false)
417+
readline(filename::AbstractString, enc::Encoding; keep::Bool=false)
418418
419419
Methods to read text in character encoding `enc`.
420420
"""
421-
readline(s::IO, enc::Encoding) = readline(StringDecoder(s, enc))
422-
readline(filename::AbstractString, enc::Encoding) = open(io->readline(io, enc), filename)
421+
readline(s::IO, enc::Encoding; keep::Bool=false) =
422+
readline(StringDecoder(s, enc), keep=keep)
423+
readline(filename::AbstractString, enc::Encoding; keep::Bool=false) =
424+
open(io->readline(io, enc, keep=keep), filename)
423425

424426
"""
425-
readlines(stream::IO, enc::Encoding)
426-
readlines(filename::AbstractString, enc::Encoding)
427+
readlines(stream::IO, enc::Encoding; keep::Bool=false)
428+
readlines(filename::AbstractString, enc::Encoding; keep::Bool=false)
427429
428430
Methods to read text in character encoding `enc`.
429431
"""
430-
readlines(s::IO, enc::Encoding) = readlines(StringDecoder(s, enc))
431-
readlines(filename::AbstractString, enc::Encoding) = open(io->readlines(io, enc), filename)
432+
readlines(s::IO, enc::Encoding; keep::Bool=false) =
433+
readlines(StringDecoder(s, enc), keep=keep)
434+
readlines(filename::AbstractString, enc::Encoding; keep::Bool=false) =
435+
open(io->readlines(io, enc, keep=keep), filename)
432436

433437
"""
434-
readuntil(stream::IO, enc::Encoding, delim)
435-
readuntil(filename::AbstractString, enc::Encoding, delim)
438+
readuntil(stream::IO, enc::Encoding, delim; keep::Bool=false)
439+
readuntil(filename::AbstractString, enc::Encoding, delim; keep::Bool=false)
436440
437441
Methods to read text in character encoding `enc`.
438442
"""
439-
readuntil(s::IO, enc::Encoding, delim) = readuntil(StringDecoder(s, enc), delim)
440-
readuntil(filename::AbstractString, enc::Encoding, delim) = open(io->readuntil(io, enc, delim), filename)
443+
readuntil(s::IO, enc::Encoding, delim; keep::Bool=false) =
444+
readuntil(StringDecoder(s, enc), delim, keep=keep)
445+
readuntil(filename::AbstractString, enc::Encoding, delim; keep::Bool=false) =
446+
open(io->readuntil(io, enc, delim, keep=keep), filename)
441447

442448
"""
443449
eachline(stream::IO, enc::Encoding; keep=false)
444450
eachline(filename::AbstractString, enc::Encoding; keep=false)
451+
445452
Methods to read text in character encoding `enc`. Decoding is performed on the fly.
446453
"""
447-
eachline(s::IO, enc::Encoding; keep=false) = eachline(StringDecoder(s, enc); keep=false)
454+
eachline(s::IO, enc::Encoding; keep=false) = eachline(StringDecoder(s, enc), keep=keep)
448455
function eachline(filename::AbstractString, enc::Encoding; keep=false)
449456
s = open(filename, enc)
450457
Base.EachLine(s, ondone=()->close(s), keep=keep)

test/runtests.jl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Base.Test
1+
using Test
22
using StringEncodings
33

44
# Test round-trip to Unicode formats
@@ -147,27 +147,27 @@ mktemp() do path, io
147147

148148
@test readuntil(path, enc"ISO-2022-JP", '\0') == "a string "
149149
@test open(io->readuntil(io, enc"ISO-2022-JP", '\0'), path) == "a string "
150+
@test open(io->readuntil(io, enc"ISO-2022-JP", '\0', keep=true), path) == "a string \0"
150151
@test readuntil(path, enc"ISO-2022-JP", "チャ") == "a string \0"
151152
@test open(io->readuntil(io, enc"ISO-2022-JP", "チャ"), path) == "a string \0"
153+
@test open(io->readuntil(io, enc"ISO-2022-JP", "チャ", keep=true), path) == "a string \0チャ"
154+
155+
@test readline(path, enc"ISO-2022-JP") == split(s, '\n')[1]
156+
@test readline(path, enc"ISO-2022-JP", keep=true) == split(s, '\n', )[1] * '\n'
157+
@test open(readline, path, enc"ISO-2022-JP") == split(s, '\n')[1]
152158

153-
if VERSION >= v"0.6.0-dev.2467"
154-
@test readline(path, enc"ISO-2022-JP") == split(s, '\n')[1]
155-
@test open(readline, path, enc"ISO-2022-JP") == split(s, '\n')[1]
156-
else
157-
@test readline(path, enc"ISO-2022-JP") == string(split(s, '\n')[1], '\n')
158-
@test open(readline, path, enc"ISO-2022-JP") == string(split(s, '\n')[1], '\n')
159-
end
160159
a = readlines(path, enc"ISO-2022-JP")
161160
b = open(readlines, path, enc"ISO-2022-JP")
162-
163161
c = collect(eachline(path, enc"ISO-2022-JP"))
164162
d = open(io->collect(eachline(io, enc"ISO-2022-JP")), path)
163+
@test a[1] == b[1] == c[1] == d[1] == split(s, '\n')[1]
164+
@test a[2] == b[2] == c[2] == d[2] == split(s, '\n')[2]
165165

166-
if VERSION >= v"0.6.0-dev.2467"
167-
@test a[1] == b[1] == c[1] == d[1] == split(s, '\n')[1]
168-
else
169-
@test a[1] == b[1] == c[1] == d[1] == string(split(s, '\n')[1], '\n')
170-
end
166+
a = readlines(path, enc"ISO-2022-JP", keep=true)
167+
b = open(io->readlines(io, keep=true), path, enc"ISO-2022-JP")
168+
c = collect(eachline(path, enc"ISO-2022-JP", keep=true))
169+
d = open(io->collect(eachline(io, enc"ISO-2022-JP", keep=true)), path)
170+
@test a[1] == b[1] == c[1] == d[1] == split(s, '\n')[1] * '\n'
171171
@test a[2] == b[2] == c[2] == d[2] == split(s, '\n')[2]
172172

173173
# Test alternative syntaxes for open()

0 commit comments

Comments
 (0)