diff options
author | David Walter Seikel | 2014-04-03 10:11:49 +1000 |
---|---|---|
committer | David Walter Seikel | 2014-04-03 10:11:49 +1000 |
commit | b264430370bc697d94505142f15b3a89c1fd65c0 (patch) | |
tree | f5227e14a8bca9257f3733756f8343dae9b256bb /ClientHamr/GuiLua | |
parent | More argument parsing. (diff) | |
download | SledjHamr-b264430370bc697d94505142f15b3a89c1fd65c0.zip SledjHamr-b264430370bc697d94505142f15b3a89c1fd65c0.tar.gz SledjHamr-b264430370bc697d94505142f15b3a89c1fd65c0.tar.bz2 SledjHamr-b264430370bc697d94505142f15b3a89c1fd65c0.tar.xz |
More argument parsing.
Diffstat (limited to '')
-rw-r--r-- | ClientHamr/GuiLua/skang.lua | 123 |
1 files changed, 70 insertions, 53 deletions
diff --git a/ClientHamr/GuiLua/skang.lua b/ClientHamr/GuiLua/skang.lua index 0f1285a..b6ac4e4 100644 --- a/ClientHamr/GuiLua/skang.lua +++ b/ClientHamr/GuiLua/skang.lua | |||
@@ -178,16 +178,11 @@ boolean, value beginning with T, t, F, f, etc is true, otherwise value is false, | |||
178 | next token starts with an introducer, then value is true. | 178 | next token starts with an introducer, then value is true. |
179 | 179 | ||
180 | TODO - Finish supporting all of the above. | 180 | TODO - Finish supporting all of the above. |
181 | -ab - Perhaps check for single character aliases, and if one matches, replace '-ab' with '-b'. | 181 | These all need deeper parsing, but we dunno if they might have been inside quoted strings from the shell. |
182 | If a match is found, and there's letters left, DON'T mark it as used. | 182 | arg=value Shell. |
183 | If it was the last one that was replaced, then check if there's a value after it. | 183 | arg1=value1&arg2=value2 For URLs. |
184 | These all need deeper parsing, but we dunno if they might have been inside quoted strings from the shell. | 184 | arg1=value1|arg2=value2 Can't remember why, probably the old skang multivalue syntax. |
185 | arg=value | 185 | Test it all. |
186 | arg = value | ||
187 | arg1=value1&arg2=value2 | ||
188 | arg1=value1|arg2=value2 | ||
189 | On the other hand, | ||
190 | --arg = value -> --arg value | ||
191 | ]] | 186 | ]] |
192 | 187 | ||
193 | ARGS = {} | 188 | ARGS = {} |
@@ -213,6 +208,51 @@ scanArguments = function (args) | |||
213 | end | 208 | end |
214 | end | 209 | end |
215 | 210 | ||
211 | parseType = function (module, thingy, v, value) | ||
212 | if 'string' == thingy.types[1] then | ||
213 | if value then | ||
214 | module[v[2] ] = value[2] | ||
215 | value[2] = nil -- Mark it as used. | ||
216 | else | ||
217 | print('ERROR - Expected a string value for ' .. thingy.names[1]) | ||
218 | end | ||
219 | end | ||
220 | |||
221 | if 'number' == thingy.types[1] then | ||
222 | if value then | ||
223 | -- If the introducer is '-', then this should be a negative number. | ||
224 | if '-' == value[1] then value[1] = ''; value[2] = '-' .. value[2] end | ||
225 | -- Only parse the next value as a number if it doesn't have an introducer. | ||
226 | if ('' == value[1]) or ('=' == value[1]) then | ||
227 | value[2] = tonumber(value[2]) | ||
228 | if value[2] then | ||
229 | module[v[2] ] = value[2] | ||
230 | value[2] = nil -- Mark it as used. | ||
231 | else | ||
232 | print('ERROR - Expected a number value for ' .. thingy.names[1]) | ||
233 | end | ||
234 | else | ||
235 | module[v[2] ] = module[v[2] ] + 1 | ||
236 | end | ||
237 | else | ||
238 | print('ERROR - Expected a number value for ' .. thingy.names[1]) | ||
239 | end | ||
240 | end | ||
241 | |||
242 | if 'boolean' == thingy.types[1] then | ||
243 | if value then | ||
244 | -- Only parse the next value as a boolean if it doesn't have an introducer. | ||
245 | if ('' == value[1]) or ('=' == value[1]) then | ||
246 | module[v[2] ] = isBoolean(value[2]) | ||
247 | value[2] = nil -- Mark it as used. | ||
248 | else | ||
249 | module[v[2] ] = true | ||
250 | end | ||
251 | else | ||
252 | print('ERROR - Expected a boolean value for ' .. thingy.names[1]) | ||
253 | end | ||
254 | end | ||
255 | end | ||
216 | 256 | ||
217 | -- Restore the environment, and grab paramateres from standard places. | 257 | -- Restore the environment, and grab paramateres from standard places. |
218 | moduleEnd = function (module) | 258 | moduleEnd = function (module) |
@@ -231,53 +271,30 @@ moduleEnd = function (module) | |||
231 | local thingy = metaMum.__self.stuff[v[2] ] | 271 | local thingy = metaMum.__self.stuff[v[2] ] |
232 | -- Did we find one of ours? | 272 | -- Did we find one of ours? |
233 | if thingy then | 273 | if thingy then |
234 | local value = ARGS[i + 1] | 274 | parseType(module, thingy, v, ARGS[i + 1]) |
235 | 275 | v[2] = nil -- Mark it as used. | |
236 | if 'string' == thingy.types[1] then | 276 | else |
237 | if value then | 277 | -- Didn't find one directly, check for single letter matches in '-abc'. |
238 | module[v[2] ] = value[2] | 278 | for k, w in pairs(metaMum.__self.stuff) do |
239 | value[2] = nil -- Mark it as used. | 279 | if 1 == #w.names[1] then |
240 | else | 280 | for j = 1, #v[2] do |
241 | print('ERROR - Expected a string value for ' .. thingy.names[1]) | 281 | if string.sub(v[2], j, 1) == w.names[1] then |
242 | end | 282 | if 1 == j then |
243 | end | 283 | v[2] = string.sub(v[2], 2, -1) |
244 | 284 | if 'boolean' == w.types[1] then module[v[2] ] = true end | |
245 | if 'number' == thingy.types[1] then | 285 | elseif #v[2] == j then |
246 | if value then | 286 | v[2] = string.sub(v[2], 1, j - 1) |
247 | -- If the introducer is '-', then this should be a negative number. | 287 | -- The one at the end is the only one that could have a following value. |
248 | if '-' == value[1] then value[1] = ''; value[2] = '-' .. value[2] end | 288 | parseType(module, w, v, ARGS[i + 1]) |
249 | -- Only parse the next value as a number if it doesn't have an introducer. | 289 | else |
250 | if ('' == value[1]) or ('=' == value[1]) then | 290 | v[2] = string.sub(v[2], 1, j - 1) .. string.sub(v[2], j + 1, -1) |
251 | value[2] = tonumber(value[2]) | 291 | if 'boolean' == w.types[1] then module[v[2] ] = true end |
252 | if value[2] then | 292 | end |
253 | module[v[2] ] = value[2] | 293 | if '' == v[2] then v[2] = nil end -- Mark it as used. |
254 | value[2] = nil -- Mark it as used. | ||
255 | else | ||
256 | print('ERROR - Expected a number value for ' .. thingy.names[1]) | ||
257 | end | 294 | end |
258 | else | ||
259 | module[v[2] ] = module[v[2] ] + 1 | ||
260 | end | 295 | end |
261 | else | ||
262 | print('ERROR - Expected a number value for ' .. thingy.names[1]) | ||
263 | end | 296 | end |
264 | end | 297 | end |
265 | |||
266 | if 'boolean' == thingy.types[1] then | ||
267 | if value then | ||
268 | -- Only parse the next value as a boolean if it doesn't have an introducer. | ||
269 | if ('' == value[1]) or ('=' == value[1]) then | ||
270 | module[v[2] ] = isBoolean(value[2]) | ||
271 | value[2] = nil -- Mark it as used. | ||
272 | else | ||
273 | module[v[2] ] = true | ||
274 | end | ||
275 | else | ||
276 | print('ERROR - Expected a boolean value for ' .. thingy.names[1]) | ||
277 | end | ||
278 | end | ||
279 | |||
280 | v[2] = nil -- Mark it as used. | ||
281 | end | 298 | end |
282 | end | 299 | end |
283 | end | 300 | end |