comparison util/argparse.lua @ 13160:4ee9a912ceea

util.argparse: Add support for repeatable parameters These are gathered into arrays
author Kim Alvefur <zash@zash.se>
date Wed, 05 Jan 2022 04:46:27 +0100
parents 766152afc1c9
children d78e0f422464
comparison
equal deleted inserted replaced
13159:706f7d1affc2 13160:4ee9a912ceea
1 local function parse(arg, config) 1 local function parse(arg, config)
2 local short_params = config and config.short_params or {}; 2 local short_params = config and config.short_params or {};
3 local value_params = config and config.value_params or {}; 3 local value_params = config and config.value_params or {};
4 local array_params = config and config.array_params or {};
4 5
5 local parsed_opts = {}; 6 local parsed_opts = {};
6 7
7 if #arg == 0 then 8 if #arg == 0 then
8 return parsed_opts; 9 return parsed_opts;
28 if not param then 29 if not param then
29 return nil, "param-not-found", raw_param; 30 return nil, "param-not-found", raw_param;
30 end 31 end
31 32
32 local param_k, param_v; 33 local param_k, param_v;
33 if value_params[param] then 34 if value_params[param] or array_params[param] then
34 param_k, param_v = param, table.remove(arg, 1); 35 param_k, param_v = param, table.remove(arg, 1);
35 if not param_v then 36 if not param_v then
36 return nil, "missing-value", raw_param; 37 return nil, "missing-value", raw_param;
37 end 38 end
38 else 39 else
44 param_k, param_v = param, true; 45 param_k, param_v = param, true;
45 end 46 end
46 end 47 end
47 param_k = param_k:gsub("%-", "_"); 48 param_k = param_k:gsub("%-", "_");
48 end 49 end
49 parsed_opts[param_k] = param_v; 50 if array_params[param] then
51 if parsed_opts[param_k] then
52 table.insert(parsed_opts[param_k], param_v);
53 else
54 parsed_opts[param_k] = { param_v };
55 end
56 else
57 parsed_opts[param_k] = param_v;
58 end
50 end 59 end
51 for i = 1, #arg do 60 for i = 1, #arg do
52 parsed_opts[i] = arg[i]; 61 parsed_opts[i] = arg[i];
53 end 62 end
54 return parsed_opts; 63 return parsed_opts;