-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.