Skip to main content

src/tty@resolve_color_level.erl

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