-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, read_token_or_quoted_strict/1, ascii_lowercase/1, equals_ci/2]). -export_type([quoted_fault/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 quoted_fault() :: quoted_syntax | quoted_pair_invalid. -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, <>); 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, <>) end; {ok, {Grapheme, Rest@2}} -> read_quoted_loop(Rest@2, <>) 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", 173). ?DOC(false). -spec is_valid_quoted_pair_second_char(binary()) -> boolean(). is_valid_quoted_pair_second_char(Grapheme) -> case Grapheme of <<"\t"/utf8>> -> true; <<" "/utf8>> -> true; <<"\x{0000}"/utf8>> -> false; <<"\x{0001}"/utf8>> -> false; <<"\x{0002}"/utf8>> -> false; <<"\x{0003}"/utf8>> -> false; <<"\x{0004}"/utf8>> -> false; <<"\x{0005}"/utf8>> -> false; <<"\x{0006}"/utf8>> -> false; <<"\x{0007}"/utf8>> -> false; <<"\x{0008}"/utf8>> -> false; <<"\n"/utf8>> -> false; <<"\x{000B}"/utf8>> -> false; <<"\x{000C}"/utf8>> -> false; <<"\r"/utf8>> -> false; <<"\x{000E}"/utf8>> -> false; <<"\x{000F}"/utf8>> -> false; <<"\x{0010}"/utf8>> -> false; <<"\x{0011}"/utf8>> -> false; <<"\x{0012}"/utf8>> -> false; <<"\x{0013}"/utf8>> -> false; <<"\x{0014}"/utf8>> -> false; <<"\x{0015}"/utf8>> -> false; <<"\x{0016}"/utf8>> -> false; <<"\x{0017}"/utf8>> -> false; <<"\x{0018}"/utf8>> -> false; <<"\x{0019}"/utf8>> -> false; <<"\x{001A}"/utf8>> -> false; <<"\x{001B}"/utf8>> -> false; <<"\x{001C}"/utf8>> -> false; <<"\x{001D}"/utf8>> -> false; <<"\x{001E}"/utf8>> -> false; <<"\x{001F}"/utf8>> -> false; <<"\x{007F}"/utf8>> -> false; _ -> true end. -file("src/multipartkit/internal/text.gleam", 146). ?DOC(false). -spec read_quoted_loop_strict(binary(), binary()) -> {ok, {binary(), binary()}} | {error, quoted_fault()}. read_quoted_loop_strict(Input, Acc) -> case gleam_stdlib:string_pop_grapheme(Input) of {error, _} -> {error, quoted_syntax}; {ok, {<<"\""/utf8>>, Rest}} -> {ok, {Acc, Rest}}; {ok, {<<"\\"/utf8>>, Rest@1}} -> case gleam_stdlib:string_pop_grapheme(Rest@1) of {error, _} -> {error, quoted_syntax}; {ok, {Escaped, After}} -> case is_valid_quoted_pair_second_char(Escaped) of true -> read_quoted_loop_strict( After, <> ); false -> {error, quoted_pair_invalid} end end; {ok, {Grapheme, Rest@2}} -> read_quoted_loop_strict(Rest@2, <>) end. -file("src/multipartkit/internal/text.gleam", 137). ?DOC(false). -spec read_quoted_string_strict(binary()) -> {ok, {binary(), binary()}} | {error, quoted_fault()}. read_quoted_string_strict(Input) -> case gleam_stdlib:string_pop_grapheme(Input) of {ok, {<<"\""/utf8>>, Rest}} -> read_quoted_loop_strict(Rest, <<""/utf8>>); _ -> {error, quoted_syntax} end. -file("src/multipartkit/internal/text.gleam", 122). ?DOC(false). -spec read_token_or_quoted_strict(binary()) -> {ok, {binary(), binary()}} | {error, quoted_fault()}. read_token_or_quoted_strict(Input) -> case gleam_stdlib:string_starts_with(Input, <<"\""/utf8>>) of true -> read_quoted_string_strict(Input); false -> {Token, Rest} = read_token(Input), case Token of <<""/utf8>> -> {error, quoted_syntax}; _ -> {ok, {Token, Rest}} end end. -file("src/multipartkit/internal/text.gleam", 222). ?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", 216). ?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", 255). ?DOC(false). -spec equals_ci(binary(), binary()) -> boolean(). equals_ci(A, B) -> ascii_lowercase(A) =:= ascii_lowercase(B).