SisMaker пре 4 година
родитељ
комит
ff25015b1e
1 измењених фајлова са 92 додато и 73 уклоњено
  1. +92
    -73
      src/eFmt.erl

+ 92
- 73
src/eFmt.erl Прегледај датотеку

@ -14,13 +14,11 @@
, build/1
, build/2
, print/1
, print/4
, write/1
, write/2
, write/3
, write/4
, write/6
%% eFmtformat
, fWrite/2
@ -29,8 +27,6 @@
, fBuild/1
, fBuild/2
%% eFmtPretty
%% utils
, toLowerStr/1
, toUpperStr/1
@ -85,14 +81,6 @@ build(FormatList, Options) ->
erlang:error(badarg, [FormatList, Options])
end.
-spec print(Term :: term()) -> chars().
print(Term) ->
eFmtPretty:pPrint(Term).
-spec print(Term :: term(), Column :: non_neg_integer(), LineLength :: non_neg_integer(), Depth :: depth()) -> chars().
print(Term, Column, LineLength, Depth) ->
eFmtPretty:pPrint(Term, Column, LineLength, Depth).
-spec write(Term :: term()) -> chars().
write(Term) ->
writeTerm(Term, -1, latin1).
@ -168,8 +156,59 @@ 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) of
case Strings andalso visableList(List, Encoding) of
true ->
list_to_binary(List);
_ ->
@ -279,12 +318,9 @@ 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);
@ -413,16 +449,16 @@ doCollCA(LPart, Args, Width, Adjust, Precision, PadChar, Encoding, Strings, Acc)
case CtlChar of
$w -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
$p -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
$W -> [OneArgs | LeftArgs] = Args, [Depth | LastArgs] = LeftArgs, As = [OneArgs, Depth], NextArgs = LastArgs;
$P -> [OneArgs | LeftArgs] = Args, [Depth | LastArgs] = LeftArgs, As = [OneArgs, Depth], NextArgs = LastArgs;
$W -> [OneArgs | LeftArgs] = Args, [Depth | LastArgs] = LeftArgs, As = {OneArgs, Depth}, NextArgs = LastArgs;
$P -> [OneArgs | LeftArgs] = Args, [Depth | LastArgs] = LeftArgs, As = {OneArgs, Depth}, NextArgs = LastArgs;
$s -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
$e -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
$f -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
$g -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
$b -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
$B -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
$x -> [OneArgs | LeftArgs] = Args, [Prefix | LastArgs] = LeftArgs, As = [OneArgs, Prefix], NextArgs = LastArgs;
$X -> [OneArgs | LeftArgs] = Args, [Prefix | LastArgs] = LeftArgs, As = [OneArgs, Prefix], NextArgs = LastArgs;
$x -> [OneArgs | LeftArgs] = Args, [Prefix | LastArgs] = LeftArgs, As = {OneArgs, Prefix}, NextArgs = LastArgs;
$X -> [OneArgs | LeftArgs] = Args, [Prefix | LastArgs] = LeftArgs, As = {OneArgs, Prefix}, NextArgs = LastArgs;
$+ -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
$# -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
$c -> [OneArgs | LeftArgs] = Args, As = OneArgs, NextArgs = LeftArgs;
@ -494,39 +530,39 @@ buildSmall([OneCA | Cs], CharsLimit, P, S, W, Other, Acc) ->
end
end.
ctlSmall($s, Args, Width, Adjust, Precision, PadChar, Encoding) when is_atom(Args) ->
case Encoding of
latin1 ->
AtomBinStr = ?writeAtom(Args, latin1);
_ ->
AtomBinStr = ?writeAtom(Args, uft8)
end,
string(AtomBinStr, Width, Adjust, Precision, PadChar, Encoding);
ctlSmall($e, Args, Width, Adjust, Precision, PadChar, _Encoding) when is_float(Args) ->
ctlSmall($e, Args, Width, Adjust, Precision, PadChar, _Encoding) ->
floatE(Args, Width, Adjust, Precision, PadChar);
ctlSmall($f, Args, Width, Adjust, Precision, PadChar, _Encoding) when is_float(Args) ->
ctlSmall($f, Args, Width, Adjust, Precision, PadChar, _Encoding) ->
floatF(Args, Width, Adjust, Precision, PadChar);
ctlSmall($g, Args, Width, Adjust, Precision, PadChar, _Encoding) when is_float(Args) ->
ctlSmall($g, Args, Width, Adjust, Precision, PadChar, _Encoding) ->
floatG(Args, Width, Adjust, Precision, PadChar);
ctlSmall($b, Args, Width, Adjust, Precision, PadChar, _Encoding) when is_integer(Args) ->
ctlSmall($b, Args, Width, Adjust, Precision, PadChar, _Encoding) ->
unPrefixedInt(Args, Width, Adjust, ?base(Precision), PadChar, true);
ctlSmall($B, Args, Width, Adjust, Precision, PadChar, _Encoding) when is_integer(Args) ->
ctlSmall($B, Args, Width, Adjust, Precision, PadChar, _Encoding) ->
unPrefixedInt(Args, Width, Adjust, ?base(Precision), PadChar, false);
ctlSmall($x, [Args, Prefix], Width, Adjust, Precision, PadChar, _Encoding) when is_integer(Args), is_atom(Prefix) ->
prefixedInt(Args, Width, Adjust, ?base(Precision), PadChar, atom_to_binary(Prefix, utf8), true);
ctlSmall($x, [Args, Prefix], Width, Adjust, Precision, PadChar, _Encoding) when is_integer(Args) ->
prefixedInt(Args, Width, Adjust, ?base(Precision), PadChar, Prefix, true);
ctlSmall($X, [Args, Prefix], Width, Adjust, Precision, PadChar, _Encoding) when is_integer(Args), is_atom(Prefix) ->
prefixedInt(Args, Width, Adjust, ?base(Precision), PadChar, atom_to_binary(Prefix, utf8), false);
ctlSmall($X, [Args, Prefix], Width, Adjust, Precision, PadChar, _Encoding) when is_integer(Args) ->
prefixedInt(Args, Width, Adjust, ?base(Precision), PadChar, Prefix, false);
ctlSmall($+, Args, Width, Adjust, Precision, PadChar, _Encoding) when is_integer(Args) ->
ctlSmall($x, {Args, Prefix}, Width, Adjust, Precision, PadChar, _Encoding) ->
case is_atom(Prefix) of
true ->
prefixedInt(Args, Width, Adjust, ?base(Precision), PadChar, atom_to_binary(Prefix, utf8), true);
_ ->
prefixedInt(Args, Width, Adjust, ?base(Precision), PadChar, Prefix, true)
end;
ctlSmall($X, {Args, Prefix}, Width, Adjust, Precision, PadChar, _Encoding) ->
case is_atom(Prefix) of
true ->
prefixedInt(Args, Width, Adjust, ?base(Precision), PadChar, atom_to_binary(Prefix, utf8), false);
_ ->
Base = ?base(Precision),
prefixedInt(Args, Width, Adjust, Base, PadChar, integer_to_binary(Base), $#, true)
end;
ctlSmall($+, Args, Width, Adjust, Precision, PadChar, _Encoding) ->
Base = ?base(Precision),
prefixedInt(Args, Width, Adjust, Base, PadChar, integer_to_binary(Base), $#, true);
ctlSmall($#, Args, Width, Adjust, Precision, PadChar, _Encoding) when is_integer(Args) ->
ctlSmall($#, Args, Width, Adjust, Precision, PadChar, _Encoding) ->
Base = ?base(Precision),
prefixedInt(Args, Width, Adjust, Base, PadChar, integer_to_binary(Base), $#, false);
ctlSmall($c, Args, Width, Adjust, Precision, PadChar, Encoding) when is_integer(Args) ->
ctlSmall($c, Args, Width, Adjust, Precision, PadChar, Encoding) ->
case Encoding of
unicode ->
char(Args, Width, Adjust, Precision, PadChar);
@ -536,6 +572,14 @@ ctlSmall($c, Args, Width, Adjust, Precision, PadChar, Encoding) when is_integer(
ctlSmall($~, _Args, Width, Adjust, Precision, PadChar, _Encoding) -> char($~, Width, Adjust, Precision, PadChar);
ctlSmall($n, _Args, Width, Adjust, Precision, PadChar, _Encoding) -> newline(Width, Adjust, Precision, PadChar);
ctlSmall($i, _Args, _Width, _Adjust, _Precision, _PadChar, _Encoding) -> ignore;
ctlSmall($s, Args, Width, Adjust, Precision, PadChar, Encoding) when is_atom(Args) ->
case Encoding of
latin1 ->
AtomBinStr = ?writeAtom(Args, latin1);
_ ->
AtomBinStr = ?writeAtom(Args, uft8)
end,
string(AtomBinStr, Width, Adjust, Precision, PadChar, Encoding);
ctlSmall(_C, _Args, _Width, _Adjust, _Precision, _PadChar, _Encoding) -> not_small.
buildLimited([], _, _, _, _, Acc) -> Acc;
@ -606,24 +650,6 @@ term(BinStrOrIoList, Width, Adjust, Precision, PadChar) ->
end
end.
print(Term, Depth, Width, _Adjust, Precision, _PadChar, Encoding, Strings, CharsLimit, I) ->
if
Width == none ->
if
Precision == none ->
print(Term, I + 1, ?LineCCnt, Depth, -1, CharsLimit, no_fun, Encoding, Strings);
true ->
print(Term, Precision, ?LineCCnt, Depth, -1, CharsLimit, no_fun, Encoding, Strings)
end;
true ->
if
Precision == none ->
print(Term, I + 1, Width, Depth, -1, CharsLimit, no_fun, Encoding, Strings);
true ->
print(Term, Precision, Width, Depth, -1, CharsLimit, no_fun, Encoding, Strings)
end
end.
floatE(Float, Width, Adjust, Precision, PadChar) ->
NewPrecision = ?IIF(Precision == none, 6, Precision),
@ -795,13 +821,6 @@ remainChars(T, E) ->
0
end.
%% ********************************************** eFmtFormat end *****************************************************
%% ********************************************** eFmtPretty start *****************************************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%dfsdfsdfsdfsdff start
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%dfsdfsdfsdfsdff start
%% ********************************************** eFmtPretty end *****************************************************
%% ********************************************** utils start **********************************************************
toLowerStr(BinStr) ->
<<begin

Loading…
Откажи
Сачувај