[Click] Args with multiple identical keywords

Eddie Kohler ekohler at gmail.com
Tue Aug 7 22:57:48 EDT 2012


Hi Sascha,

This is a good point. Unfortunately, the different argument order in 
read_all_with was important for hidden reasons, specifically EtherAddressArg 
with an 'unsigned char *' argument. Furthermore the IPAddressArg::parse 
function for vectors actually parses a SINGLE SPACE-SEPARATED argument; it 
doesn't work for multiple arguments.

I checked in a number of changes that should fix this issue. The changes also 
add a new "Args::read_all()" method, which calls a parser once per argument 
and collects the results in a vector.

Hope this is useful.
Eddie


On 8/7/12 7:44 AM, Sascha Alexander Jopen wrote:
> Hello,
>
> while using read_all_with() i found different parse method signatures in
> the parsers AnyArg and IPAddressArg for parsing into Vectors. I propose
> to change the parse() signature of AnyArg for Vectors, as well as the
> parser call in base_read_all_with() to have the same order of the
> arguments as all other parse() methods. This may break existing custom
> parsers, however.
>
> You can find the necessary changes in the attached patch, if you think
> this is a reasonable change.
>
> Regards,
> Sascha
>
>
> On 07/30/12 19:37, Eddie Kohler wrote:
>> Yes, try Args::read_all_with().
>>
>> Eddie
>>
>>
>> On Mon, Jul 30, 2012 at 7:35 AM, Sascha Alexander Jopen
>> <jopen at informatik.uni-bonn.de> wrote:
>>> Hey,
>>>
>>> is it possible to parse argument lists containing the same keyword
>>> multiple times, having each occurence of the keyword values assigned to
>>> another variable?
>>>
>>> For example, would like to parse a configuration like this:
>>>
>>> SomeElement(FIRSTKEYWORD 1, FIRSTKEYWORD 2, ..., SECONDKEYWORD a,
>>> SECONDKEYWORD b, ...);
>>>
>>> Currently only the last value of a keyword group is parsed and returned
>>> as a result after consume() and all additional identical keyword
>>> arguments are removed from the configuration string.
>>>
>>> The only solution i see so far is having a single keyword and
>>> concatenating all values into a single argument to this keyword. This
>>> keyword is then parsed as a string, splitting the string and passing the
>>> parts to additional argument parsers of the right type.
>>>
>>> Does anybody know a better solution, which can directly be handled by
>>> the argument parser?
>>>
>>> Regards,
>>> Sascha
>>> _______________________________________________
>>> click mailing list
>>> click at amsterdam.lcs.mit.edu
>>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>


More information about the click mailing list