Current section

Files

Jump to
cymbal src cymbal.erl
Raw

src/cymbal.erl

-module(cymbal).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/cymbal.gleam").
-export([bool/1, int/1, float/1, string/1, array/1, block/1, encode/1]).
-export_type([yaml/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.
-opaque yaml() :: {int, integer()} |
{bool, boolean()} |
{float, float()} |
{string, binary()} |
{array, list(yaml())} |
{block, list({binary(), yaml()})}.
-file("src/cymbal.gleam", 30).
?DOC(" Create a YAML document from a bool.\n").
-spec bool(boolean()) -> yaml().
bool(I) ->
{bool, I}.
-file("src/cymbal.gleam", 36).
?DOC(" Create a YAML document from an int.\n").
-spec int(integer()) -> yaml().
int(I) ->
{int, I}.
-file("src/cymbal.gleam", 42).
?DOC(" Create a YAML document from a float.\n").
-spec float(float()) -> yaml().
float(I) ->
{float, I}.
-file("src/cymbal.gleam", 48).
?DOC(" Create a YAML document from a string.\n").
-spec string(binary()) -> yaml().
string(I) ->
{string, I}.
-file("src/cymbal.gleam", 54).
?DOC(" Create a YAML document from a list of YAML documents.\n").
-spec array(list(yaml())) -> yaml().
array(I) ->
{array, I}.
-file("src/cymbal.gleam", 60).
?DOC(" Create a YAML document from a list of named YAML values.\n").
-spec block(list({binary(), yaml()})) -> yaml().
block(I) ->
{block, I}.
-file("src/cymbal.gleam", 125).
-spec indent(binary(), integer()) -> binary().
indent(Acc, I) ->
<<Acc/binary, (gleam@string:repeat(<<" "/utf8>>, I))/binary>>.
-file("src/cymbal.gleam", 156).
-spec is_simple_string_rest(binary()) -> boolean().
is_simple_string_rest(S) ->
case S of
<<""/utf8>> ->
true;
<<"0"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"1"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"2"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"3"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"4"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"5"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"6"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"7"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"8"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"9"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"a"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"b"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"c"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"d"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"e"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"f"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"g"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"h"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"i"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"j"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"k"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"l"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"m"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"n"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"o"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"p"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"q"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"r"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"s"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"t"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"u"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"v"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"w"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"x"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"y"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"z"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"A"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"B"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"C"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"D"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"E"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"F"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"G"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"H"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"I"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"J"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"K"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"L"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"M"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"N"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"O"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"P"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"Q"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"R"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"S"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"T"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"U"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"V"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"W"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"X"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"Y"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"Z"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"_"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
<<"-"/utf8, S@1/binary>> ->
is_simple_string_rest(S@1);
_ ->
false
end.
-file("src/cymbal.gleam", 129).
-spec is_simple_string(binary()) -> boolean().
is_simple_string(S) ->
case S of
<<"yes"/utf8>> ->
false;
<<"no"/utf8>> ->
false;
<<"on"/utf8>> ->
false;
<<"off"/utf8>> ->
false;
<<"0"/utf8, _/binary>> ->
false;
<<"1"/utf8, _/binary>> ->
false;
<<"2"/utf8, _/binary>> ->
false;
<<"3"/utf8, _/binary>> ->
false;
<<"4"/utf8, _/binary>> ->
false;
<<"5"/utf8, _/binary>> ->
false;
<<"6"/utf8, _/binary>> ->
false;
<<"7"/utf8, _/binary>> ->
false;
<<"8"/utf8, _/binary>> ->
false;
<<"9"/utf8, _/binary>> ->
false;
<<"-0"/utf8, _/binary>> ->
false;
<<"-1"/utf8, _/binary>> ->
false;
<<"-2"/utf8, _/binary>> ->
false;
<<"-3"/utf8, _/binary>> ->
false;
<<"-4"/utf8, _/binary>> ->
false;
<<"-5"/utf8, _/binary>> ->
false;
<<"-6"/utf8, _/binary>> ->
false;
<<"-7"/utf8, _/binary>> ->
false;
<<"-8"/utf8, _/binary>> ->
false;
<<"-9"/utf8, _/binary>> ->
false;
_ ->
is_simple_string_rest(S)
end.
-file("src/cymbal.gleam", 234).
-spec en_quoted_string(binary(), binary()) -> binary().
en_quoted_string(Acc, I) ->
<<<<<<Acc/binary, "\""/utf8>>/binary,
(begin
_pipe = I,
_pipe@1 = gleam@string:replace(
_pipe,
<<"\\"/utf8>>,
<<"\\\\"/utf8>>
),
gleam@string:replace(_pipe@1, <<"\""/utf8>>, <<"\\\""/utf8>>)
end)/binary>>/binary,
"\""/utf8>>.
-file("src/cymbal.gleam", 227).
-spec en_string(binary(), binary()) -> binary().
en_string(Acc, I) ->
case is_simple_string(I) of
true ->
<<Acc/binary, I/binary>>;
false ->
en_quoted_string(Acc, I)
end.
-file("src/cymbal.gleam", 76).
-spec en_array(binary(), integer(), list(yaml())) -> binary().
en_array(Acc, In, Docs) ->
case Docs of
[] ->
Acc;
[Doc | Docs@1] ->
Acc@1 = begin
_pipe = Acc,
_pipe@1 = gleam@string:append(_pipe, <<"\n"/utf8>>),
indent(_pipe@1, In)
end,
Acc@2 = case Doc of
{bool, _} ->
en(<<Acc@1/binary, "- "/utf8>>, In + 1, Doc);
{int, _} ->
en(<<Acc@1/binary, "- "/utf8>>, In + 1, Doc);
{float, _} ->
en(<<Acc@1/binary, "- "/utf8>>, In + 1, Doc);
{string, _} ->
en(<<Acc@1/binary, "- "/utf8>>, In + 1, Doc);
{array, _} ->
en(<<Acc@1/binary, "-"/utf8>>, In + 1, Doc);
{block, Docs@2} ->
en_block(<<Acc@1/binary, "- "/utf8>>, In + 1, false, Docs@2)
end,
en_array(Acc@2, In, Docs@1)
end.
-file("src/cymbal.gleam", 94).
-spec en_block(binary(), integer(), boolean(), list({binary(), yaml()})) -> binary().
en_block(Acc, In, Newline, Docs) ->
case Docs of
[] ->
Acc;
[{Name, Doc} | Docs@1] when Newline ->
_pipe = Acc,
_pipe@1 = gleam@string:append(_pipe, <<"\n"/utf8>>),
_pipe@2 = indent(_pipe@1, In),
_pipe@3 = en_string(_pipe@2, Name),
_pipe@4 = block_child(_pipe@3, In, Doc),
en_block(_pipe@4, In, true, Docs@1);
[{Name@1, Doc@1} | Docs@2] ->
_pipe@5 = Acc,
_pipe@6 = en_string(_pipe@5, Name@1),
_pipe@7 = block_child(_pipe@6, In, Doc@1),
en_block(_pipe@7, In, true, Docs@2)
end.
-file("src/cymbal.gleam", 117).
-spec block_child(binary(), integer(), yaml()) -> binary().
block_child(Acc, In, Doc) ->
case Doc of
{bool, _} ->
en(<<Acc/binary, ": "/utf8>>, In, Doc);
{int, _} ->
en(<<Acc/binary, ": "/utf8>>, In, Doc);
{float, _} ->
en(<<Acc/binary, ": "/utf8>>, In, Doc);
{string, _} ->
en(<<Acc/binary, ": "/utf8>>, In, Doc);
{array, _} ->
en(<<Acc/binary, ":"/utf8>>, In, Doc);
{block, I} ->
en_block(<<Acc/binary, ":"/utf8>>, In + 1, true, I)
end.
-file("src/cymbal.gleam", 64).
-spec en(binary(), integer(), yaml()) -> binary().
en(Acc, In, Doc) ->
case Doc of
{bool, true} ->
<<Acc/binary, "true"/utf8>>;
{bool, false} ->
<<Acc/binary, "false"/utf8>>;
{int, I} ->
<<Acc/binary, (gleam@int:to_string(I))/binary>>;
{float, I@1} ->
<<Acc/binary, (gleam@float:to_string(I@1))/binary>>;
{string, I@2} ->
en_string(Acc, I@2);
{array, I@3} ->
en_array(Acc, In, I@3);
{block, I@4} ->
en_block(Acc, In, true, I@4)
end.
-file("src/cymbal.gleam", 19).
?DOC(" Convert a YAML document into a string.\n").
-spec encode(yaml()) -> binary().
encode(Doc) ->
Start = case Doc of
{bool, _} ->
<<"---\n"/utf8>>;
{int, _} ->
<<"---\n"/utf8>>;
{float, _} ->
<<"---\n"/utf8>>;
{string, _} ->
<<"---\n"/utf8>>;
{array, _} ->
<<"---"/utf8>>;
{block, _} ->
<<"---"/utf8>>
end,
<<(en(Start, 0, Doc))/binary, "\n"/utf8>>.