22
33module StringEncodings
44using Base. Libc: errno, strerror, E2BIG, EINVAL, EILSEQ
5- using Compat: String, ASCIIString, UTF8String, view
5+ using Compat: @compat
66
77import Base: close, eachline, eof, flush, isreadable, iswritable,
88 open, readline, readlines, readuntil, show, write
@@ -16,24 +16,24 @@ include("encodings.jl")
1616using StringEncodings. Encodings
1717export encoding, encodings_list, Encoding, @enc_str
1818
19- abstract StringEncodingError
19+ @compat abstract type StringEncodingError end
2020
2121# Specified encodings or the combination are not supported by iconv
2222type InvalidEncodingError <: StringEncodingError
23- args:: Tuple{ASCIIString, ASCIIString }
23+ args:: Tuple{String, String }
2424end
2525InvalidEncodingError (from, to) = InvalidEncodingError ((from, to))
2626message (:: Type{InvalidEncodingError} ) = " Conversion from <<1>> to <<2>> not supported by iconv implementation, check that specified encodings are correct"
2727
2828# Encountered invalid byte sequence
2929type InvalidSequenceError <: StringEncodingError
30- args:: Tuple{ASCIIString }
30+ args:: Tuple{String }
3131end
3232InvalidSequenceError (seq:: Vector{UInt8} ) = InvalidSequenceError ((bytes2hex (seq),))
3333message (:: Type{InvalidSequenceError} ) = " Byte sequence 0x<<1>> is invalid in source encoding or cannot be represented in target encoding"
3434
3535type IConvError <: StringEncodingError
36- args:: Tuple{ASCIIString , Int, ASCIIString }
36+ args:: Tuple{String , Int, String }
3737end
3838IConvError (func:: String ) = IConvError ((func, errno (), strerror (errno ())))
3939message (:: Type{IConvError} ) = " <<1>>: <<2>> (<<3>>)"
@@ -434,16 +434,30 @@ Methods to read text in character encoding `enc`.
434434readuntil (s:: IO , enc:: Encoding , delim) = readuntil (StringDecoder (s, enc), delim)
435435readuntil (filename:: AbstractString , enc:: Encoding , delim) = open (io-> readuntil (io, enc, delim), filename)
436436
437- """
438- eachline(stream::IO, enc::Encoding)
439- eachline(filename::AbstractString, enc::Encoding)
440-
441- Methods to read text in character encoding `enc`. Decoding is performed on the fly.
442- """
443- eachline (s:: IO , enc:: Encoding ) = eachline (StringDecoder (s, enc))
444- function eachline (filename:: AbstractString , enc:: Encoding )
445- s = open (filename, enc)
446- EachLine (s, ()-> close (s))
437+ if VERSION >= v " 0.6.0-dev.2467"
438+ """
439+ eachline(stream::IO, enc::Encoding; chomp=true)
440+ eachline(filename::AbstractString, enc::Encoding; chomp=true)
441+
442+ Methods to read text in character encoding `enc`. Decoding is performed on the fly.
443+ """
444+ eachline (s:: IO , enc:: Encoding ; chomp= true ) = eachline (StringDecoder (s, enc); chomp= true )
445+ function eachline (filename:: AbstractString , enc:: Encoding ; chomp= true )
446+ s = open (filename, enc)
447+ EachLine (s, ondone= ()-> close (s), chomp= chomp)
448+ end
449+ else
450+ """
451+ eachline(stream::IO, enc::Encoding)
452+ eachline(filename::AbstractString, enc::Encoding)
453+
454+ Methods to read text in character encoding `enc`. Decoding is performed on the fly.
455+ """
456+ eachline (s:: IO , enc:: Encoding ) = eachline (StringDecoder (s, enc))
457+ function eachline (filename:: AbstractString , enc:: Encoding )
458+ s = open (filename, enc)
459+ EachLine (s, ()-> close (s))
460+ end
447461end
448462
449463
471485
472486decode {T<:AbstractString} (:: Type{T} , a:: Vector{UInt8} , enc:: AbstractString ) = decode (T, a, Encoding (enc))
473487
474- decode (a:: Vector{UInt8} , enc:: AbstractString ) = decode (UTF8String , a, Encoding (enc))
475- decode (a:: Vector{UInt8} , enc:: Union{AbstractString, Encoding} ) = decode (UTF8String , a, enc)
488+ decode (a:: Vector{UInt8} , enc:: AbstractString ) = decode (String , a, Encoding (enc))
489+ decode (a:: Vector{UInt8} , enc:: Union{AbstractString, Encoding} ) = decode (String , a, enc)
476490
477491"""
478492 encode(s::AbstractString, enc)
0 commit comments