Current section
Files
Jump to
Current section
Files
src/gleamgen@internal@render.erl
-module(gleamgen@internal@render).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gleamgen/internal/render.gleam").
-export([merge_details/2, merge_details_many/1, default_context/0, context_from_config/1, get_import_from_context/2, add_import_to_details/2, to_string/1, pretty_list/1, body/2, escape_string/1]).
-export_type([rendered/0, rendered_details/0, context/0]).
-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).
-type rendered() :: {render, glam@doc:document(), rendered_details()}.
-type rendered_details() :: {rendered_details,
list(binary()),
list(list(binary())),
gleamgen@render@report:report()}.
-type context() :: {context,
gleamgen@render@config:config(),
list(gleamgen@internal@import_reference:import_reference()),
boolean()}.
-file("src/gleamgen/internal/render.gleam", 27).
?DOC(false).
-spec merge_details(rendered_details(), rendered_details()) -> rendered_details().
merge_details(First, Second) ->
{rendered_details,
lists:append(erlang:element(2, First), erlang:element(2, Second)),
lists:append(erlang:element(3, First), erlang:element(3, Second)),
{report,
lists:append(
erlang:element(2, erlang:element(4, First)),
erlang:element(2, erlang:element(4, Second))
),
lists:append(
erlang:element(3, erlang:element(4, First)),
erlang:element(3, erlang:element(4, Second))
)}}.
-file("src/gleamgen/internal/render.gleam", 44).
?DOC(false).
-spec merge_details_many(list(rendered_details())) -> rendered_details().
merge_details_many(Details) ->
gleam@list:fold(
Details,
{rendered_details, [], [], {report, [], []}},
fun merge_details/2
).
-file("src/gleamgen/internal/render.gleam", 56).
?DOC(false).
-spec default_context() -> context().
default_context() ->
{context, {config, true, true, true, true, false}, [], true}.
-file("src/gleamgen/internal/render.gleam", 64).
?DOC(false).
-spec context_from_config(gleamgen@render@config:config()) -> context().
context_from_config(Config) ->
{context, Config, [], true}.
-file("src/gleamgen/internal/render.gleam", 68).
?DOC(false).
-spec get_import_from_context(
context(),
gleamgen@internal@import_reference:import_reference()
) -> gleamgen@internal@import_reference:import_reference().
get_import_from_context(Context, Module) ->
case erlang:element(4, Module) of
true ->
_pipe = erlang:element(3, Context),
_pipe@1 = lists:reverse(_pipe),
_pipe@2 = gleam@list:find(
_pipe@1,
fun(Reference) ->
erlang:element(2, Reference) =:= erlang:element(2, Module)
end
),
gleam@result:unwrap(_pipe@2, Module);
false ->
Module
end.
-file("src/gleamgen/internal/render.gleam", 84).
?DOC(false).
-spec add_import_to_details(
rendered_details(),
gleamgen@internal@import_reference:import_reference()
) -> rendered_details().
add_import_to_details(Details, Module) ->
Used_imports = [gleamgen@internal@import_reference:get_module_representation(
Module
) |
erlang:element(2, Details)],
case erlang:element(4, Module) of
true ->
{rendered_details,
Used_imports,
[erlang:element(2, Module) | erlang:element(3, Details)],
erlang:element(4, Details)};
false ->
{rendered_details,
Used_imports,
erlang:element(3, Details),
erlang:element(4, Details)}
end.
-file("src/gleamgen/internal/render.gleam", 165).
?DOC(false).
-spec remove_space_newlines(list(binary()), list(binary()), list(binary())) -> list(binary()).
remove_space_newlines(Graphemes, Line_starting_spaces, Acc) ->
case Graphemes of
[<<"\n"/utf8>> | Rest] ->
remove_space_newlines(Rest, [], [<<"\n"/utf8>> | Acc]);
[<<" "/utf8>> = Space | Rest@1] ->
remove_space_newlines(Rest@1, [Space | Line_starting_spaces], Acc);
[<<"\t"/utf8>> = Space | Rest@1] ->
remove_space_newlines(Rest@1, [Space | Line_starting_spaces], Acc);
[First | Rest@2] when Line_starting_spaces =/= [] ->
remove_space_newlines(
Rest@2,
[],
lists:append([First | Line_starting_spaces], Acc)
);
[First@1 | Rest@3] ->
remove_space_newlines(Rest@3, [], [First@1 | Acc]);
[] ->
Acc
end.
-file("src/gleamgen/internal/render.gleam", 157).
?DOC(false).
-spec post_process(binary()) -> binary().
post_process(String) ->
_pipe = String,
_pipe@1 = gleam@string:to_graphemes(_pipe),
_pipe@2 = remove_space_newlines(_pipe@1, [], []),
_pipe@3 = lists:reverse(_pipe@2),
gleam@string:join(_pipe@3, <<""/utf8>>).
-file("src/gleamgen/internal/render.gleam", 102).
?DOC(false).
-spec to_string(rendered()) -> binary().
to_string(To_render) ->
_pipe = erlang:element(2, To_render),
_pipe@1 = glam@doc:to_string(_pipe, 80),
post_process(_pipe@1).
-file("src/gleamgen/internal/render.gleam", 106).
?DOC(false).
-spec pretty_list(list(glam@doc:document())) -> glam@doc:document().
pretty_list(Parameters) ->
Comma = glam@doc:concat(
[glam@doc:from_string(<<","/utf8>>), {break, <<" "/utf8>>, <<""/utf8>>}]
),
Trailing_comma = glam@doc:break(<<""/utf8>>, <<","/utf8>>),
Open_paren = glam@doc:concat(
[glam@doc:from_string(<<"("/utf8>>), {break, <<""/utf8>>, <<""/utf8>>}]
),
Close_paren = glam@doc:concat(
[Trailing_comma, glam@doc:from_string(<<")"/utf8>>)]
),
_pipe = Parameters,
_pipe@1 = glam@doc:join(_pipe, Comma),
_pipe@2 = glam@doc:prepend(_pipe@1, Open_paren),
_pipe@3 = glam@doc:nest(_pipe@2, 2),
_pipe@4 = glam@doc:append(_pipe@3, Close_paren),
glam@doc:group(_pipe@4).
-file("src/gleamgen/internal/render.gleam", 121).
?DOC(false).
-spec body(glam@doc:document(), boolean()) -> glam@doc:document().
body(Inside, Force_break) ->
Between_brackets = case Force_break of
true ->
{line, 1};
false ->
{break, <<" "/utf8>>, <<""/utf8>>}
end,
_pipe = Inside,
_pipe@1 = glam@doc:prepend(
_pipe,
glam@doc:concat([glam@doc:from_string(<<"{"/utf8>>), Between_brackets])
),
_pipe@2 = glam@doc:nest(_pipe@1, 2),
_pipe@3 = glam@doc:append(
_pipe@2,
glam@doc:concat([Between_brackets, glam@doc:from_string(<<"}"/utf8>>)])
),
glam@doc:group(_pipe@3).
-file("src/gleamgen/internal/render.gleam", 142).
?DOC(false).
-spec do_escape_string(binary(), binary()) -> binary().
do_escape_string(Original, Escaped) ->
case gleam_stdlib:string_pop_grapheme(Original) of
{ok, {<<"\""/utf8>>, Rest}} ->
do_escape_string(Rest, <<Escaped/binary, "\\\""/utf8>>);
{ok, {<<"\\"/utf8>>, Rest@1}} ->
do_escape_string(Rest@1, <<Escaped/binary, "\\\\"/utf8>>);
{ok, {C, Rest@2}} ->
do_escape_string(Rest@2, <<Escaped/binary, C/binary>>);
{error, nil} ->
Escaped
end.
-file("src/gleamgen/internal/render.gleam", 137).
?DOC(false).
-spec escape_string(binary()) -> binary().
escape_string(String) ->
Escaped = do_escape_string(String, <<""/utf8>>),
<<<<"\""/utf8, Escaped/binary>>/binary, "\""/utf8>>.