@@ -5,6 +5,34 @@ import Dates
5
5
import Base: @invokelatest
6
6
import .. isvalid_barekey_char
7
7
8
+ function print_toml_escaped (io:: IO , s:: AbstractString )
9
+ for c:: AbstractChar in s
10
+ if ! isvalid (c)
11
+ error (" TOML print: invalid character $(repr (c)) encountered when printing string" )
12
+ end
13
+ if c == ' \b '
14
+ Base. print (io, ' \\ ' , ' b' )
15
+ elseif c == ' \t '
16
+ Base. print (io, ' \\ ' , ' t' )
17
+ elseif c == ' \n '
18
+ Base. print (io, ' \\ ' , ' n' )
19
+ elseif c == ' \f '
20
+ Base. print (io, ' \\ ' , ' f' )
21
+ elseif c == ' \r '
22
+ Base. print (io, ' \\ ' , ' r' )
23
+ elseif c == ' "'
24
+ Base. print (io, ' \\ ' , ' "' )
25
+ elseif c == ' \\ '
26
+ Base. print (io, " \\ " , ' \\ ' )
27
+ elseif Base. iscntrl (c)
28
+ Base. print (io, " \\ u" )
29
+ Base. print (io, string (UInt32 (c), base= 16 , pad= 4 ))
30
+ else
31
+ Base. print (io, c)
32
+ end
33
+ end
34
+ end
35
+
8
36
function printkey (io:: IO , keys:: Vector{String} )
9
37
for (i, k) in enumerate (keys)
10
38
i != 1 && Base. print (io, " ." )
@@ -13,7 +41,9 @@ function printkey(io::IO, keys::Vector{String})
13
41
Base. print (io, " \"\" " )
14
42
elseif any (! isvalid_barekey_char, k)
15
43
# quoted key
16
- Base. print (io, " \" " , escape_string (k) ," \" " )
44
+ Base. print (io, " \" " )
45
+ print_toml_escaped (io, k)
46
+ Base. print (io, " \" " )
17
47
else
18
48
Base. print (io, k)
19
49
end
@@ -50,7 +80,11 @@ printvalue(f::MbyFunc, io::IO, value::AbstractFloat; _...) =
50
80
Base. print (io, isnan (value) ? " nan" :
51
81
isinf (value) ? string (value > 0 ? " +" : " -" , " inf" ) :
52
82
Float64 (value)) # TOML specifies IEEE 754 binary64 for float
53
- printvalue (f:: MbyFunc , io:: IO , value:: AbstractString ; _... ) = Base. print (io, " \" " , escape_string (value), " \" " )
83
+ function printvalue (f:: MbyFunc , io:: IO , value:: AbstractString ; _... )
84
+ Base. print (io, " \" " )
85
+ print_toml_escaped (io, value)
86
+ Base. print (io, " \" " )
87
+ end
54
88
55
89
is_table (value) = isa (value, AbstractDict)
56
90
is_array_of_tables (value) = isa (value, AbstractArray) &&
0 commit comments