|
|
@ -1,6 +1,7 @@ |
|
|
|
-module(eFmt). |
|
|
|
|
|
|
|
-import(binary, [split/2, part/3]). |
|
|
|
-import(lists, [reverse/2, keyfind/3]). |
|
|
|
|
|
|
|
-compile(inline). |
|
|
|
-compile({inline_size, 128}). |
|
|
@ -48,8 +49,9 @@ |
|
|
|
-type encoding() :: epp:source_encoding() | 'unicode'. |
|
|
|
-type charsLimit() :: integer(). |
|
|
|
-type fmtSpec() :: #fmtSpec{}. |
|
|
|
-type format() :: atom() | string() | binary(). |
|
|
|
|
|
|
|
-spec format(Format :: io:format(), Data :: [term()]) -> chars(). |
|
|
|
-spec format(Format :: format(), Data :: [term()]) -> chars(). |
|
|
|
format(Format, Args) -> |
|
|
|
try fWrite(Format, Args) |
|
|
|
catch |
|
|
@ -57,7 +59,7 @@ format(Format, Args) -> |
|
|
|
erlang:error(badarg, [Format, Args, _C, _R]) |
|
|
|
end. |
|
|
|
|
|
|
|
-spec format(Format :: io:format(), Data :: [term()], Options :: [{charsLimit, CharsLimit :: charsLimit()}]) -> chars(). |
|
|
|
-spec format(Format :: format(), Data :: [term()], Options :: [{charsLimit, CharsLimit :: charsLimit()}]) -> chars(). |
|
|
|
format(Format, Args, Options) -> |
|
|
|
try fWrite(Format, Args, Options) |
|
|
|
catch |
|
|
@ -65,15 +67,15 @@ format(Format, Args, Options) -> |
|
|
|
erlang:error(badarg, [Format, Args]) |
|
|
|
end. |
|
|
|
|
|
|
|
-spec formatBin(Format :: io:format(), Data :: [term()]) -> chars(). |
|
|
|
-spec formatBin(Format :: format(), Data :: [term()]) -> chars(). |
|
|
|
formatBin(Format, Args) -> |
|
|
|
try iolist_to_binary(fWrite(Format, Args)) |
|
|
|
catch |
|
|
|
_C:_R:S -> |
|
|
|
erlang:error(badarg, [Format, Args, _C, _R, S]) |
|
|
|
_C:_R -> |
|
|
|
erlang:error(badarg, [Format, Args, _C, _R]) |
|
|
|
end. |
|
|
|
|
|
|
|
-spec formatBin(Format :: io:format(), Data :: [term()], Options :: [{charsLimit, CharsLimit :: charsLimit()}]) -> chars(). |
|
|
|
-spec formatBin(Format :: format(), Data :: [term()], Options :: [{charsLimit, CharsLimit :: charsLimit()}]) -> chars(). |
|
|
|
formatBin(Format, Args, Options) -> |
|
|
|
try iolist_to_binary(fWrite(Format, Args, Options)) |
|
|
|
catch |
|
|
@ -81,7 +83,7 @@ formatBin(Format, Args, Options) -> |
|
|
|
erlang:error(badarg, [Format, Args]) |
|
|
|
end. |
|
|
|
|
|
|
|
-spec scan(Format :: io:format(), Data :: [term()]) -> FormatList :: [char() | fmtSpec()]. |
|
|
|
-spec scan(Format :: format(), Data :: [term()]) -> FormatList :: [char() | fmtSpec()]. |
|
|
|
scan(Format, Args) -> |
|
|
|
try fScan(Format, Args) |
|
|
|
catch |
|
|
@ -461,17 +463,17 @@ writeTerm(Term, _Depth, _Width, _Encoding, _Strings) when is_function(Term) -> ? |
|
|
|
|
|
|
|
%% ********************************************** eFmt end ************************************************************* |
|
|
|
%% ********************************************** eFmtFormat start ***************************************************** |
|
|
|
-spec fWrite(Format :: io:format(), Data :: [term()]) -> chars(). |
|
|
|
-spec fWrite(Format :: format(), Data :: [term()]) -> chars(). |
|
|
|
fWrite(Format, Args) -> |
|
|
|
fBuild(fScan(Format, Args), []). |
|
|
|
|
|
|
|
-spec fWrite(Format :: io:format(), Data :: [term()], Options :: [{'chars_limit', CharsLimit :: integer()}]) -> chars(). |
|
|
|
-spec fWrite(Format :: format(), Data :: [term()], Options :: [{'chars_limit', CharsLimit :: integer()}]) -> chars(). |
|
|
|
fWrite(Format, Args, Options) -> |
|
|
|
fBuild(fScan(Format, Args), Options). |
|
|
|
|
|
|
|
%% 格式 ~F.P.PadModC |
|
|
|
%% Parse all control sequences in the format string. |
|
|
|
-spec fScan(Format :: io:format(), Data :: [term()]) -> FormatList :: [char() | fmtSpec()]. |
|
|
|
-spec fScan(Format :: format(), Data :: [term()]) -> FormatList :: [char() | fmtSpec()]. |
|
|
|
fScan(Format, Args) -> |
|
|
|
if |
|
|
|
is_binary(Format) -> |
|
|
@ -627,7 +629,7 @@ buildSmall([], CharsLimit, P, S, W, Other, Acc) -> |
|
|
|
[One, Two, Three] -> |
|
|
|
[Three, Two, One]; |
|
|
|
Ret -> |
|
|
|
lists:reverse(Ret) |
|
|
|
reverse(Ret, []) |
|
|
|
end |
|
|
|
end; |
|
|
|
buildSmall([OneCA | Cs], CharsLimit, P, S, W, Other, Acc) -> |
|
|
@ -996,7 +998,7 @@ charsLen(S) -> |
|
|
|
end. |
|
|
|
|
|
|
|
getOpt(Key, TupleList, Default) -> |
|
|
|
case lists:keyfind(Key, 1, TupleList) of |
|
|
|
case keyfind(Key, 1, TupleList) of |
|
|
|
false -> |
|
|
|
Default; |
|
|
|
ValueTuple -> |
|
|
|