|
|
@ -156,63 +156,13 @@ writeList([One | List], D, E, BinAcc) -> |
|
|
|
writeList(Other, D, E, BinAcc) -> |
|
|
|
<<BinAcc/binary, "|", (writeTerm(Other, D, E))/binary, "]">>. |
|
|
|
|
|
|
|
-spec printable_list(Term) -> boolean() when |
|
|
|
Term :: term(). |
|
|
|
|
|
|
|
visableList(L, Encoding) -> |
|
|
|
%% There will be more alternatives returns from io:printable range |
|
|
|
%% in the future. To not have a catch-all clause is deliberate. |
|
|
|
case Encoding of |
|
|
|
latin1 -> |
|
|
|
printable_latin1_list(L); |
|
|
|
_ -> |
|
|
|
printable_unicode_list(L) |
|
|
|
end. |
|
|
|
|
|
|
|
-spec printable_unicode_list(Term) -> boolean() when |
|
|
|
Term :: term(). |
|
|
|
|
|
|
|
-spec printable_latin1_list(Term) -> boolean() when |
|
|
|
Term :: term(). |
|
|
|
|
|
|
|
printable_latin1_list([C|Cs]) when is_integer(C), C >= $\040, C =< $\176 -> |
|
|
|
printable_latin1_list(Cs); |
|
|
|
printable_latin1_list([C|Cs]) when is_integer(C), C >= $\240, C =< $\377 -> |
|
|
|
printable_latin1_list(Cs); |
|
|
|
printable_latin1_list([$\n|Cs]) -> printable_latin1_list(Cs); |
|
|
|
printable_latin1_list([$\r|Cs]) -> printable_latin1_list(Cs); |
|
|
|
printable_latin1_list([$\t|Cs]) -> printable_latin1_list(Cs); |
|
|
|
printable_latin1_list([$\v|Cs]) -> printable_latin1_list(Cs); |
|
|
|
printable_latin1_list([$\b|Cs]) -> printable_latin1_list(Cs); |
|
|
|
printable_latin1_list([$\f|Cs]) -> printable_latin1_list(Cs); |
|
|
|
printable_latin1_list([$\e|Cs]) -> printable_latin1_list(Cs); |
|
|
|
printable_latin1_list([]) -> true; |
|
|
|
printable_latin1_list(_) -> false. %Everything else is false |
|
|
|
|
|
|
|
printable_unicode_list([C|Cs]) when is_integer(C), C >= $\040, C =< $\176 -> |
|
|
|
printable_unicode_list(Cs); |
|
|
|
printable_unicode_list([C|Cs]) |
|
|
|
when is_integer(C), C >= 16#A0, C < 16#D800; |
|
|
|
is_integer(C), C > 16#DFFF, C < 16#FFFE; |
|
|
|
is_integer(C), C > 16#FFFF, C =< 16#10FFFF -> |
|
|
|
printable_unicode_list(Cs); |
|
|
|
printable_unicode_list([$\n|Cs]) -> printable_unicode_list(Cs); |
|
|
|
printable_unicode_list([$\r|Cs]) -> printable_unicode_list(Cs); |
|
|
|
printable_unicode_list([$\t|Cs]) -> printable_unicode_list(Cs); |
|
|
|
printable_unicode_list([$\v|Cs]) -> printable_unicode_list(Cs); |
|
|
|
printable_unicode_list([$\b|Cs]) -> printable_unicode_list(Cs); |
|
|
|
printable_unicode_list([$\f|Cs]) -> printable_unicode_list(Cs); |
|
|
|
printable_unicode_list([$\e|Cs]) -> printable_unicode_list(Cs); |
|
|
|
printable_unicode_list([]) -> true; |
|
|
|
printable_unicode_list(_) -> false. %Everything else is false |
|
|
|
|
|
|
|
|
|
|
|
writeList(List, Depth, Width, Encoding, Strings) -> |
|
|
|
case Strings andalso visableList(List, Encoding) of |
|
|
|
case Strings andalso visualList(List, Encoding) of |
|
|
|
true -> |
|
|
|
list_to_binary(List); |
|
|
|
_ -> |
|
|
|
writeList([], Depth, Widt, Encoding, Strings, SumLC, <<"[">>) |
|
|
|
writeList([], Depth, Width, Encoding, Strings, SumLC, <<"[">>) |
|
|
|
end. |
|
|
|
|
|
|
|
writeList([], Depth, Width, Encoding, Strings, SumLC, BinAcc) -> |
|
|
@ -239,16 +189,7 @@ writeList(Term, Depth, Width, Encoding, Strings, <<"[">>) -> |
|
|
|
|
|
|
|
writeTuple(Tuple, Depth, Width, CharsLimit, Encoding, Strings, Index, TupleSize, BinAcc) -> |
|
|
|
if |
|
|
|
Depth =:= 1 -> <<BinAcc/binary, "...}">>; |
|
|
|
true -> |
|
|
|
if |
|
|
|
Index < TupleSize -> |
|
|
|
writeTuple(Tuple, Depth, Width, CharsLimit, Encoding, Strings, Index + 1, TupleSize, <<BinAcc/binary, (writeTerm(element(Index, Tuple), D - 1, E))/binary, ",">>); |
|
|
|
Index == TupleSize -> |
|
|
|
<<BinAcc/binary, (writeTerm(element(Index, Tuple), Depth, Width, CharsLimit, Encoding, Strings))/binary, "}">>; |
|
|
|
true -> |
|
|
|
<<BinAcc/binary, "}">> |
|
|
|
end |
|
|
|
|
|
|
|
end. |
|
|
|
|
|
|
|
writeMap(Map, D, E, BinAcc) -> |
|
|
@ -318,9 +259,12 @@ writeTerm(_Term, Depth, _Width, _Encoding, _Strings) when Depth =< 0 -> <<"..."> |
|
|
|
writeTerm(Term, _Depth, _Width, _Encoding, _Strings) when is_integer(Term) -> ?writeInt(Term); |
|
|
|
writeTerm(Term, _Depth, _Width, Encoding, _Strings) when is_atom(Term) -> ?writeAtom(Term, Encoding); |
|
|
|
writeTerm(Term, Depth, Width, Encoding, Strings) when is_list(Term) -> writeList(Term, Depth, Width, Encoding, Strings); |
|
|
|
writeTerm(Term, Depth, Width, Encoding, Strings) when is_map(Term) -> writeMap(Term, Depth, Width, Encoding, Strings, <<"#{">>); |
|
|
|
writeTerm(Term, Depth, Width, Encoding, Strings) when is_tuple(Term) -> writeTuple(Term, Depth, Width, Encoding, Strings, 1, tuple_size(Term), <<"{">>); |
|
|
|
writeTerm(Term, Depth, Width, Encoding, Strings) when is_bitstring(Term) -> writeBinary(Term, Depth, Width, Encoding, Strings, <<"<<">>); |
|
|
|
writeTerm(Term, Depth, Width, Encoding, Strings) when is_map(Term) -> |
|
|
|
writeMap(Term, Depth, Width, Encoding, Strings, <<"#{">>); |
|
|
|
writeTerm(Term, Depth, Width, Encoding, Strings) when is_tuple(Term) -> |
|
|
|
writeTuple(Term, Depth, Width, Encoding, Strings, 1, tuple_size(Term), <<"{">>); |
|
|
|
writeTerm(Term, Depth, Width, Encoding, Strings) when is_bitstring(Term) -> |
|
|
|
writeBinary(Term, Depth, Width, Encoding, Strings, <<"<<">>); |
|
|
|
writeTerm(Term, _Depth, _Width, _Encoding, _Strings) when is_pid(Term) -> ?writePid(Term); |
|
|
|
writeTerm(Term, _Depth, _Width, _Encoding, _Strings) when is_float(Term) -> ?writeFloat(Term); |
|
|
|
writeTerm(Term, _Depth, _Width, _Encoding, _Strings) when is_port(Term) -> ?writePort(Term); |
|
|
@ -867,4 +811,52 @@ toBinary(Value) when is_float(Value) -> float_to_binary(Value, [{decimals, 6}, c |
|
|
|
toBinary(Value) when is_atom(Value) -> atom_to_binary(Value, utf8); |
|
|
|
toBinary(Value) when is_binary(Value) -> Value; |
|
|
|
toBinary(Value) -> term_to_binary(Value). |
|
|
|
|
|
|
|
visualList(L, Encoding) -> |
|
|
|
?IIF(Encoding == latin1, visualLatin1List(L), visualUnicodeList(L, Encoding)). |
|
|
|
|
|
|
|
visualBin(Bin, Encoding) -> |
|
|
|
?IIF(Encoding == latin1, visualLatin1Bin(Bin), visualUtf8Bin(Bin, io:printable_range())). |
|
|
|
|
|
|
|
visualLatin1List([]) -> true; |
|
|
|
visualLatin1List([C | Cs]) -> ?IIF(visualLatin1Char(C), visualLatin1List(Cs), false); |
|
|
|
visualLatin1List(_) -> false. |
|
|
|
|
|
|
|
visualUnicodeList([], _) -> true; |
|
|
|
visualUnicodeList([C | Cs], Encoding) -> ?IIF(visualUtf8Char(C, Encoding), visualUnicodeList(Cs, Encoding), false); |
|
|
|
visualUnicodeList(_, _) -> false. |
|
|
|
|
|
|
|
visualLatin1Bin(<<>>) -> true; |
|
|
|
visualLatin1Bin(<<C:8, Left/binary>>) -> ?IIF(visualLatin1Char(C), visualLatin1Bin(Left), false); |
|
|
|
visualLatin1Bin(_) -> false. |
|
|
|
|
|
|
|
visualUtf8Bin(<<>>, _) -> true; |
|
|
|
visualUtf8Bin(<<C/utf8, Left/binary>>, Range) -> ?IIF(visualUtf8Char(C, Range), visualUtf8Bin(Left, Range), false); |
|
|
|
visualUtf8Bin(_, _) -> false. |
|
|
|
|
|
|
|
visualLatin1Char($\n) -> true; |
|
|
|
visualLatin1Char($\r) -> true; |
|
|
|
visualLatin1Char($\t) -> true; |
|
|
|
visualLatin1Char($\v) -> true; |
|
|
|
visualLatin1Char($\b) -> true; |
|
|
|
visualLatin1Char($\f) -> true; |
|
|
|
visualLatin1Char($\e) -> true; |
|
|
|
visualLatin1Char(C) -> |
|
|
|
C >= $\040 andalso C =< $\176 orelse C >= $\240, C =< $\377. |
|
|
|
|
|
|
|
visualUtf8Char($\n, _) -> true; |
|
|
|
visualUtf8Char($\r, _) -> true; |
|
|
|
visualUtf8Char($\t, _) -> true; |
|
|
|
visualUtf8Char($\v, _) -> true; |
|
|
|
visualUtf8Char($\b, _) -> true; |
|
|
|
visualUtf8Char($\f, _) -> true; |
|
|
|
visualUtf8Char($\e, _) -> true; |
|
|
|
visualUtf8Char(C, _Encoding) -> |
|
|
|
C >= $\s andalso C =< $~ orelse C >= 16#A0 andalso C < 16#D800 orelse C > 16#DFFF andalso C < 16#FFFE orelse C > 16#FFFF andalso C =< 16#10FFFF. |
|
|
|
%% case Encoding of |
|
|
|
%% latin1 -> |
|
|
|
%% C >= $\s andalso C =< $~ orelse C >= 16#A0 andalso C =< 16#FF; |
|
|
|
%% _ -> |
|
|
|
%% C >= $\s andalso C =< $~ orelse C >= 16#A0 andalso C < 16#D800 orelse C > 16#DFFF andalso C < 16#FFFE orelse C > 16#FFFF andalso C =< 16#10FFFF |
|
|
|
%% end. |
|
|
|
%% ********************************************** utils end ********************************************************** |