Current section

Files

Jump to
multipartkit src multipartkit@internal@text.erl
Raw

src/multipartkit@internal@text.erl

-module(multipartkit@internal@text).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/multipartkit/internal/text.gleam").
-export([skip_ows/1, read_token/1, read_quoted_string/1, read_token_or_quoted/1, ascii_lowercase/1, equals_ci/2]).
-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).
-file("src/multipartkit/internal/text.gleam", 12).
?DOC(false).
-spec skip_ows(binary()) -> binary().
skip_ows(Input) ->
case gleam_stdlib:string_pop_grapheme(Input) of
{ok, {<<" "/utf8>>, Rest}} ->
skip_ows(Rest);
{ok, {<<"\t"/utf8>>, Rest@1}} ->
skip_ows(Rest@1);
_ ->
Input
end.
-file("src/multipartkit/internal/text.gleam", 46).
?DOC(false).
-spec is_alnum(binary()) -> boolean().
is_alnum(Grapheme) ->
case Grapheme of
<<"0"/utf8>> ->
true;
<<"1"/utf8>> ->
true;
<<"2"/utf8>> ->
true;
<<"3"/utf8>> ->
true;
<<"4"/utf8>> ->
true;
<<"5"/utf8>> ->
true;
<<"6"/utf8>> ->
true;
<<"7"/utf8>> ->
true;
<<"8"/utf8>> ->
true;
<<"9"/utf8>> ->
true;
<<"a"/utf8>> ->
true;
<<"b"/utf8>> ->
true;
<<"c"/utf8>> ->
true;
<<"d"/utf8>> ->
true;
<<"e"/utf8>> ->
true;
<<"f"/utf8>> ->
true;
<<"g"/utf8>> ->
true;
<<"h"/utf8>> ->
true;
<<"i"/utf8>> ->
true;
<<"j"/utf8>> ->
true;
<<"k"/utf8>> ->
true;
<<"l"/utf8>> ->
true;
<<"m"/utf8>> ->
true;
<<"n"/utf8>> ->
true;
<<"o"/utf8>> ->
true;
<<"p"/utf8>> ->
true;
<<"q"/utf8>> ->
true;
<<"r"/utf8>> ->
true;
<<"s"/utf8>> ->
true;
<<"t"/utf8>> ->
true;
<<"u"/utf8>> ->
true;
<<"v"/utf8>> ->
true;
<<"w"/utf8>> ->
true;
<<"x"/utf8>> ->
true;
<<"y"/utf8>> ->
true;
<<"z"/utf8>> ->
true;
<<"A"/utf8>> ->
true;
<<"B"/utf8>> ->
true;
<<"C"/utf8>> ->
true;
<<"D"/utf8>> ->
true;
<<"E"/utf8>> ->
true;
<<"F"/utf8>> ->
true;
<<"G"/utf8>> ->
true;
<<"H"/utf8>> ->
true;
<<"I"/utf8>> ->
true;
<<"J"/utf8>> ->
true;
<<"K"/utf8>> ->
true;
<<"L"/utf8>> ->
true;
<<"M"/utf8>> ->
true;
<<"N"/utf8>> ->
true;
<<"O"/utf8>> ->
true;
<<"P"/utf8>> ->
true;
<<"Q"/utf8>> ->
true;
<<"R"/utf8>> ->
true;
<<"S"/utf8>> ->
true;
<<"T"/utf8>> ->
true;
<<"U"/utf8>> ->
true;
<<"V"/utf8>> ->
true;
<<"W"/utf8>> ->
true;
<<"X"/utf8>> ->
true;
<<"Y"/utf8>> ->
true;
<<"Z"/utf8>> ->
true;
_ ->
false
end.
-file("src/multipartkit/internal/text.gleam", 38).
?DOC(false).
-spec is_token_char(binary()) -> boolean().
is_token_char(Grapheme) ->
case Grapheme of
<<"!"/utf8>> ->
true;
<<"#"/utf8>> ->
true;
<<"$"/utf8>> ->
true;
<<"%"/utf8>> ->
true;
<<"&"/utf8>> ->
true;
<<"'"/utf8>> ->
true;
<<"*"/utf8>> ->
true;
<<"+"/utf8>> ->
true;
<<"-"/utf8>> ->
true;
<<"."/utf8>> ->
true;
<<"^"/utf8>> ->
true;
<<"_"/utf8>> ->
true;
<<"`"/utf8>> ->
true;
<<"|"/utf8>> ->
true;
<<"~"/utf8>> ->
true;
Other ->
is_alnum(Other)
end.
-file("src/multipartkit/internal/text.gleam", 27).
?DOC(false).
-spec read_token_loop(binary(), binary()) -> {binary(), binary()}.
read_token_loop(Input, Acc) ->
case gleam_stdlib:string_pop_grapheme(Input) of
{ok, {Grapheme, Rest}} ->
case is_token_char(Grapheme) of
true ->
read_token_loop(Rest, <<Acc/binary, Grapheme/binary>>);
false ->
{Acc, Input}
end;
{error, nil} ->
{Acc, Input}
end.
-file("src/multipartkit/internal/text.gleam", 23).
?DOC(false).
-spec read_token(binary()) -> {binary(), binary()}.
read_token(Input) ->
read_token_loop(Input, <<""/utf8>>).
-file("src/multipartkit/internal/text.gleam", 72).
?DOC(false).
-spec read_quoted_loop(binary(), binary()) -> {ok, {binary(), binary()}} |
{error, nil}.
read_quoted_loop(Input, Acc) ->
case gleam_stdlib:string_pop_grapheme(Input) of
{error, _} ->
{error, nil};
{ok, {<<"\""/utf8>>, Rest}} ->
{ok, {Acc, Rest}};
{ok, {<<"\\"/utf8>>, Rest@1}} ->
case gleam_stdlib:string_pop_grapheme(Rest@1) of
{error, _} ->
{error, nil};
{ok, {Escaped, After}} ->
read_quoted_loop(After, <<Acc/binary, Escaped/binary>>)
end;
{ok, {Grapheme, Rest@2}} ->
read_quoted_loop(Rest@2, <<Acc/binary, Grapheme/binary>>)
end.
-file("src/multipartkit/internal/text.gleam", 65).
?DOC(false).
-spec read_quoted_string(binary()) -> {ok, {binary(), binary()}} | {error, nil}.
read_quoted_string(Input) ->
case gleam_stdlib:string_pop_grapheme(Input) of
{ok, {<<"\""/utf8>>, Rest}} ->
read_quoted_loop(Rest, <<""/utf8>>);
_ ->
{error, nil}
end.
-file("src/multipartkit/internal/text.gleam", 90).
?DOC(false).
-spec read_token_or_quoted(binary()) -> {ok, {binary(), binary()}} |
{error, nil}.
read_token_or_quoted(Input) ->
case gleam_stdlib:string_starts_with(Input, <<"\""/utf8>>) of
true ->
read_quoted_string(Input);
false ->
{Token, Rest} = read_token(Input),
case Token of
<<""/utf8>> ->
{error, nil};
_ ->
{ok, {Token, Rest}}
end
end.
-file("src/multipartkit/internal/text.gleam", 112).
?DOC(false).
-spec fold_grapheme_ascii(binary()) -> binary().
fold_grapheme_ascii(Grapheme) ->
case Grapheme of
<<"A"/utf8>> ->
<<"a"/utf8>>;
<<"B"/utf8>> ->
<<"b"/utf8>>;
<<"C"/utf8>> ->
<<"c"/utf8>>;
<<"D"/utf8>> ->
<<"d"/utf8>>;
<<"E"/utf8>> ->
<<"e"/utf8>>;
<<"F"/utf8>> ->
<<"f"/utf8>>;
<<"G"/utf8>> ->
<<"g"/utf8>>;
<<"H"/utf8>> ->
<<"h"/utf8>>;
<<"I"/utf8>> ->
<<"i"/utf8>>;
<<"J"/utf8>> ->
<<"j"/utf8>>;
<<"K"/utf8>> ->
<<"k"/utf8>>;
<<"L"/utf8>> ->
<<"l"/utf8>>;
<<"M"/utf8>> ->
<<"m"/utf8>>;
<<"N"/utf8>> ->
<<"n"/utf8>>;
<<"O"/utf8>> ->
<<"o"/utf8>>;
<<"P"/utf8>> ->
<<"p"/utf8>>;
<<"Q"/utf8>> ->
<<"q"/utf8>>;
<<"R"/utf8>> ->
<<"r"/utf8>>;
<<"S"/utf8>> ->
<<"s"/utf8>>;
<<"T"/utf8>> ->
<<"t"/utf8>>;
<<"U"/utf8>> ->
<<"u"/utf8>>;
<<"V"/utf8>> ->
<<"v"/utf8>>;
<<"W"/utf8>> ->
<<"w"/utf8>>;
<<"X"/utf8>> ->
<<"x"/utf8>>;
<<"Y"/utf8>> ->
<<"y"/utf8>>;
<<"Z"/utf8>> ->
<<"z"/utf8>>;
Other ->
Other
end.
-file("src/multipartkit/internal/text.gleam", 106).
?DOC(false).
-spec ascii_lowercase(binary()) -> binary().
ascii_lowercase(Input) ->
_pipe = gleam@string:to_graphemes(Input),
_pipe@1 = gleam@list:map(_pipe, fun fold_grapheme_ascii/1),
erlang:list_to_binary(_pipe@1).
-file("src/multipartkit/internal/text.gleam", 145).
?DOC(false).
-spec equals_ci(binary(), binary()) -> boolean().
equals_ci(A, B) ->
ascii_lowercase(A) =:= ascii_lowercase(B).