From 329b2fa01ef997e2cf723b5beb25c1feb9e74b16 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Fri, 4 Nov 2011 14:37:36 +0100 Subject: Introduce cowboy_http:word/2 Used to parse either a token or a quoted string in parameters values. --- src/cowboy_http.erl | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/src/cowboy_http.erl b/src/cowboy_http.erl index 6d14961..8f2d934 100644 --- a/src/cowboy_http.erl +++ b/src/cowboy_http.erl @@ -1,4 +1,5 @@ %% Copyright (c) 2011, Loïc Hoguin +%% Copyright (c) 2011, Anthony Ramine %% %% Permission to use, copy, modify, and/or distribute this software for any %% purpose with or without fee is hereby granted, provided that the above @@ -106,19 +107,11 @@ media_range_param_value(Data, Fun, Type, SubType, Acc, <<"q">>) -> fun (Rest, Quality) -> accept_ext(Rest, Fun, Type, SubType, Acc, Quality, []) end); -media_range_param_value(Data = << $", _/bits >>, Fun, - Type, SubType, Acc, Attr) -> - quoted_string(Data, +media_range_param_value(Data, Fun, Type, SubType, Acc, Attr) -> + word(Data, fun (Rest, Value) -> media_range_params(Rest, Fun, Type, SubType, [{Attr, Value}|Acc]) - end); -media_range_param_value(Data, Fun, Type, SubType, Acc, Attr) -> - token(Data, - fun (_Rest, <<>>) -> {error, badarg}; - (Rest, Value) -> - media_range_params(Rest, Fun, - Type, SubType, [{Attr, Value}|Acc]) end). -spec accept_ext(binary(), fun(), binary(), binary(), @@ -154,17 +147,9 @@ accept_ext_attr(Data, Fun, Type, SubType, Params, Quality, Acc) -> -spec accept_ext_value(binary(), fun(), binary(), binary(), [{binary(), binary()}], 0..1000, [{binary(), binary()} | binary()], binary()) -> any(). -accept_ext_value(Data = << $", _/bits >>, Fun, - Type, SubType, Params, Quality, Acc, Attr) -> - quoted_string(Data, - fun (Rest, Value) -> - accept_ext(Rest, Fun, - Type, SubType, Params, Quality, [{Attr, Value}|Acc]) - end); accept_ext_value(Data, Fun, Type, SubType, Params, Quality, Acc, Attr) -> - token(Data, - fun (_Rest, <<>>) -> {error, badarg}; - (Rest, Value) -> + word(Data, + fun (Rest, Value) -> accept_ext(Rest, Fun, Type, SubType, Params, Quality, [{Attr, Value}|Acc]) end). @@ -543,6 +528,16 @@ alpha(<< C, Rest/bits >>, Fun, Acc) alpha(Data, Fun, Acc) -> Fun(Data, Acc). +%% @doc Parse either a token or a quoted string. +-spec word(binary(), fun()) -> any(). +word(Data = << $", _/bits >>, Fun) -> + quoted_string(Data, Fun); +word(Data, Fun) -> + token(Data, + fun (_Rest, <<>>) -> {error, badarg}; + (Rest, Token) -> Fun(Rest, Token) + end). + %% @doc Parse a case-insensitive token. %% %% Changes all characters to lowercase. -- cgit v1.2.3