Current section
Files
Jump to
Current section
Files
src/examples@info_string.erl
-module(examples@info_string).
-compile(no_auto_import).
-export([language_parser/0, info_string_parser/0, get_language/1, is_eval/1, parse/1]).
-export_type([flag/0, named/0, argument/0, eval_info_string/0]).
-type flag() :: {flag, binary()}.
-type named() :: {named, binary(), binary()}.
-type argument() :: {argument_flag, flag()} | {argument_named, named()}.
-type eval_info_string() :: {eval_info_string,
binary(),
list(flag()),
list(named())}.
-spec whitespace_surrounded() -> fun((fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), MIG)} |
{error, parser_gleam@parse_result:parse_error(binary())})) -> fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), MIG)} |
{error, parser_gleam@parse_result:parse_error(binary())})).
whitespace_surrounded() ->
parser_gleam@parser:surrounded_by(parser_gleam@string:spaces()).
-spec double_dash() -> fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), binary())} |
{error, parser_gleam@parse_result:parse_error(binary())}).
double_dash() ->
parser_gleam@string:string(<<"--"/utf8>>).
-spec equals() -> fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), binary())} |
{error, parser_gleam@parse_result:parse_error(binary())}).
equals() ->
parser_gleam@char:char(<<"="/utf8>>).
-spec identifier() -> fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), binary())} |
{error, parser_gleam@parse_result:parse_error(binary())}).
identifier() ->
parser_gleam@char:many1(parser_gleam@char:alphanum()).
-spec flag() -> fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), flag())} |
{error, parser_gleam@parse_result:parse_error(binary())}).
flag() ->
_pipe = double_dash(),
_pipe@1 = parser_gleam@parser:chain(_pipe, fun(_) -> identifier() end),
parser_gleam@parser:map(_pipe@1, fun(A) -> {flag, A} end).
-spec named() -> fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), named())} |
{error, parser_gleam@parse_result:parse_error(binary())}).
named() ->
_pipe = double_dash(),
_pipe@1 = parser_gleam@parser:chain(
_pipe,
fun(_) -> parser_gleam@parser:sep_by1(equals(), identifier()) end
),
parser_gleam@parser:chain(
_pipe@1,
fun(Nea) ->
Lst = begin
_pipe@2 = Nea,
fp_gl@non_empty_list:to_list(_pipe@2)
end,
case begin
_pipe@3 = Lst,
gleam@list:length(_pipe@3)
end of
2 ->
[Name, Value] = Lst,
case gleam@string:length(Value) of
0 ->
parser_gleam@parser:fail();
_@1 ->
parser_gleam@parser:'of'({named, Name, Value})
end;
_@2 ->
parser_gleam@parser:fail()
end
end
).
-spec argument() -> fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), argument())} |
{error, parser_gleam@parse_result:parse_error(binary())}).
argument() ->
parser_gleam@parser:either(
begin
_pipe = named(),
parser_gleam@parser:map(_pipe, fun(A) -> {argument_named, A} end)
end,
fun() ->
_pipe@1 = flag(),
parser_gleam@parser:map(_pipe@1, fun(A) -> {argument_flag, A} end)
end
).
-spec language_parser() -> fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), gleam@option:option(binary()))} |
{error, parser_gleam@parse_result:parse_error(binary())}).
language_parser() ->
_pipe@1 = parser_gleam@parser:many_till(
parser_gleam@parser:item(),
parser_gleam@parser:look_ahead(
parser_gleam@parser:either(
parser_gleam@string:string(<<" "/utf8>>),
fun() ->
_pipe = parser_gleam@parser:eof(),
parser_gleam@parser:map(_pipe, fun(_) -> <<""/utf8>> end)
end
)
)
),
_pipe@3 = parser_gleam@parser:map(
_pipe@1,
fun(Str) ->
_pipe@2 = Str,
gleam@string:join(_pipe@2, <<""/utf8>>)
end
),
parser_gleam@parser:map(_pipe@3, fun(It) -> case gleam@string:length(It) of
0 ->
none;
_@1 ->
{some, It}
end end).
-spec eval_parser() -> fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), {binary(),
binary()})} |
{error, parser_gleam@parse_result:parse_error(binary())}).
eval_parser() ->
_pipe = language_parser(),
_pipe@1 = parser_gleam@parser:chain(_pipe, fun(Lang) -> case Lang of
none ->
parser_gleam@parser:fail();
{some, It} ->
parser_gleam@parser:'of'(It)
end end),
_pipe@2 = parser_gleam@parser:chain_first(
_pipe@1,
fun(_) -> parser_gleam@string:string(<<" "/utf8>>) end
),
parser_gleam@parser:chain(
_pipe@2,
fun(Language) ->
_pipe@3 = parser_gleam@string:string(<<"eval"/utf8>>),
parser_gleam@parser:chain(
_pipe@3,
fun(Eval_str) ->
parser_gleam@parser:'of'({Language, Eval_str})
end
)
end
).
-spec info_string_parser() -> fun((parser_gleam@stream:stream(binary())) -> {ok,
parser_gleam@parse_result:parse_success(binary(), eval_info_string())} |
{error, parser_gleam@parse_result:parse_error(binary())}).
info_string_parser() ->
_pipe = eval_parser(),
parser_gleam@parser:chain(
_pipe,
fun(Eval) ->
_pipe@1 = argument(),
_pipe@2 = (whitespace_surrounded())(_pipe@1),
_pipe@3 = parser_gleam@parser:many(_pipe@2),
parser_gleam@parser:map(
_pipe@3,
fun(Args) ->
{Lang, _@1} = Eval,
_pipe@4 = Args,
gleam@list:fold(
_pipe@4,
{eval_info_string, Lang, [], []},
fun(P, C) -> case C of
{argument_flag, F} ->
{eval_info_string,
erlang:element(2, P),
gleam@list:append(
[F],
erlang:element(3, P)
),
erlang:element(4, P)};
{argument_named, N} ->
{eval_info_string,
erlang:element(2, P),
erlang:element(3, P),
gleam@list:append(
[N],
erlang:element(4, P)
)}
end end
)
end
)
end
).
-spec get_language(binary()) -> gleam@option:option(binary()).
get_language(Info_string) ->
case begin
_pipe = language_parser(),
(parser_gleam@string:run(Info_string))(_pipe)
end of
{error, _@1} ->
none;
{ok, It} ->
erlang:element(2, It)
end.
-spec is_eval(binary()) -> boolean().
is_eval(Info_string) ->
case begin
_pipe = eval_parser(),
(parser_gleam@string:run(Info_string))(_pipe)
end of
{error, _@1} ->
false;
{ok, _@2} ->
true
end.
-spec parse(binary()) -> {ok,
parser_gleam@parse_result:parse_success(binary(), eval_info_string())} |
{error, parser_gleam@parse_result:parse_error(binary())}.
parse(Info_string) ->
_pipe = info_string_parser(),
(parser_gleam@string:run(Info_string))(_pipe).