-module(gliff@internal@ansi).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gliff/internal/ansi.gleam").
-export([to_ansi/3, to_ansi_inline/1]).
-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/gliff/internal/ansi.gleam", 117).
?DOC(false).
-spec digit_to_string(integer()) -> binary().
digit_to_string(D) ->
case D of
0 ->
<<"0"/utf8>>;
1 ->
<<"1"/utf8>>;
2 ->
<<"2"/utf8>>;
3 ->
<<"3"/utf8>>;
4 ->
<<"4"/utf8>>;
5 ->
<<"5"/utf8>>;
6 ->
<<"6"/utf8>>;
7 ->
<<"7"/utf8>>;
8 ->
<<"8"/utf8>>;
_ ->
<<"9"/utf8>>
end.
-file("src/gliff/internal/ansi.gleam", 110).
?DOC(false).
-spec do_int_to_string(integer()) -> binary().
do_int_to_string(N) ->
case N < 10 of
true ->
digit_to_string(N);
false ->
<<(do_int_to_string(N div 10))/binary,
(digit_to_string(N rem 10))/binary>>
end.
-file("src/gliff/internal/ansi.gleam", 103).
?DOC(false).
-spec int_to_string(integer()) -> binary().
int_to_string(N) ->
case N < 0 of
true ->
<<"-"/utf8, (do_int_to_string(- N))/binary>>;
false ->
do_int_to_string(N)
end.
-file("src/gliff/internal/ansi.gleam", 64).
?DOC(false).
-spec format_edit_ansi(gliff@types:edit()) -> binary().
format_edit_ansi(Edit) ->
case Edit of
{equal, Lines} ->
gleam@string:join(
gleam@list:map(
Lines,
fun(L) -> <<<<" "/utf8, L/binary>>/binary, "\n"/utf8>> end
),
<<""/utf8>>
);
{delete, Lines@1} ->
gleam@string:join(
gleam@list:map(
Lines@1,
fun(L@1) ->
<<<<<<<<"\x{001b}[31m"/utf8, "-"/utf8>>/binary,
L@1/binary>>/binary,
"\x{001b}[0m"/utf8>>/binary,
"\n"/utf8>>
end
),
<<""/utf8>>
);
{insert, Lines@2} ->
gleam@string:join(
gleam@list:map(
Lines@2,
fun(L@2) ->
<<<<<<<<"\x{001b}[32m"/utf8, "+"/utf8>>/binary,
L@2/binary>>/binary,
"\x{001b}[0m"/utf8>>/binary,
"\n"/utf8>>
end
),
<<""/utf8>>
)
end.
-file("src/gliff/internal/ansi.gleam", 46).
?DOC(false).
-spec format_hunk_ansi(gliff@types:hunk()) -> binary().
format_hunk_ansi(Hunk) ->
Header = <<<<<<<<<<<<<<<<<<<<<<"\x{001b}[36m"/utf8, "@@ -"/utf8>>/binary,
(int_to_string(
erlang:element(2, Hunk)
))/binary>>/binary,
","/utf8>>/binary,
(int_to_string(erlang:element(3, Hunk)))/binary>>/binary,
" +"/utf8>>/binary,
(int_to_string(erlang:element(4, Hunk)))/binary>>/binary,
","/utf8>>/binary,
(int_to_string(erlang:element(5, Hunk)))/binary>>/binary,
" @@"/utf8>>/binary,
"\x{001b}[0m"/utf8>>/binary,
"\n"/utf8>>,
Body = gleam@string:join(
gleam@list:map(erlang:element(6, Hunk), fun format_edit_ansi/1),
<<""/utf8>>
),
<<Header/binary, Body/binary>>.
-file("src/gliff/internal/ansi.gleam", 20).
?DOC(false).
-spec to_ansi(list(gliff@types:edit()), binary(), binary()) -> binary().
to_ansi(Edits, Old_name, New_name) ->
Hunks = gliff@internal@unified:edits_to_hunks(Edits, 3),
Header = <<<<<<<<<<<<<<<<<<"\x{001b}[1m"/utf8, "--- "/utf8>>/binary,
Old_name/binary>>/binary,
"\x{001b}[0m"/utf8>>/binary,
"\n"/utf8>>/binary,
"\x{001b}[1m"/utf8>>/binary,
"+++ "/utf8>>/binary,
New_name/binary>>/binary,
"\x{001b}[0m"/utf8>>/binary,
"\n"/utf8>>,
Body = gleam@string:join(
gleam@list:map(Hunks, fun format_hunk_ansi/1),
<<""/utf8>>
),
<<Header/binary, Body/binary>>.
-file("src/gliff/internal/ansi.gleam", 91).
?DOC(false).
-spec format_spans(list(gliff@types:span()), binary()) -> binary().
format_spans(Spans, Base_color) ->
gleam@string:join(gleam@list:map(Spans, fun(Span) -> case Span of
{unchanged, Text} ->
Text;
{changed, Text@1} ->
<<<<<<"\x{001b}[1m"/utf8, Text@1/binary>>/binary,
"\x{001b}[0m"/utf8>>/binary,
Base_color/binary>>
end end), <<""/utf8>>).
-file("src/gliff/internal/ansi.gleam", 80).
?DOC(false).
-spec format_inline_edit(gliff@types:inline_edit()) -> binary().
format_inline_edit(Edit) ->
case Edit of
{inline_equal, Lines} ->
gleam@string:join(
gleam@list:map(
Lines,
fun(L) -> <<<<" "/utf8, L/binary>>/binary, "\n"/utf8>> end
),
<<""/utf8>>
);
{inline_delete, Spans} ->
<<<<<<<<"\x{001b}[31m"/utf8, "-"/utf8>>/binary,
(format_spans(Spans, <<"\x{001b}[31m"/utf8>>))/binary>>/binary,
"\x{001b}[0m"/utf8>>/binary,
"\n"/utf8>>;
{inline_insert, Spans@1} ->
<<<<<<<<"\x{001b}[32m"/utf8, "+"/utf8>>/binary,
(format_spans(Spans@1, <<"\x{001b}[32m"/utf8>>))/binary>>/binary,
"\x{001b}[0m"/utf8>>/binary,
"\n"/utf8>>
end.
-file("src/gliff/internal/ansi.gleam", 41).
?DOC(false).
-spec to_ansi_inline(list(gliff@types:edit())) -> binary().
to_ansi_inline(Edits) ->
Inline_edits = gliff@internal@inline:highlight(Edits),
gleam@string:join(
gleam@list:map(Inline_edits, fun format_inline_edit/1),
<<""/utf8>>
).