Current section

Files

Jump to
gleamgen src gleamgen@internal@render.erl
Raw

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, default_context/0, context_from_config/1, pretty_list/1, body/2, escape_string/1, to_string/1, merge_details_many/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()),
gleamgen@render@report:report()}.
-type context() :: {context, gleamgen@render@config:config(), boolean()}.
-file("src/gleamgen/internal/render.gleam", 17).
?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)),
{report,
lists:append(
erlang:element(2, erlang:element(3, First)),
erlang:element(2, erlang:element(3, Second))
),
lists:append(
erlang:element(3, erlang:element(3, First)),
erlang:element(3, erlang:element(3, Second))
)}}.
-file("src/gleamgen/internal/render.gleam", 38).
?DOC(false).
-spec default_context() -> context().
default_context() ->
{context, {config, true, true, true, false}, true}.
-file("src/gleamgen/internal/render.gleam", 42).
?DOC(false).
-spec context_from_config(gleamgen@render@config:config()) -> context().
context_from_config(Config) ->
{context, Config, true}.
-file("src/gleamgen/internal/render.gleam", 50).
?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", 65).
?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", 86).
?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, {C, Rest@1}} ->
do_escape_string(Rest@1, <<Escaped/binary, C/binary>>);
{error, nil} ->
Escaped
end.
-file("src/gleamgen/internal/render.gleam", 81).
?DOC(false).
-spec escape_string(binary()) -> binary().
escape_string(String) ->
Escaped = do_escape_string(String, <<""/utf8>>),
<<<<"\""/utf8, Escaped/binary>>/binary, "\""/utf8>>.
-file("src/gleamgen/internal/render.gleam", 106).
?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", 98).
?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", 46).
?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", 30).
?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
).