-module(yum@yaml@parser@scalar).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/yum/yaml/parser/scalar.gleam").
-export([parse/1, parser/0, block_plain_parser/1]).
-export_type([plain_line/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 plain_line() :: {plain_line, binary(), yum@yaml@node:span()}.
-file("src/yum/yaml/parser/scalar.gleam", 194).
?DOC(false).
-spec normalize_exponent_float(binary()) -> binary().
normalize_exponent_float(Input) ->
case gleam_stdlib:contains_string(Input, <<"."/utf8>>) of
true ->
Input;
false ->
_pipe = Input,
_pipe@1 = gleam@string:replace(_pipe, <<"e"/utf8>>, <<".0e"/utf8>>),
gleam@string:replace(_pipe@1, <<"E"/utf8>>, <<".0E"/utf8>>)
end.
-file("src/yum/yaml/parser/scalar.gleam", 187).
?DOC(false).
-spec parse_float_value(binary()) -> {ok, float()} | {error, nil}.
parse_float_value(Input) ->
case Input of
<<"+"/utf8, Unsigned/binary>> ->
_pipe = Unsigned,
_pipe@1 = normalize_exponent_float(_pipe),
gleam_stdlib:parse_float(_pipe@1);
_ ->
_pipe@2 = Input,
_pipe@3 = normalize_exponent_float(_pipe@2),
gleam_stdlib:parse_float(_pipe@3)
end.
-file("src/yum/yaml/parser/scalar.gleam", 223).
?DOC(false).
-spec has_decimal_digit(binary()) -> boolean().
has_decimal_digit(Input) ->
case Input of
<<""/utf8>> ->
false;
<<"0"/utf8, _/binary>> ->
true;
<<"1"/utf8, _/binary>> ->
true;
<<"2"/utf8, _/binary>> ->
true;
<<"3"/utf8, _/binary>> ->
true;
<<"4"/utf8, _/binary>> ->
true;
<<"5"/utf8, _/binary>> ->
true;
<<"6"/utf8, _/binary>> ->
true;
<<"7"/utf8, _/binary>> ->
true;
<<"8"/utf8, _/binary>> ->
true;
<<"9"/utf8, _/binary>> ->
true;
_ ->
case gleam_stdlib:string_pop_grapheme(Input) of
{ok, {_, Rest}} ->
has_decimal_digit(Rest);
{error, _} ->
false
end
end.
-file("src/yum/yaml/parser/scalar.gleam", 181).
?DOC(false).
-spec looks_like_float(binary()) -> boolean().
looks_like_float(Input) ->
(gleam_stdlib:contains_string(Input, <<"."/utf8>>) orelse gleam_stdlib:contains_string(
Input,
<<"e"/utf8>>
))
orelse gleam_stdlib:contains_string(Input, <<"E"/utf8>>).
-file("src/yum/yaml/parser/scalar.gleam", 170).
?DOC(false).
-spec parse_float(binary()) -> gleam@option:option(yum@yaml@node:kind()).
parse_float(Input) ->
case {looks_like_float(Input), has_decimal_digit(Input)} of
{true, true} ->
_pipe = Input,
_pipe@1 = parse_float_value(_pipe),
_pipe@2 = gleam@option:from_result(_pipe@1),
gleam@option:map(_pipe@2, fun(Field@0) -> {float, Field@0} end);
{_, _} ->
none
end.
-file("src/yum/yaml/parser/scalar.gleam", 212).
?DOC(false).
-spec parse_nan(binary()) -> gleam@option:option(yum@yaml@node:kind()).
parse_nan(Input) ->
case Input of
<<".nan"/utf8>> ->
{some, nan};
<<".NaN"/utf8>> ->
{some, nan};
<<".NAN"/utf8>> ->
{some, nan};
_ ->
none
end.
-file("src/yum/yaml/parser/scalar.gleam", 204).
?DOC(false).
-spec parse_inf(binary()) -> gleam@option:option(yum@yaml@node:kind()).
parse_inf(Input) ->
case Input of
<<".inf"/utf8>> ->
{some, pos_inf};
<<".Inf"/utf8>> ->
{some, pos_inf};
<<".INF"/utf8>> ->
{some, pos_inf};
<<"+.inf"/utf8>> ->
{some, pos_inf};
<<"+.Inf"/utf8>> ->
{some, pos_inf};
<<"+.INF"/utf8>> ->
{some, pos_inf};
<<"-.inf"/utf8>> ->
{some, neg_inf};
<<"-.Inf"/utf8>> ->
{some, neg_inf};
<<"-.INF"/utf8>> ->
{some, neg_inf};
_ ->
none
end.
-file("src/yum/yaml/parser/scalar.gleam", 276).
?DOC(false).
-spec all_hexadecimal_digits(binary()) -> boolean().
all_hexadecimal_digits(Input) ->
case Input of
<<""/utf8>> ->
true;
<<"0"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"1"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"2"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"3"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"4"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"5"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"6"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"7"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"8"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"9"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"a"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"b"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"c"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"d"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"e"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"f"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"A"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"B"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"C"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"D"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"E"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
<<"F"/utf8, Rest/binary>> ->
all_hexadecimal_digits(Rest);
_ ->
false
end.
-file("src/yum/yaml/parser/scalar.gleam", 219).
?DOC(false).
-spec has_digits(binary()) -> boolean().
has_digits(Input) ->
not gleam@string:is_empty(Input).
-file("src/yum/yaml/parser/scalar.gleam", 156).
?DOC(false).
-spec parse_hexadecimal(binary()) -> gleam@option:option(yum@yaml@node:kind()).
parse_hexadecimal(Input) ->
case Input of
<<"0x"/utf8, Digits/binary>> ->
case {has_digits(Digits), all_hexadecimal_digits(Digits)} of
{true, true} ->
_pipe = gleam@int:base_parse(Digits, 16),
_pipe@1 = gleam@option:from_result(_pipe),
gleam@option:map(
_pipe@1,
fun(Field@0) -> {int, Field@0} end
);
{_, _} ->
none
end;
_ ->
none
end.
-file("src/yum/yaml/parser/scalar.gleam", 261).
?DOC(false).
-spec all_octal_digits(binary()) -> boolean().
all_octal_digits(Input) ->
case Input of
<<""/utf8>> ->
true;
<<"0"/utf8, Rest/binary>> ->
all_octal_digits(Rest);
<<"1"/utf8, Rest/binary>> ->
all_octal_digits(Rest);
<<"2"/utf8, Rest/binary>> ->
all_octal_digits(Rest);
<<"3"/utf8, Rest/binary>> ->
all_octal_digits(Rest);
<<"4"/utf8, Rest/binary>> ->
all_octal_digits(Rest);
<<"5"/utf8, Rest/binary>> ->
all_octal_digits(Rest);
<<"6"/utf8, Rest/binary>> ->
all_octal_digits(Rest);
<<"7"/utf8, Rest/binary>> ->
all_octal_digits(Rest);
_ ->
false
end.
-file("src/yum/yaml/parser/scalar.gleam", 142).
?DOC(false).
-spec parse_octal(binary()) -> gleam@option:option(yum@yaml@node:kind()).
parse_octal(Input) ->
case Input of
<<"0o"/utf8, Digits/binary>> ->
case {has_digits(Digits), all_octal_digits(Digits)} of
{true, true} ->
_pipe = gleam@int:base_parse(Digits, 8),
_pipe@1 = gleam@option:from_result(_pipe),
gleam@option:map(
_pipe@1,
fun(Field@0) -> {int, Field@0} end
);
{_, _} ->
none
end;
_ ->
none
end.
-file("src/yum/yaml/parser/scalar.gleam", 244).
?DOC(false).
-spec all_decimal_digits(binary()) -> boolean().
all_decimal_digits(Input) ->
case Input of
<<""/utf8>> ->
true;
<<"0"/utf8, Rest/binary>> ->
all_decimal_digits(Rest);
<<"1"/utf8, Rest/binary>> ->
all_decimal_digits(Rest);
<<"2"/utf8, Rest/binary>> ->
all_decimal_digits(Rest);
<<"3"/utf8, Rest/binary>> ->
all_decimal_digits(Rest);
<<"4"/utf8, Rest/binary>> ->
all_decimal_digits(Rest);
<<"5"/utf8, Rest/binary>> ->
all_decimal_digits(Rest);
<<"6"/utf8, Rest/binary>> ->
all_decimal_digits(Rest);
<<"7"/utf8, Rest/binary>> ->
all_decimal_digits(Rest);
<<"8"/utf8, Rest/binary>> ->
all_decimal_digits(Rest);
<<"9"/utf8, Rest/binary>> ->
all_decimal_digits(Rest);
_ ->
false
end.
-file("src/yum/yaml/parser/scalar.gleam", 130).
?DOC(false).
-spec parse_decimal_int(binary(), fun((integer()) -> integer())) -> gleam@option:option(yum@yaml@node:kind()).
parse_decimal_int(Input, Sign) ->
case {has_digits(Input), all_decimal_digits(Input)} of
{true, true} ->
_pipe = Input,
_pipe@1 = gleam_stdlib:parse_int(_pipe),
_pipe@2 = gleam@result:map(_pipe@1, Sign),
_pipe@3 = gleam@result:map(
_pipe@2,
fun(Field@0) -> {int, Field@0} end
),
gleam@option:from_result(_pipe@3);
{_, _} ->
none
end.
-file("src/yum/yaml/parser/scalar.gleam", 122).
?DOC(false).
-spec parse_int(binary()) -> gleam@option:option(yum@yaml@node:kind()).
parse_int(Input) ->
case Input of
<<"+"/utf8, Digits/binary>> ->
parse_decimal_int(Digits, fun(N) -> N end);
<<"-"/utf8, Digits@1/binary>> ->
parse_decimal_int(Digits@1, fun gleam@int:negate/1);
_ ->
parse_decimal_int(Input, fun(N@1) -> N@1 end)
end.
-file("src/yum/yaml/parser/scalar.gleam", 114).
?DOC(false).
-spec parse_bool(binary()) -> gleam@option:option(yum@yaml@node:kind()).
parse_bool(Input) ->
case Input of
<<"true"/utf8>> ->
{some, {bool, true}};
<<"True"/utf8>> ->
{some, {bool, true}};
<<"TRUE"/utf8>> ->
{some, {bool, true}};
<<"false"/utf8>> ->
{some, {bool, false}};
<<"False"/utf8>> ->
{some, {bool, false}};
<<"FALSE"/utf8>> ->
{some, {bool, false}};
_ ->
none
end.
-file("src/yum/yaml/parser/scalar.gleam", 107).
?DOC(false).
-spec parse_null(binary()) -> gleam@option:option(yum@yaml@node:kind()).
parse_null(Input) ->
case Input of
<<"null"/utf8>> ->
{some, null};
<<"Null"/utf8>> ->
{some, null};
<<"NULL"/utf8>> ->
{some, null};
<<"~"/utf8>> ->
{some, null};
_ ->
none
end.
-file("src/yum/yaml/parser/scalar.gleam", 94).
?DOC(false).
-spec parse(binary()) -> gleam@option:option(yum@yaml@node:kind()).
parse(Value) ->
_pipe = Value,
_pipe@1 = parse_null(_pipe),
_pipe@2 = gleam@option:'or'(_pipe@1, parse_bool(Value)),
_pipe@3 = gleam@option:'or'(_pipe@2, parse_int(Value)),
_pipe@4 = gleam@option:'or'(_pipe@3, parse_octal(Value)),
_pipe@5 = gleam@option:'or'(_pipe@4, parse_hexadecimal(Value)),
_pipe@6 = gleam@option:'or'(_pipe@5, parse_inf(Value)),
_pipe@7 = gleam@option:'or'(_pipe@6, parse_nan(Value)),
_pipe@8 = gleam@option:'or'(_pipe@7, parse_float(Value)),
gleam@option:'or'(_pipe@8, {some, {string, Value}}).
-file("src/yum/yaml/parser/scalar.gleam", 82).
?DOC(false).
-spec parsed_token(yum@yaml@token:token()) -> gleam@option:option({yum@yaml@node:kind(),
yum@yaml@node:style()}).
parsed_token(Tok) ->
case Tok of
{single_quoted_scalar, Value} ->
_pipe = parse(Value),
gleam@option:map(
_pipe,
fun(Kind) -> {Kind, single_quoted_scalar} end
);
{plain_scalar, Value@1} ->
_pipe@1 = parse(Value@1),
gleam@option:map(_pipe@1, fun(Kind@1) -> {Kind@1, plain_scalar} end);
_ ->
none
end.
-file("src/yum/yaml/parser/scalar.gleam", 18).
?DOC(false).
-spec parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
parser() ->
nibble:do(
nibble:take_map(<<"Expected a value"/utf8>>, fun parsed_token/1),
fun(Parsed) ->
nibble:do(
nibble:span(),
fun(Token_span) ->
{Kind, Style} = Parsed,
_pipe = yum@yaml@node:new(
Kind,
yum@yaml@parser@span:from_lexer(Token_span),
Style
),
nibble:return(_pipe)
end
)
end
).
-file("src/yum/yaml/parser/scalar.gleam", 75).
?DOC(false).
-spec enclosing_span(yum@yaml@node:span(), yum@yaml@node:span()) -> yum@yaml@node:span().
enclosing_span(First, Last) ->
{span, Start, _} = First,
{span, _, End} = Last,
{span, Start, End}.
-file("src/yum/yaml/parser/scalar.gleam", 60).
?DOC(false).
-spec plain_line_parser() -> nibble:parser(plain_line(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
plain_line_parser() ->
nibble:do(
nibble:take_map(
<<"Expected a plain scalar"/utf8>>,
fun(Tok) -> case Tok of
{plain_scalar, Value} ->
{some, Value};
_ ->
none
end end
),
fun(Value@1) ->
nibble:do(
nibble:span(),
fun(Token_span) ->
_pipe = {plain_line,
Value@1,
yum@yaml@parser@span:from_lexer(Token_span)},
nibble:return(_pipe)
end
)
end
).
-file("src/yum/yaml/parser/scalar.gleam", 53).
?DOC(false).
-spec plain_continuation_parser(integer()) -> nibble:parser(plain_line(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
plain_continuation_parser(Parent_indent) ->
nibble:do(
yum@yaml@parser@indentation:greater_than_parser(Parent_indent),
fun(_) -> plain_line_parser() end
).
-file("src/yum/yaml/parser/scalar.gleam", 27).
?DOC(false).
-spec block_plain_parser(integer()) -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
block_plain_parser(Parent_indent) ->
nibble:do(
plain_line_parser(),
fun(First) ->
nibble:do(
nibble:many(
nibble:backtrackable(
plain_continuation_parser(Parent_indent)
)
),
fun(Rest) ->
{plain_line, Value, First_span} = First,
Lines = [Value |
gleam@list:map(
Rest,
fun(Line) -> erlang:element(2, Line) end
)],
Last_span = case gleam@list:last(Rest) of
{ok, {plain_line, _, Span}} ->
Span;
{error, _} ->
First_span
end,
Kind = begin
_pipe = Lines,
_pipe@1 = gleam@string:join(_pipe, <<" "/utf8>>),
_pipe@2 = parse(_pipe@1),
gleam@option:unwrap(_pipe@2, {string, <<""/utf8>>})
end,
_pipe@3 = yum@yaml@node:new(
Kind,
enclosing_span(First_span, Last_span),
plain_scalar
),
nibble:return(_pipe@3)
end
)
end
).