|
@@ -58,11 +58,11 @@ list(Data, Fun) ->
|
|
list(Data, Fun, Acc) ->
|
|
list(Data, Fun, Acc) ->
|
|
whitespace(Data,
|
|
whitespace(Data,
|
|
fun (<<>>) -> Acc;
|
|
fun (<<>>) -> Acc;
|
|
- (<< $,, Rest/bits >>) -> list(Rest, Fun, Acc);
|
|
|
|
|
|
+ (<< $,, Rest/binary >>) -> list(Rest, Fun, Acc);
|
|
(Rest) -> Fun(Rest,
|
|
(Rest) -> Fun(Rest,
|
|
fun (D, I) -> whitespace(D,
|
|
fun (D, I) -> whitespace(D,
|
|
fun (<<>>) -> [I|Acc];
|
|
fun (<<>>) -> [I|Acc];
|
|
- (<< $,, R/bits >>) -> list(R, Fun, [I|Acc]);
|
|
|
|
|
|
+ (<< $,, R/binary >>) -> list(R, Fun, [I|Acc]);
|
|
(_Any) -> {error, badarg}
|
|
(_Any) -> {error, badarg}
|
|
end)
|
|
end)
|
|
end)
|
|
end)
|
|
@@ -81,7 +81,7 @@ content_type(Data) ->
|
|
-> any().
|
|
-> any().
|
|
content_type_params(Data, Fun, Acc) ->
|
|
content_type_params(Data, Fun, Acc) ->
|
|
whitespace(Data,
|
|
whitespace(Data,
|
|
- fun (<< $;, Rest/bits >>) -> content_type_param(Rest, Fun, Acc);
|
|
|
|
|
|
+ fun (<< $;, Rest/binary >>) -> content_type_param(Rest, Fun, Acc);
|
|
(<<>>) -> Fun(lists:reverse(Acc));
|
|
(<<>>) -> Fun(lists:reverse(Acc));
|
|
(_Rest) -> {error, badarg}
|
|
(_Rest) -> {error, badarg}
|
|
end).
|
|
end).
|
|
@@ -93,7 +93,7 @@ content_type_param(Data, Fun, Acc) ->
|
|
fun (Rest) ->
|
|
fun (Rest) ->
|
|
token_ci(Rest,
|
|
token_ci(Rest,
|
|
fun (_Rest2, <<>>) -> {error, badarg};
|
|
fun (_Rest2, <<>>) -> {error, badarg};
|
|
- (<< $=, Rest2/bits >>, Attr) ->
|
|
|
|
|
|
+ (<< $=, Rest2/binary >>, Attr) ->
|
|
word(Rest2,
|
|
word(Rest2,
|
|
fun (Rest3, Value) ->
|
|
fun (Rest3, Value) ->
|
|
content_type_params(Rest3, Fun,
|
|
content_type_params(Rest3, Fun,
|
|
@@ -115,7 +115,7 @@ media_range(Data, Fun) ->
|
|
[{binary(), binary()}]) -> any().
|
|
[{binary(), binary()}]) -> any().
|
|
media_range_params(Data, Fun, Type, SubType, Acc) ->
|
|
media_range_params(Data, Fun, Type, SubType, Acc) ->
|
|
whitespace(Data,
|
|
whitespace(Data,
|
|
- fun (<< $;, Rest/bits >>) ->
|
|
|
|
|
|
+ fun (<< $;, Rest/binary >>) ->
|
|
whitespace(Rest,
|
|
whitespace(Rest,
|
|
fun (Rest2) ->
|
|
fun (Rest2) ->
|
|
media_range_param_attr(Rest2, Fun, Type, SubType, Acc)
|
|
media_range_param_attr(Rest2, Fun, Type, SubType, Acc)
|
|
@@ -128,7 +128,7 @@ media_range_params(Data, Fun, Type, SubType, Acc) ->
|
|
media_range_param_attr(Data, Fun, Type, SubType, Acc) ->
|
|
media_range_param_attr(Data, Fun, Type, SubType, Acc) ->
|
|
token_ci(Data,
|
|
token_ci(Data,
|
|
fun (_Rest, <<>>) -> {error, badarg};
|
|
fun (_Rest, <<>>) -> {error, badarg};
|
|
- (<< $=, Rest/bits >>, Attr) ->
|
|
|
|
|
|
+ (<< $=, Rest/binary >>, Attr) ->
|
|
media_range_param_value(Rest, Fun, Type, SubType, Acc, Attr)
|
|
media_range_param_value(Rest, Fun, Type, SubType, Acc, Attr)
|
|
end).
|
|
end).
|
|
|
|
|
|
@@ -151,7 +151,7 @@ media_range_param_value(Data, Fun, Type, SubType, Acc, Attr) ->
|
|
media_type(Data, Fun) ->
|
|
media_type(Data, Fun) ->
|
|
token_ci(Data,
|
|
token_ci(Data,
|
|
fun (_Rest, <<>>) -> {error, badarg};
|
|
fun (_Rest, <<>>) -> {error, badarg};
|
|
- (<< $/, Rest/bits >>, Type) ->
|
|
|
|
|
|
+ (<< $/, Rest/binary >>, Type) ->
|
|
token_ci(Rest,
|
|
token_ci(Rest,
|
|
fun (_Rest2, <<>>) -> {error, badarg};
|
|
fun (_Rest2, <<>>) -> {error, badarg};
|
|
(Rest2, SubType) -> Fun(Rest2, Type, SubType)
|
|
(Rest2, SubType) -> Fun(Rest2, Type, SubType)
|
|
@@ -164,7 +164,7 @@ media_type(Data, Fun) ->
|
|
[{binary(), binary()} | binary()]) -> any().
|
|
[{binary(), binary()} | binary()]) -> any().
|
|
accept_ext(Data, Fun, Type, SubType, Params, Quality, Acc) ->
|
|
accept_ext(Data, Fun, Type, SubType, Params, Quality, Acc) ->
|
|
whitespace(Data,
|
|
whitespace(Data,
|
|
- fun (<< $;, Rest/bits >>) ->
|
|
|
|
|
|
+ fun (<< $;, Rest/binary >>) ->
|
|
whitespace(Rest,
|
|
whitespace(Rest,
|
|
fun (Rest2) ->
|
|
fun (Rest2) ->
|
|
accept_ext_attr(Rest2, Fun,
|
|
accept_ext_attr(Rest2, Fun,
|
|
@@ -181,7 +181,7 @@ accept_ext(Data, Fun, Type, SubType, Params, Quality, Acc) ->
|
|
accept_ext_attr(Data, Fun, Type, SubType, Params, Quality, Acc) ->
|
|
accept_ext_attr(Data, Fun, Type, SubType, Params, Quality, Acc) ->
|
|
token_ci(Data,
|
|
token_ci(Data,
|
|
fun (_Rest, <<>>) -> {error, badarg};
|
|
fun (_Rest, <<>>) -> {error, badarg};
|
|
- (<< $=, Rest/bits >>, Attr) ->
|
|
|
|
|
|
+ (<< $=, Rest/binary >>, Attr) ->
|
|
accept_ext_value(Rest, Fun, Type, SubType, Params,
|
|
accept_ext_value(Rest, Fun, Type, SubType, Params,
|
|
Quality, Acc, Attr);
|
|
Quality, Acc, Attr);
|
|
(Rest, Attr) ->
|
|
(Rest, Attr) ->
|
|
@@ -214,7 +214,7 @@ conneg(Data, Fun) ->
|
|
|
|
|
|
%% @doc Parse a language range, followed by an optional quality value.
|
|
%% @doc Parse a language range, followed by an optional quality value.
|
|
-spec language_range(binary(), fun()) -> any().
|
|
-spec language_range(binary(), fun()) -> any().
|
|
-language_range(<< $*, Rest/bits >>, Fun) ->
|
|
|
|
|
|
+language_range(<< $*, Rest/binary >>, Fun) ->
|
|
language_range_ret(Rest, Fun, '*');
|
|
language_range_ret(Rest, Fun, '*');
|
|
language_range(Data, Fun) ->
|
|
language_range(Data, Fun) ->
|
|
language_tag(Data,
|
|
language_tag(Data,
|
|
@@ -234,7 +234,7 @@ language_tag(Data, Fun) ->
|
|
alpha(Data,
|
|
alpha(Data,
|
|
fun (_Rest, Tag) when byte_size(Tag) =:= 0; byte_size(Tag) > 8 ->
|
|
fun (_Rest, Tag) when byte_size(Tag) =:= 0; byte_size(Tag) > 8 ->
|
|
{error, badarg};
|
|
{error, badarg};
|
|
- (<< $-, Rest/bits >>, Tag) ->
|
|
|
|
|
|
+ (<< $-, Rest/binary >>, Tag) ->
|
|
language_subtag(Rest, Fun, Tag, []);
|
|
language_subtag(Rest, Fun, Tag, []);
|
|
(Rest, Tag) ->
|
|
(Rest, Tag) ->
|
|
Fun(Rest, Tag)
|
|
Fun(Rest, Tag)
|
|
@@ -245,7 +245,7 @@ language_subtag(Data, Fun, Tag, Acc) ->
|
|
alpha(Data,
|
|
alpha(Data,
|
|
fun (_Rest, SubTag) when byte_size(SubTag) =:= 0;
|
|
fun (_Rest, SubTag) when byte_size(SubTag) =:= 0;
|
|
byte_size(SubTag) > 8 -> {error, badarg};
|
|
byte_size(SubTag) > 8 -> {error, badarg};
|
|
- (<< $-, Rest/bits >>, SubTag) ->
|
|
|
|
|
|
+ (<< $-, Rest/binary >>, SubTag) ->
|
|
language_subtag(Rest, Fun, Tag, [SubTag|Acc]);
|
|
language_subtag(Rest, Fun, Tag, [SubTag|Acc]);
|
|
(Rest, SubTag) ->
|
|
(Rest, SubTag) ->
|
|
%% Rebuild the full tag now that we know it's correct
|
|
%% Rebuild the full tag now that we know it's correct
|
|
@@ -256,7 +256,7 @@ language_subtag(Data, Fun, Tag, Acc) ->
|
|
-spec maybe_qparam(binary(), fun()) -> any().
|
|
-spec maybe_qparam(binary(), fun()) -> any().
|
|
maybe_qparam(Data, Fun) ->
|
|
maybe_qparam(Data, Fun) ->
|
|
whitespace(Data,
|
|
whitespace(Data,
|
|
- fun (<< $;, Rest/bits >>) ->
|
|
|
|
|
|
+ fun (<< $;, Rest/binary >>) ->
|
|
whitespace(Rest,
|
|
whitespace(Rest,
|
|
fun (Rest2) ->
|
|
fun (Rest2) ->
|
|
qparam(Rest2, Fun)
|
|
qparam(Rest2, Fun)
|
|
@@ -267,12 +267,12 @@ maybe_qparam(Data, Fun) ->
|
|
|
|
|
|
%% @doc Parse a quality parameter string (for example q=0.500).
|
|
%% @doc Parse a quality parameter string (for example q=0.500).
|
|
-spec qparam(binary(), fun()) -> any().
|
|
-spec qparam(binary(), fun()) -> any().
|
|
-qparam(<< Q, $=, Data/bits >>, Fun) when Q =:= $q; Q =:= $Q ->
|
|
|
|
|
|
+qparam(<< Q, $=, Data/binary >>, Fun) when Q =:= $q; Q =:= $Q ->
|
|
qvalue(Data, Fun).
|
|
qvalue(Data, Fun).
|
|
|
|
|
|
%% @doc Parse either a list of entity tags or a "*".
|
|
%% @doc Parse either a list of entity tags or a "*".
|
|
-spec entity_tag_match(binary()) -> any().
|
|
-spec entity_tag_match(binary()) -> any().
|
|
-entity_tag_match(<< $*, Rest/bits >>) ->
|
|
|
|
|
|
+entity_tag_match(<< $*, Rest/binary >>) ->
|
|
whitespace(Rest,
|
|
whitespace(Rest,
|
|
fun (<<>>) -> '*';
|
|
fun (<<>>) -> '*';
|
|
(_Any) -> {error, badarg}
|
|
(_Any) -> {error, badarg}
|
|
@@ -282,7 +282,7 @@ entity_tag_match(Data) ->
|
|
|
|
|
|
%% @doc Parse an entity-tag.
|
|
%% @doc Parse an entity-tag.
|
|
-spec entity_tag(binary(), fun()) -> any().
|
|
-spec entity_tag(binary(), fun()) -> any().
|
|
-entity_tag(<< "W/", Rest/bits >>, Fun) ->
|
|
|
|
|
|
+entity_tag(<< "W/", Rest/binary >>, Fun) ->
|
|
opaque_tag(Rest, Fun, weak);
|
|
opaque_tag(Rest, Fun, weak);
|
|
entity_tag(Data, Fun) ->
|
|
entity_tag(Data, Fun) ->
|
|
opaque_tag(Data, Fun, strong).
|
|
opaque_tag(Data, Fun, strong).
|
|
@@ -323,11 +323,11 @@ http_date(Data) ->
|
|
-spec rfc1123_date(binary()) -> any().
|
|
-spec rfc1123_date(binary()) -> any().
|
|
rfc1123_date(Data) ->
|
|
rfc1123_date(Data) ->
|
|
wkday(Data,
|
|
wkday(Data,
|
|
- fun (<< ", ", Rest/bits >>, _WkDay) ->
|
|
|
|
|
|
+ fun (<< ", ", Rest/binary >>, _WkDay) ->
|
|
date1(Rest,
|
|
date1(Rest,
|
|
- fun (<< " ", Rest2/bits >>, Date) ->
|
|
|
|
|
|
+ fun (<< " ", Rest2/binary >>, Date) ->
|
|
time(Rest2,
|
|
time(Rest2,
|
|
- fun (<< " GMT", Rest3/bits >>, Time) ->
|
|
|
|
|
|
+ fun (<< " GMT", Rest3/binary >>, Time) ->
|
|
http_date_ret(Rest3, {Date, Time});
|
|
http_date_ret(Rest3, {Date, Time});
|
|
(_Any, _Time) ->
|
|
(_Any, _Time) ->
|
|
{error, badarg}
|
|
{error, badarg}
|
|
@@ -347,11 +347,11 @@ rfc1123_date(Data) ->
|
|
%% in the past (this helps solve the "year 2000" problem).
|
|
%% in the past (this helps solve the "year 2000" problem).
|
|
rfc850_date(Data) ->
|
|
rfc850_date(Data) ->
|
|
weekday(Data,
|
|
weekday(Data,
|
|
- fun (<< ", ", Rest/bits >>, _WeekDay) ->
|
|
|
|
|
|
+ fun (<< ", ", Rest/binary >>, _WeekDay) ->
|
|
date2(Rest,
|
|
date2(Rest,
|
|
- fun (<< " ", Rest2/bits >>, Date) ->
|
|
|
|
|
|
+ fun (<< " ", Rest2/binary >>, Date) ->
|
|
time(Rest2,
|
|
time(Rest2,
|
|
- fun (<< " GMT", Rest3/bits >>, Time) ->
|
|
|
|
|
|
+ fun (<< " GMT", Rest3/binary >>, Time) ->
|
|
http_date_ret(Rest3, {Date, Time});
|
|
http_date_ret(Rest3, {Date, Time});
|
|
(_Any, _Time) ->
|
|
(_Any, _Time) ->
|
|
{error, badarg}
|
|
{error, badarg}
|
|
@@ -367,11 +367,11 @@ rfc850_date(Data) ->
|
|
-spec asctime_date(binary()) -> any().
|
|
-spec asctime_date(binary()) -> any().
|
|
asctime_date(Data) ->
|
|
asctime_date(Data) ->
|
|
wkday(Data,
|
|
wkday(Data,
|
|
- fun (<< " ", Rest/bits >>, _WkDay) ->
|
|
|
|
|
|
+ fun (<< " ", Rest/binary >>, _WkDay) ->
|
|
date3(Rest,
|
|
date3(Rest,
|
|
- fun (<< " ", Rest2/bits >>, PartialDate) ->
|
|
|
|
|
|
+ fun (<< " ", Rest2/binary >>, PartialDate) ->
|
|
time(Rest2,
|
|
time(Rest2,
|
|
- fun (<< " ", Rest3/bits >>, Time) ->
|
|
|
|
|
|
+ fun (<< " ", Rest3/binary >>, Time) ->
|
|
asctime_year(Rest3,
|
|
asctime_year(Rest3,
|
|
PartialDate, Time);
|
|
PartialDate, Time);
|
|
(_Any, _Time) ->
|
|
(_Any, _Time) ->
|
|
@@ -385,7 +385,7 @@ asctime_date(Data) ->
|
|
end).
|
|
end).
|
|
|
|
|
|
-spec asctime_year(binary(), tuple(), tuple()) -> any().
|
|
-spec asctime_year(binary(), tuple(), tuple()) -> any().
|
|
-asctime_year(<< Y1, Y2, Y3, Y4, Rest/bits >>, {Month, Day}, Time)
|
|
|
|
|
|
+asctime_year(<< Y1, Y2, Y3, Y4, Rest/binary >>, {Month, Day}, Time)
|
|
when Y1 >= $0, Y1 =< $9, Y2 >= $0, Y2 =< $9,
|
|
when Y1 >= $0, Y1 =< $9, Y2 >= $0, Y2 =< $9,
|
|
Y3 >= $0, Y3 =< $9, Y4 >= $0, Y4 =< $9 ->
|
|
Y3 >= $0, Y3 =< $9, Y4 >= $0, Y4 =< $9 ->
|
|
Year = (Y1 - $0) * 1000 + (Y2 - $0) * 100 + (Y3 - $0) * 10 + (Y4 - $0),
|
|
Year = (Y1 - $0) * 1000 + (Y2 - $0) * 100 + (Y3 - $0) * 10 + (Y4 - $0),
|
|
@@ -405,7 +405,7 @@ http_date_ret(Data, DateTime = {Date, _Time}) ->
|
|
|
|
|
|
%% We never use it, pretty much just checks the wkday is right.
|
|
%% We never use it, pretty much just checks the wkday is right.
|
|
-spec wkday(binary(), fun()) -> any().
|
|
-spec wkday(binary(), fun()) -> any().
|
|
-wkday(<< WkDay:3/binary, Rest/bits >>, Fun)
|
|
|
|
|
|
+wkday(<< WkDay:3/binary, Rest/binary >>, Fun)
|
|
when WkDay =:= <<"Mon">>; WkDay =:= <<"Tue">>; WkDay =:= <<"Wed">>;
|
|
when WkDay =:= <<"Mon">>; WkDay =:= <<"Tue">>; WkDay =:= <<"Wed">>;
|
|
WkDay =:= <<"Thu">>; WkDay =:= <<"Fri">>; WkDay =:= <<"Sat">>;
|
|
WkDay =:= <<"Thu">>; WkDay =:= <<"Fri">>; WkDay =:= <<"Sat">>;
|
|
WkDay =:= <<"Sun">> ->
|
|
WkDay =:= <<"Sun">> ->
|
|
@@ -433,7 +433,7 @@ weekday(_Any, _Fun) ->
|
|
{error, badarg}.
|
|
{error, badarg}.
|
|
|
|
|
|
-spec date1(binary(), fun()) -> any().
|
|
-spec date1(binary(), fun()) -> any().
|
|
-date1(<< D1, D2, " ", M:3/binary, " ", Y1, Y2, Y3, Y4, Rest/bits >>, Fun)
|
|
|
|
|
|
+date1(<< D1, D2, " ", M:3/binary, " ", Y1, Y2, Y3, Y4, Rest/binary >>, Fun)
|
|
when D1 >= $0, D1 =< $9, D2 >= $0, D2 =< $9,
|
|
when D1 >= $0, D1 =< $9, D2 >= $0, D2 =< $9,
|
|
Y1 >= $0, Y1 =< $9, Y2 >= $0, Y2 =< $9,
|
|
Y1 >= $0, Y1 =< $9, Y2 >= $0, Y2 =< $9,
|
|
Y3 >= $0, Y3 =< $9, Y4 >= $0, Y4 =< $9 ->
|
|
Y3 >= $0, Y3 =< $9, Y4 >= $0, Y4 =< $9 ->
|
|
@@ -451,7 +451,7 @@ date1(_Data, _Fun) ->
|
|
{error, badarg}.
|
|
{error, badarg}.
|
|
|
|
|
|
-spec date2(binary(), fun()) -> any().
|
|
-spec date2(binary(), fun()) -> any().
|
|
-date2(<< D1, D2, "-", M:3/binary, "-", Y1, Y2, Rest/bits >>, Fun)
|
|
|
|
|
|
+date2(<< D1, D2, "-", M:3/binary, "-", Y1, Y2, Rest/binary >>, Fun)
|
|
when D1 >= $0, D1 =< $9, D2 >= $0, D2 =< $9,
|
|
when D1 >= $0, D1 =< $9, D2 >= $0, D2 =< $9,
|
|
Y1 >= $0, Y1 =< $9, Y2 >= $0, Y2 =< $9 ->
|
|
Y1 >= $0, Y1 =< $9, Y2 >= $0, Y2 =< $9 ->
|
|
case month(M) of
|
|
case month(M) of
|
|
@@ -473,7 +473,7 @@ date2(_Data, _Fun) ->
|
|
{error, badarg}.
|
|
{error, badarg}.
|
|
|
|
|
|
-spec date3(binary(), fun()) -> any().
|
|
-spec date3(binary(), fun()) -> any().
|
|
-date3(<< M:3/binary, " ", D1, D2, Rest/bits >>, Fun)
|
|
|
|
|
|
+date3(<< M:3/binary, " ", D1, D2, Rest/binary >>, Fun)
|
|
when (D1 >= $0 andalso D1 =< $3) orelse D1 =:= $\s,
|
|
when (D1 >= $0 andalso D1 =< $3) orelse D1 =:= $\s,
|
|
D2 >= $0, D2 =< $9 ->
|
|
D2 >= $0, D2 =< $9 ->
|
|
case month(M) of
|
|
case month(M) of
|
|
@@ -505,7 +505,7 @@ month(<<"Dec">>) -> 12;
|
|
month(_Any) -> {error, badarg}.
|
|
month(_Any) -> {error, badarg}.
|
|
|
|
|
|
-spec time(binary(), fun()) -> any().
|
|
-spec time(binary(), fun()) -> any().
|
|
-time(<< H1, H2, ":", M1, M2, ":", S1, S2, Rest/bits >>, Fun)
|
|
|
|
|
|
+time(<< H1, H2, ":", M1, M2, ":", S1, S2, Rest/binary >>, Fun)
|
|
when H1 >= $0, H1 =< $2, H2 >= $0, H2 =< $9,
|
|
when H1 >= $0, H1 =< $2, H2 >= $0, H2 =< $9,
|
|
M1 >= $0, M1 =< $5, M2 >= $0, M2 =< $9,
|
|
M1 >= $0, M1 =< $5, M2 >= $0, M2 =< $9,
|
|
S1 >= $0, S1 =< $5, S2 >= $0, S2 =< $9 ->
|
|
S1 >= $0, S1 =< $5, S2 >= $0, S2 =< $9 ->
|
|
@@ -524,7 +524,7 @@ time(<< H1, H2, ":", M1, M2, ":", S1, S2, Rest/bits >>, Fun)
|
|
|
|
|
|
%% @doc Skip whitespace.
|
|
%% @doc Skip whitespace.
|
|
-spec whitespace(binary(), fun()) -> any().
|
|
-spec whitespace(binary(), fun()) -> any().
|
|
-whitespace(<< C, Rest/bits >>, Fun)
|
|
|
|
|
|
+whitespace(<< C, Rest/binary >>, Fun)
|
|
when C =:= $\s; C =:= $\t ->
|
|
when C =:= $\s; C =:= $\t ->
|
|
whitespace(Rest, Fun);
|
|
whitespace(Rest, Fun);
|
|
whitespace(Data, Fun) ->
|
|
whitespace(Data, Fun) ->
|
|
@@ -544,14 +544,14 @@ digits(Data) ->
|
|
end).
|
|
end).
|
|
|
|
|
|
-spec digits(binary(), fun()) -> any().
|
|
-spec digits(binary(), fun()) -> any().
|
|
-digits(<< C, Rest/bits >>, Fun)
|
|
|
|
|
|
+digits(<< C, Rest/binary >>, Fun)
|
|
when C >= $0, C =< $9 ->
|
|
when C >= $0, C =< $9 ->
|
|
digits(Rest, Fun, C - $0);
|
|
digits(Rest, Fun, C - $0);
|
|
digits(_Data, _Fun) ->
|
|
digits(_Data, _Fun) ->
|
|
{error, badarg}.
|
|
{error, badarg}.
|
|
|
|
|
|
-spec digits(binary(), fun(), non_neg_integer()) -> any().
|
|
-spec digits(binary(), fun(), non_neg_integer()) -> any().
|
|
-digits(<< C, Rest/bits >>, Fun, Acc)
|
|
|
|
|
|
+digits(<< C, Rest/binary >>, Fun, Acc)
|
|
when C >= $0, C =< $9 ->
|
|
when C >= $0, C =< $9 ->
|
|
digits(Rest, Fun, Acc * 10 + (C - $0));
|
|
digits(Rest, Fun, Acc * 10 + (C - $0));
|
|
digits(Data, Fun, Acc) ->
|
|
digits(Data, Fun, Acc) ->
|
|
@@ -567,7 +567,7 @@ alpha(Data, Fun) ->
|
|
-spec alpha(binary(), fun(), binary()) -> any().
|
|
-spec alpha(binary(), fun(), binary()) -> any().
|
|
alpha(<<>>, Fun, Acc) ->
|
|
alpha(<<>>, Fun, Acc) ->
|
|
Fun(<<>>, Acc);
|
|
Fun(<<>>, Acc);
|
|
-alpha(<< C, Rest/bits >>, Fun, Acc)
|
|
|
|
|
|
+alpha(<< C, Rest/binary >>, Fun, Acc)
|
|
when C >= $a andalso C =< $z;
|
|
when C >= $a andalso C =< $z;
|
|
C >= $A andalso C =< $Z ->
|
|
C >= $A andalso C =< $Z ->
|
|
C2 = cowboy_bstr:char_to_lower(C),
|
|
C2 = cowboy_bstr:char_to_lower(C),
|
|
@@ -577,7 +577,7 @@ alpha(Data, Fun, Acc) ->
|
|
|
|
|
|
%% @doc Parse either a token or a quoted string.
|
|
%% @doc Parse either a token or a quoted string.
|
|
-spec word(binary(), fun()) -> any().
|
|
-spec word(binary(), fun()) -> any().
|
|
-word(Data = << $", _/bits >>, Fun) ->
|
|
|
|
|
|
+word(Data = << $", _/binary >>, Fun) ->
|
|
quoted_string(Data, Fun);
|
|
quoted_string(Data, Fun);
|
|
word(Data, Fun) ->
|
|
word(Data, Fun) ->
|
|
token(Data,
|
|
token(Data,
|
|
@@ -600,47 +600,47 @@ token(Data, Fun) ->
|
|
-spec token(binary(), fun(), ci | cs, binary()) -> any().
|
|
-spec token(binary(), fun(), ci | cs, binary()) -> any().
|
|
token(<<>>, Fun, _Case, Acc) ->
|
|
token(<<>>, Fun, _Case, Acc) ->
|
|
Fun(<<>>, Acc);
|
|
Fun(<<>>, Acc);
|
|
-token(Data = << C, _Rest/bits >>, Fun, _Case, Acc)
|
|
|
|
|
|
+token(Data = << C, _Rest/binary >>, Fun, _Case, Acc)
|
|
when C =:= $(; C =:= $); C =:= $<; C =:= $>; C =:= $@;
|
|
when C =:= $(; C =:= $); C =:= $<; C =:= $>; C =:= $@;
|
|
C =:= $,; C =:= $;; C =:= $:; C =:= $\\; C =:= $";
|
|
C =:= $,; C =:= $;; C =:= $:; C =:= $\\; C =:= $";
|
|
C =:= $/; C =:= $[; C =:= $]; C =:= $?; C =:= $=;
|
|
C =:= $/; C =:= $[; C =:= $]; C =:= $?; C =:= $=;
|
|
C =:= ${; C =:= $}; C =:= $\s; C =:= $\t;
|
|
C =:= ${; C =:= $}; C =:= $\s; C =:= $\t;
|
|
C < 32; C =:= 127 ->
|
|
C < 32; C =:= 127 ->
|
|
Fun(Data, Acc);
|
|
Fun(Data, Acc);
|
|
-token(<< C, Rest/bits >>, Fun, Case = ci, Acc) ->
|
|
|
|
|
|
+token(<< C, Rest/binary >>, Fun, Case = ci, Acc) ->
|
|
C2 = cowboy_bstr:char_to_lower(C),
|
|
C2 = cowboy_bstr:char_to_lower(C),
|
|
token(Rest, Fun, Case, << Acc/binary, C2 >>);
|
|
token(Rest, Fun, Case, << Acc/binary, C2 >>);
|
|
-token(<< C, Rest/bits >>, Fun, Case, Acc) ->
|
|
|
|
|
|
+token(<< C, Rest/binary >>, Fun, Case, Acc) ->
|
|
token(Rest, Fun, Case, << Acc/binary, C >>).
|
|
token(Rest, Fun, Case, << Acc/binary, C >>).
|
|
|
|
|
|
%% @doc Parse a quoted string.
|
|
%% @doc Parse a quoted string.
|
|
-spec quoted_string(binary(), fun()) -> any().
|
|
-spec quoted_string(binary(), fun()) -> any().
|
|
-quoted_string(<< $", Rest/bits >>, Fun) ->
|
|
|
|
|
|
+quoted_string(<< $", Rest/binary >>, Fun) ->
|
|
quoted_string(Rest, Fun, <<>>).
|
|
quoted_string(Rest, Fun, <<>>).
|
|
|
|
|
|
-spec quoted_string(binary(), fun(), binary()) -> any().
|
|
-spec quoted_string(binary(), fun(), binary()) -> any().
|
|
quoted_string(<<>>, _Fun, _Acc) ->
|
|
quoted_string(<<>>, _Fun, _Acc) ->
|
|
{error, badarg};
|
|
{error, badarg};
|
|
-quoted_string(<< $", Rest/bits >>, Fun, Acc) ->
|
|
|
|
|
|
+quoted_string(<< $", Rest/binary >>, Fun, Acc) ->
|
|
Fun(Rest, Acc);
|
|
Fun(Rest, Acc);
|
|
-quoted_string(<< $\\, C, Rest/bits >>, Fun, Acc) ->
|
|
|
|
|
|
+quoted_string(<< $\\, C, Rest/binary >>, Fun, Acc) ->
|
|
quoted_string(Rest, Fun, << Acc/binary, C >>);
|
|
quoted_string(Rest, Fun, << Acc/binary, C >>);
|
|
-quoted_string(<< C, Rest/bits >>, Fun, Acc) ->
|
|
|
|
|
|
+quoted_string(<< C, Rest/binary >>, Fun, Acc) ->
|
|
quoted_string(Rest, Fun, << Acc/binary, C >>).
|
|
quoted_string(Rest, Fun, << Acc/binary, C >>).
|
|
|
|
|
|
%% @doc Parse a quality value.
|
|
%% @doc Parse a quality value.
|
|
-spec qvalue(binary(), fun()) -> any().
|
|
-spec qvalue(binary(), fun()) -> any().
|
|
-qvalue(<< $0, $., Rest/bits >>, Fun) ->
|
|
|
|
|
|
+qvalue(<< $0, $., Rest/binary >>, Fun) ->
|
|
qvalue(Rest, Fun, 0, 100);
|
|
qvalue(Rest, Fun, 0, 100);
|
|
-qvalue(<< $0, Rest/bits >>, Fun) ->
|
|
|
|
|
|
+qvalue(<< $0, Rest/binary >>, Fun) ->
|
|
Fun(Rest, 0);
|
|
Fun(Rest, 0);
|
|
-qvalue(<< $1, $., $0, $0, $0, Rest/bits >>, Fun) ->
|
|
|
|
|
|
+qvalue(<< $1, $., $0, $0, $0, Rest/binary >>, Fun) ->
|
|
Fun(Rest, 1000);
|
|
Fun(Rest, 1000);
|
|
-qvalue(<< $1, $., $0, $0, Rest/bits >>, Fun) ->
|
|
|
|
|
|
+qvalue(<< $1, $., $0, $0, Rest/binary >>, Fun) ->
|
|
Fun(Rest, 1000);
|
|
Fun(Rest, 1000);
|
|
-qvalue(<< $1, $., $0, Rest/bits >>, Fun) ->
|
|
|
|
|
|
+qvalue(<< $1, $., $0, Rest/binary >>, Fun) ->
|
|
Fun(Rest, 1000);
|
|
Fun(Rest, 1000);
|
|
-qvalue(<< $1, Rest/bits >>, Fun) ->
|
|
|
|
|
|
+qvalue(<< $1, Rest/binary >>, Fun) ->
|
|
Fun(Rest, 1000);
|
|
Fun(Rest, 1000);
|
|
qvalue(_Data, _Fun) ->
|
|
qvalue(_Data, _Fun) ->
|
|
{error, badarg}.
|
|
{error, badarg}.
|
|
@@ -648,7 +648,7 @@ qvalue(_Data, _Fun) ->
|
|
-spec qvalue(binary(), fun(), integer(), 1 | 10 | 100) -> any().
|
|
-spec qvalue(binary(), fun(), integer(), 1 | 10 | 100) -> any().
|
|
qvalue(Data, Fun, Q, 0) ->
|
|
qvalue(Data, Fun, Q, 0) ->
|
|
Fun(Data, Q);
|
|
Fun(Data, Q);
|
|
-qvalue(<< C, Rest/bits >>, Fun, Q, M)
|
|
|
|
|
|
+qvalue(<< C, Rest/binary >>, Fun, Q, M)
|
|
when C >= $0, C =< $9 ->
|
|
when C >= $0, C =< $9 ->
|
|
qvalue(Rest, Fun, Q + (C - $0) * M, M div 10);
|
|
qvalue(Rest, Fun, Q + (C - $0) * M, M div 10);
|
|
qvalue(Data, Fun, Q, _M) ->
|
|
qvalue(Data, Fun, Q, _M) ->
|