-module(gleeam_code@internal@erlang_convert).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gleeam_code/internal/erlang_convert.gleam").
-export([convert/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/gleeam_code/internal/erlang_convert.gleam", 58).
?DOC(false).
-spec is_module_directive(binary()) -> boolean().
is_module_directive(Line) ->
gleam_stdlib:string_starts_with(Line, <<"-module("/utf8>>).
-file("src/gleeam_code/internal/erlang_convert.gleam", 62).
?DOC(false).
-spec is_compile_directive(binary()) -> boolean().
is_compile_directive(Line) ->
gleam_stdlib:string_starts_with(Line, <<"-compile("/utf8>>).
-file("src/gleeam_code/internal/erlang_convert.gleam", 66).
?DOC(false).
-spec is_define_directive(binary()) -> boolean().
is_define_directive(Line) ->
gleam_stdlib:string_starts_with(Line, <<"-define("/utf8>>).
-file("src/gleeam_code/internal/erlang_convert.gleam", 70).
?DOC(false).
-spec is_export_directive(binary()) -> boolean().
is_export_directive(Line) ->
gleam_stdlib:string_starts_with(Line, <<"-export("/utf8>>).
-file("src/gleeam_code/internal/erlang_convert.gleam", 74).
?DOC(false).
-spec is_file_directive(binary()) -> boolean().
is_file_directive(Line) ->
gleam_stdlib:string_starts_with(Line, <<"-file("/utf8>>).
-file("src/gleeam_code/internal/erlang_convert.gleam", 78).
?DOC(false).
-spec is_if_directive(binary()) -> boolean().
is_if_directive(Line) ->
gleam_stdlib:string_starts_with(Line, <<"-if("/utf8>>).
-file("src/gleeam_code/internal/erlang_convert.gleam", 82).
?DOC(false).
-spec is_else_endif(binary()) -> boolean().
is_else_endif(Line) ->
(Line =:= <<"-else."/utf8>>) orelse (Line =:= <<"-endif."/utf8>>).
-file("src/gleeam_code/internal/erlang_convert.gleam", 92).
?DOC(false).
-spec is_moduledoc_content(binary()) -> boolean().
is_moduledoc_content(Line) ->
Trimmed = gleam@string:trim_start(Line),
(gleam_stdlib:string_starts_with(Trimmed, <<"\""/utf8>>) andalso gleam_stdlib:string_ends_with(
Trimmed,
<<"\""/utf8>>
))
orelse (Trimmed =:= <<")."/utf8>>).
-file("src/gleeam_code/internal/erlang_convert.gleam", 86).
?DOC(false).
-spec is_moduledoc_call(binary()) -> boolean().
is_moduledoc_call(Line) ->
(gleam_stdlib:string_starts_with(Line, <<"?MODULEDOC("/utf8>>) orelse gleam_stdlib:string_starts_with(
Line,
<<"?DOC("/utf8>>
))
orelse is_moduledoc_content(Line).
-file("src/gleeam_code/internal/erlang_convert.gleam", 46).
?DOC(false).
-spec is_directive_line(binary()) -> boolean().
is_directive_line(Line) ->
Trimmed = gleam@string:trim_start(Line),
((((((is_module_directive(Trimmed) orelse is_compile_directive(Trimmed))
orelse is_define_directive(Trimmed))
orelse is_export_directive(Trimmed))
orelse is_file_directive(Trimmed))
orelse is_if_directive(Trimmed))
orelse is_else_endif(Trimmed))
orelse is_moduledoc_call(Trimmed).
-file("src/gleeam_code/internal/erlang_convert.gleam", 99).
?DOC(false).
-spec drop_leading_empty(list(binary())) -> list(binary()).
drop_leading_empty(Lines) ->
case Lines of
[<<""/utf8>> | Rest] ->
drop_leading_empty(Rest);
_ ->
Lines
end.
-file("src/gleeam_code/internal/erlang_convert.gleam", 30).
?DOC(false).
-spec skip_spec_continuation(list(binary()), list(binary())) -> list(binary()).
skip_spec_continuation(Lines, Acc) ->
case Lines of
[] ->
lists:reverse(Acc);
[Line | Rest] ->
Trimmed = gleam@string:trim(Line),
case gleam_stdlib:string_ends_with(Trimmed, <<"."/utf8>>) of
true ->
drop_spec_blocks(Rest, Acc);
false ->
skip_spec_continuation(Rest, Acc)
end
end.
-file("src/gleeam_code/internal/erlang_convert.gleam", 15).
?DOC(false).
-spec drop_spec_blocks(list(binary()), list(binary())) -> list(binary()).
drop_spec_blocks(Lines, Acc) ->
case Lines of
[] ->
lists:reverse(Acc);
[Line | Rest] ->
case gleam_stdlib:string_starts_with(
gleam@string:trim_start(Line),
<<"-spec "/utf8>>
) of
true ->
case gleam_stdlib:string_ends_with(
gleam@string:trim(Line),
<<"."/utf8>>
) of
true ->
drop_spec_blocks(Rest, Acc);
false ->
skip_spec_continuation(Rest, Acc)
end;
false ->
drop_spec_blocks(Rest, [Line | Acc])
end
end.
-file("src/gleeam_code/internal/erlang_convert.gleam", 4).
?DOC(false).
-spec convert(binary()) -> binary().
convert(Erl_source) ->
_pipe = Erl_source,
_pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
_pipe@2 = drop_spec_blocks(_pipe@1, []),
_pipe@3 = gleam@list:filter(
_pipe@2,
fun(Line) -> not is_directive_line(Line) end
),
_pipe@4 = drop_leading_empty(_pipe@3),
_pipe@5 = gleam@string:join(_pipe@4, <<"\n"/utf8>>),
_pipe@6 = gleam@string:trim_end(_pipe@5),
(fun(S) -> <<S/binary, "\n"/utf8>> end)(_pipe@6).