-module(chromatic). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([decorate_ansi_raw/2, offset_rainbow/2, rainbow/1, decorate_ansi/2, black/1, red/1, green/1, yellow/1, blue/1, magenta/1, cyan/1, white/1, gray/1, bright_red/1, bright_green/1, bright_yellow/1, bright_blue/1, bright_magenta/1, bright_cyan/1, bright_white/1, bg_black/1, bg_red/1, bg_green/1, bg_yellow/1, bg_blue/1, bg_magenta/1, bg_cyan/1, bg_white/1, bg_gray/1, bg_bright_red/1, bg_bright_green/1, bg_bright_yellow/1, bg_bright_blue/1, bg_bright_magenta/1, bg_bright_cyan/1, bg_bright_white/1, bold/1, italic/1, underline/1, bleed/1, clear_str/0, clear/1]). -spec decorate_ansi_raw(binary(), binary()) -> binary(). decorate_ansi_raw(String, Code) -> <<<<<<"\x{001b}["/utf8, Code/binary>>/binary, "m"/utf8>>/binary, String/binary>>. -spec offset_rainbow(binary(), integer()) -> binary(). offset_rainbow(String, Offset) -> {Str@1, _, _} = begin _pipe = gleam@string:to_graphemes(String), gleam@list:fold( _pipe, {<<""/utf8>>, false, Offset}, fun(Acc, Char) -> {Str, In, Color} = Acc, New_in = case In of true -> Char /= <<"m"/utf8>>; false -> Char =:= <<"\x{001b}"/utf8>> end, Maybe_color = case In orelse New_in of true -> {<>, New_in, Color}; false -> Colored = case Color rem 6 of 0 -> decorate_ansi_raw(Char, <<"31"/utf8>>); 1 -> decorate_ansi_raw(Char, <<"33"/utf8>>); 2 -> decorate_ansi_raw(Char, <<"32"/utf8>>); 3 -> decorate_ansi_raw(Char, <<"36"/utf8>>); 4 -> decorate_ansi_raw(Char, <<"34"/utf8>>); 5 -> decorate_ansi_raw(Char, <<"35"/utf8>>); _ -> <<""/utf8>> end, {<>, New_in, Color + 1} end, Maybe_color end ) end, Str@1. -spec rainbow(binary()) -> binary(). rainbow(String) -> offset_rainbow(String, 0). -spec auto_clear(binary()) -> binary(). auto_clear(String) -> Result = case gleam@string:ends_with(String, <<"\x{001b}[0m"/utf8>>) of true -> String; false -> <> end, Result. -spec decorate_ansi(binary(), binary()) -> binary(). decorate_ansi(String, Code) -> _pipe = decorate_ansi_raw(String, Code), auto_clear(_pipe). -spec black(binary()) -> binary(). black(String) -> decorate_ansi(String, <<"30"/utf8>>). -spec red(binary()) -> binary(). red(String) -> decorate_ansi(String, <<"31"/utf8>>). -spec green(binary()) -> binary(). green(String) -> decorate_ansi(String, <<"32"/utf8>>). -spec yellow(binary()) -> binary(). yellow(String) -> decorate_ansi(String, <<"33"/utf8>>). -spec blue(binary()) -> binary(). blue(String) -> decorate_ansi(String, <<"34"/utf8>>). -spec magenta(binary()) -> binary(). magenta(String) -> decorate_ansi(String, <<"35"/utf8>>). -spec cyan(binary()) -> binary(). cyan(String) -> decorate_ansi(String, <<"36"/utf8>>). -spec white(binary()) -> binary(). white(String) -> decorate_ansi(String, <<"37"/utf8>>). -spec gray(binary()) -> binary(). gray(String) -> decorate_ansi(String, <<"90"/utf8>>). -spec bright_red(binary()) -> binary(). bright_red(String) -> decorate_ansi(String, <<"91"/utf8>>). -spec bright_green(binary()) -> binary(). bright_green(String) -> decorate_ansi(String, <<"92"/utf8>>). -spec bright_yellow(binary()) -> binary(). bright_yellow(String) -> decorate_ansi(String, <<"93"/utf8>>). -spec bright_blue(binary()) -> binary(). bright_blue(String) -> decorate_ansi(String, <<"94"/utf8>>). -spec bright_magenta(binary()) -> binary(). bright_magenta(String) -> decorate_ansi(String, <<"95"/utf8>>). -spec bright_cyan(binary()) -> binary(). bright_cyan(String) -> decorate_ansi(String, <<"96"/utf8>>). -spec bright_white(binary()) -> binary(). bright_white(String) -> decorate_ansi(String, <<"97"/utf8>>). -spec bg_black(binary()) -> binary(). bg_black(String) -> decorate_ansi(String, <<"40"/utf8>>). -spec bg_red(binary()) -> binary(). bg_red(String) -> decorate_ansi(String, <<"41"/utf8>>). -spec bg_green(binary()) -> binary(). bg_green(String) -> decorate_ansi(String, <<"42"/utf8>>). -spec bg_yellow(binary()) -> binary(). bg_yellow(String) -> decorate_ansi(String, <<"43"/utf8>>). -spec bg_blue(binary()) -> binary(). bg_blue(String) -> decorate_ansi(String, <<"44"/utf8>>). -spec bg_magenta(binary()) -> binary(). bg_magenta(String) -> decorate_ansi(String, <<"45"/utf8>>). -spec bg_cyan(binary()) -> binary(). bg_cyan(String) -> decorate_ansi(String, <<"46"/utf8>>). -spec bg_white(binary()) -> binary(). bg_white(String) -> decorate_ansi(String, <<"47"/utf8>>). -spec bg_gray(binary()) -> binary(). bg_gray(String) -> decorate_ansi(String, <<"100"/utf8>>). -spec bg_bright_red(binary()) -> binary(). bg_bright_red(String) -> decorate_ansi(String, <<"101"/utf8>>). -spec bg_bright_green(binary()) -> binary(). bg_bright_green(String) -> decorate_ansi(String, <<"102"/utf8>>). -spec bg_bright_yellow(binary()) -> binary(). bg_bright_yellow(String) -> decorate_ansi(String, <<"103"/utf8>>). -spec bg_bright_blue(binary()) -> binary(). bg_bright_blue(String) -> decorate_ansi(String, <<"104"/utf8>>). -spec bg_bright_magenta(binary()) -> binary(). bg_bright_magenta(String) -> decorate_ansi(String, <<"105"/utf8>>). -spec bg_bright_cyan(binary()) -> binary(). bg_bright_cyan(String) -> decorate_ansi(String, <<"106"/utf8>>). -spec bg_bright_white(binary()) -> binary(). bg_bright_white(String) -> decorate_ansi(String, <<"107"/utf8>>). -spec bold(binary()) -> binary(). bold(String) -> decorate_ansi(String, <<"1"/utf8>>). -spec italic(binary()) -> binary(). italic(String) -> decorate_ansi(String, <<"3"/utf8>>). -spec underline(binary()) -> binary(). underline(String) -> decorate_ansi(String, <<"4"/utf8>>). -spec bleed(binary()) -> binary(). bleed(String) -> Result = case gleam@string:ends_with(String, <<"\x{001b}[0m"/utf8>>) of true -> gleam@string:drop_right( String, gleam@string:length(<<"\x{001b}[0m"/utf8>>) ); false -> String end, Result. -spec clear_str() -> binary(). clear_str() -> <<"\x{001b}[0m"/utf8>>. -spec clear(binary()) -> binary(). clear(String) -> <<"\x{001b}[0m"/utf8, String/binary>>.