74
74
precision(Fmt, Args) ->
77
field_value([$*|Fmt], [A|Args]) when integer(A) ->
77
field_value([$*|Fmt], [A|Args]) when is_integer(A) ->
79
field_value([C|Fmt], Args) when C >= $0, C =< $9 ->
79
field_value([C|Fmt], Args) when is_integer(C), C >= $0, C =< $9 ->
80
80
field_value([C|Fmt], Args, 0);
81
81
field_value(Fmt, Args) ->
84
field_value([C|Fmt], Args, F) when C >= $0, C =< $9 ->
84
field_value([C|Fmt], Args, F) when is_integer(C), C >= $0, C =< $9 ->
85
85
field_value(Fmt, Args, 10*F + (C - $0));
86
86
field_value(Fmt, Args, F) -> %Default case
110
110
collect_cc([$+|Fmt], [A|Args]) -> {$+,[A],Fmt,Args};
111
111
collect_cc([$#|Fmt], [A|Args]) -> {$#,[A],Fmt,Args};
112
112
collect_cc([$c|Fmt], [A|Args]) -> {$c,[A],Fmt,Args};
113
collect_cc([$~|Fmt], Args) -> {$~,[],Fmt,Args};
114
collect_cc([$n|Fmt], Args) -> {$n,[],Fmt,Args};
113
collect_cc([$~|Fmt], Args) when is_list(Args) -> {$~,[],Fmt,Args};
114
collect_cc([$n|Fmt], Args) when is_list(Args) -> {$n,[],Fmt,Args};
115
115
collect_cc([$i|Fmt], [A|Args]) -> {$i,[A],Fmt,Args}.
117
117
%% pcount([ControlC]) -> Count.
173
173
print(A, Depth, F, Adj, P, Pad, I);
174
174
control($s, [A], F, Adj, P, Pad, _I) when atom(A) ->
175
175
string(atom_to_list(A), F, Adj, P, Pad);
176
control($s, [L], F, Adj, P, Pad, _I) ->
177
true = io_lib:deep_char_list(L), %Check if L a character list
176
control($s, [L0], F, Adj, P, Pad, _I) ->
177
L = iolist_to_chars(L0),
178
178
string(L, F, Adj, P, Pad);
179
179
control($e, [A], F, Adj, P, Pad, _I) when float(A) ->
180
180
fwrite_e(A, F, Adj, P, Pad);
224
224
term(T, none, _Adj, none, _Pad) -> T;
225
225
term(T, none, Adj, P, Pad) -> term(T, P, Adj, P, Pad);
226
226
term(T, F, Adj, P0, Pad) ->
227
L = lists:flat_length(T),
227
L = lists:flatlength(T),
228
228
P = case P0 of none -> min(L, F); _ -> P0 end,
339
340
fwrite_g(Fl, F, Adj, none, Pad) ->
340
341
fwrite_g(Fl, F, Adj, 6, Pad);
341
fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 0.1 ->
342
fwrite_e(Fl, F, Adj, P, Pad);
343
fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 1.0 ->
344
fwrite_f(Fl, F, Adj, P, Pad);
345
fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 10.0 ->
346
fwrite_f(Fl, F, Adj, P-1, Pad);
347
fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 100.0 ->
348
fwrite_f(Fl, F, Adj, P-2, Pad);
349
fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 1000.0 ->
350
fwrite_f(Fl, F, Adj, P-3, Pad);
351
fwrite_g(Fl, F, Adj, P, Pad) when abs(Fl) < 10000.0 ->
352
fwrite_f(Fl, F, Adj, P-4, Pad);
353
fwrite_g(Fl, F, Adj, P, Pad) ->
354
fwrite_e(Fl, F, Adj, P, Pad).
342
fwrite_g(Fl, F, Adj, P, Pad) when P >= 1 ->
344
E = if A < 1.0e-1 -> -2;
354
fwrite_f(Fl, F, Adj, P-1-E, Pad);
356
fwrite_e(Fl, F, Adj, 2, Pad);
358
fwrite_e(Fl, F, Adj, P, Pad)
362
%% iolist_to_chars(iolist()) -> deep_char_list()
364
iolist_to_chars([C|Cs]) when is_integer(C), C >= $\000, C =< $\377 ->
365
[C | iolist_to_chars(Cs)];
366
iolist_to_chars([I|Cs]) ->
367
[iolist_to_chars(I) | iolist_to_chars(Cs)];
368
iolist_to_chars([]) ->
370
iolist_to_chars(B) when is_binary(B) ->
356
373
%% string(String, Field, Adjust, Precision, PadChar)
358
375
string(S, none, _Adj, none, _Pad) -> S;
359
376
string(S, F, Adj, none, Pad) ->
360
N = lists:flat_length(S),
377
N = lists:flatlength(S),
361
378
if N > F -> flat_trunc(S, F);
363
380
true -> adjust(S, chars(Pad, F-N), Adj)
365
382
string(S, none, _Adj, P, Pad) ->
366
N = lists:flat_length(S),
383
N = lists:flatlength(S),
367
384
if N > P -> flat_trunc(S, P);
369
386
true -> [S|chars(Pad, P-N)]
371
388
string(S, F, Adj, F, Pad) ->
372
389
string(S, none, Adj, F, Pad);
373
390
string(S, F, Adj, P, Pad) when F > P ->
374
N = lists:flat_length(S),
391
N = lists:flatlength(S),
375
392
if N > F -> flat_trunc(S, F);
377
394
N > P -> adjust(flat_trunc(S, P), chars(Pad, F-P), Adj);