-module(tty@resolve_color_level).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/tty/resolve_color_level.gleam").
-export([resolve_color_level/2]).
-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/tty/resolve_color_level.gleam", 75).
?DOC(false).
-spec resolve_ci(fun((binary()) -> {ok, binary()} | {error, nil})) -> integer().
resolve_ci(Env) ->
case Env(<<"CI"/utf8>>) of
{ok, _} ->
1;
{error, _} ->
0
end.
-file("src/tty/resolve_color_level.gleam", 61).
?DOC(false).
-spec resolve_by_term_or_ci(
{ok, binary()} | {error, nil},
fun((binary()) -> {ok, binary()} | {error, nil})
) -> integer().
resolve_by_term_or_ci(Term, Env) ->
case Term of
{ok, Term@1} ->
case gleam_stdlib:contains_string(Term@1, <<"256"/utf8>>) of
true ->
2;
false ->
resolve_ci(Env)
end;
{error, _} ->
resolve_ci(Env)
end.
-file("src/tty/resolve_color_level.gleam", 43).
?DOC(false).
-spec resolve_tty_color(fun((binary()) -> {ok, binary()} | {error, nil})) -> integer().
resolve_tty_color(Env) ->
Term = Env(<<"TERM"/utf8>>),
case Term of
{ok, <<"dumb"/utf8>>} ->
0;
_ ->
case Env(<<"COLORTERM"/utf8>>) of
{ok, Colorterm} ->
case string:lowercase(Colorterm) of
<<"truecolor"/utf8>> ->
3;
<<"24bit"/utf8>> ->
3;
_ ->
resolve_by_term_or_ci(Term, Env)
end;
{error, _} ->
resolve_by_term_or_ci(Term, Env)
end
end.
-file("src/tty/resolve_color_level.gleam", 34).
?DOC(false).
-spec force_color_level(binary()) -> integer().
force_color_level(Value) ->
case string:lowercase(Value) of
<<"0"/utf8>> ->
0;
<<"false"/utf8>> ->
0;
<<"2"/utf8>> ->
2;
<<"3"/utf8>> ->
3;
_ ->
1
end.
-file("src/tty/resolve_color_level.gleam", 20).
?DOC(false).
-spec resolve_forced_or_tty(
boolean(),
fun((binary()) -> {ok, binary()} | {error, nil})
) -> integer().
resolve_forced_or_tty(Is_tty, Env) ->
case Env(<<"FORCE_COLOR"/utf8>>) of
{ok, Value} ->
force_color_level(Value);
{error, _} ->
case Is_tty of
true ->
resolve_tty_color(Env);
false ->
0
end
end.
-file("src/tty/resolve_color_level.gleam", 10).
?DOC(false).
-spec resolve_color_level(
boolean(),
fun((binary()) -> {ok, binary()} | {error, nil})
) -> integer().
resolve_color_level(Is_tty, Env) ->
case Env(<<"NO_COLOR"/utf8>>) of
{ok, Value} when Value =/= <<""/utf8>> ->
0;
_ ->
resolve_forced_or_tty(Is_tty, Env)
end.