2
2
3
3
module StringEncodings
4
4
using Base. Libc: errno, strerror, E2BIG, EINVAL, EILSEQ
5
- using Compat: String, ASCIIString, UTF8String, view
5
+ using Compat: @compat
6
6
7
7
import Base: close, eachline, eof, flush, isreadable, iswritable,
8
8
open, readline, readlines, readuntil, show, write
@@ -16,24 +16,24 @@ include("encodings.jl")
16
16
using StringEncodings. Encodings
17
17
export encoding, encodings_list, Encoding, @enc_str
18
18
19
- abstract StringEncodingError
19
+ @compat abstract type StringEncodingError end
20
20
21
21
# Specified encodings or the combination are not supported by iconv
22
22
type InvalidEncodingError <: StringEncodingError
23
- args:: Tuple{ASCIIString, ASCIIString }
23
+ args:: Tuple{String, String }
24
24
end
25
25
InvalidEncodingError (from, to) = InvalidEncodingError ((from, to))
26
26
message (:: Type{InvalidEncodingError} ) = " Conversion from <<1>> to <<2>> not supported by iconv implementation, check that specified encodings are correct"
27
27
28
28
# Encountered invalid byte sequence
29
29
type InvalidSequenceError <: StringEncodingError
30
- args:: Tuple{ASCIIString }
30
+ args:: Tuple{String }
31
31
end
32
32
InvalidSequenceError (seq:: Vector{UInt8} ) = InvalidSequenceError ((bytes2hex (seq),))
33
33
message (:: Type{InvalidSequenceError} ) = " Byte sequence 0x<<1>> is invalid in source encoding or cannot be represented in target encoding"
34
34
35
35
type IConvError <: StringEncodingError
36
- args:: Tuple{ASCIIString , Int, ASCIIString }
36
+ args:: Tuple{String , Int, String }
37
37
end
38
38
IConvError (func:: String ) = IConvError ((func, errno (), strerror (errno ())))
39
39
message (:: Type{IConvError} ) = " <<1>>: <<2>> (<<3>>)"
@@ -434,16 +434,30 @@ Methods to read text in character encoding `enc`.
434
434
readuntil (s:: IO , enc:: Encoding , delim) = readuntil (StringDecoder (s, enc), delim)
435
435
readuntil (filename:: AbstractString , enc:: Encoding , delim) = open (io-> readuntil (io, enc, delim), filename)
436
436
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
447
461
end
448
462
449
463
471
485
472
486
decode {T<:AbstractString} (:: Type{T} , a:: Vector{UInt8} , enc:: AbstractString ) = decode (T, a, Encoding (enc))
473
487
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)
476
490
477
491
"""
478
492
encode(s::AbstractString, enc)
0 commit comments