Packages

Sparkline generator for Gleam — Unicode block output for terminals, SVG output for the browser, and PNG byte arrays. Themed colour schemes, anti-aliased PNG, runs on Erlang and JavaScript.

Current section

Files

Jump to
sparklinekit src sparklinekit@internal@scale.erl
Raw

src/sparklinekit@internal@scale.erl

-module(sparklinekit@internal@scale).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/sparklinekit/internal/scale.gleam").
-export([min_max/1, unit/3, round_to_int/1, clamp_int/3]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-file("src/sparklinekit/internal/scale.gleam", 13).
?DOC(false).
-spec min_max(list(float())) -> {float(), float()}.
min_max(Values) ->
case Values of
[] ->
{+0.0, +0.0};
[Head | Rest] ->
gleam@list:fold(
Rest,
{Head, Head},
fun(Acc, Value) ->
{Lo, Hi} = Acc,
New_lo = case Value < Lo of
true ->
Value;
false ->
Lo
end,
New_hi = case Value > Hi of
true ->
Value;
false ->
Hi
end,
{New_lo, New_hi}
end
)
end.
-file("src/sparklinekit/internal/scale.gleam", 38).
?DOC(false).
-spec unit(float(), float(), float()) -> float().
unit(Value, Min, Max) ->
Span = Max - Min,
case Span =< +0.0 of
true ->
0.5;
false ->
case Span of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> (Value - Min) / Gleam@denominator
end
end.
-file("src/sparklinekit/internal/scale.gleam", 51).
?DOC(false).
-spec round_to_int(float()) -> integer().
round_to_int(Value) ->
erlang:round(Value).
-file("src/sparklinekit/internal/scale.gleam", 56).
?DOC(false).
-spec clamp_int(integer(), integer(), integer()) -> integer().
clamp_int(Value, Lo, Hi) ->
case Value < Lo of
true ->
Lo;
false ->
case Value > Hi of
true ->
Hi;
false ->
Value
end
end.