Commit 6a61499847b91eec8c08fa0e558da99dbd5e1cf2

Authored by Göran Krampe
1 parent 4aa613cb

Fix for long opts, various cosmetics.

Showing 2 changed files with 11 additions and 13 deletions
lapp.nim
... ... @@ -130,7 +130,7 @@ proc fail(msg: string) =
130 130 stderr.writeln(progname & ": " & msg)
131 131 quit(usage)
132 132  
133   -proc parseSpec (u: string) =
  133 +proc parseSpec(u: string) =
134 134 var
135 135 L: PLexer
136 136 tok: string
... ... @@ -152,7 +152,7 @@ proc parseSpec (u: string) =
152 152 if tok == "-" or tok == "--": # flag
153 153 if tok == "-": #short flag
154 154 let flag = L.get
155   - if len(flag) != 1: fail("short flag has one character!")
  155 + if len(flag) != 1: fail("short option has one character!")
156 156 tok = L.get
157 157 if tok == ",": # which is alias for long flag
158 158 tok = L.get
... ... @@ -219,7 +219,7 @@ proc closeFiles() {.noconv.} =
219 219 if nfiles == 0: return
220 220 for i in 1..nfiles: files[i].close()
221 221  
222   -proc parseArguments (usage: string, args: seq[string]): Table[string,PValue] =
  222 +proc parseArguments(usage: string, args: seq[string]): Table[string,PValue] =
223 223 var
224 224 vars = initTable[string,PValue]()
225 225 n = len(args) - 1
... ... @@ -231,7 +231,7 @@ proc parseArguments (usage: string, args: seq[string]): Table[string,PValue] =
231 231 flagvalues: seq[seq[string]]
232 232  
233 233 proc next(): string =
234   - if i > n: fail("a flag required a value!")
  234 + if i > n: fail("an option required a value!")
235 235 result = args[i]
236 236 i += 1
237 237  
... ... @@ -242,12 +242,12 @@ proc parseArguments (usage: string, args: seq[string]): Table[string,PValue] =
242 242 if n < 20:
243 243 fail("no such argument: " & $n)
244 244 else:
245   - fail("no such flag " & c)
  245 + fail("no such option: " & c)
246 246  
247 247 proc get_spec(name: string): PSpec =
248 248 result = parm_spec[name]
249 249 if result == nil:
250   - fail("no such flag " & name)
  250 + fail("no such option: " & name)
251 251  
252 252 newSeq(flagvalues, 0)
253 253 parseSpec(usage)
... ... @@ -262,7 +262,7 @@ proc parseArguments (usage: string, args: seq[string]): Table[string,PValue] =
262 262 if short: # all short args are aliases, even if only to themselves
263 263 flag = get_alias(arg[0])
264 264 else:
265   - flag = arg
  265 + flag = arg[1..high(arg)]
266 266 info = get_spec(flag)
267 267 if info.needsValue:
268 268 if short and len(arg) > 1: # value can follow short flag
... ... @@ -291,7 +291,7 @@ proc parseArguments (usage: string, args: seq[string]): Table[string,PValue] =
291 291 for flag,info in parm_spec:
292 292 if not info.used:
293 293 if info.defVal == "": # no default!
294   - fail("required flag missing: " & flag)
  294 + fail("required option or argument missing: " & flag)
295 295 flagvalues.add(@[flag,info.defVal])
296 296  
297 297 # cool, we have the info, can convert known flags
... ... @@ -348,7 +348,7 @@ proc parseArguments (usage: string, args: seq[string]): Table[string,PValue] =
348 348  
349 349 return vars
350 350  
351   -proc parse* (usage: string): Table[string,PValue] =
  351 +proc parse*(usage: string): Table[string,PValue] =
352 352 var
353 353 args: seq[string]
354 354 n = paramCount()
... ... @@ -363,7 +363,7 @@ when isMainModule:
363 363 -n: (default 10) number of lines
364 364 -v,--verbose: (bool...) verbosity level
365 365 -a,--alpha useless parm
366   - <files>: (default stdin...)
  366 + <file>: (default stdin...)
367 367 |<out>: (default stdout)
368 368 """
369 369  
... ...
lapp.nimble
1 1 [Package]
2   -name = "Lapp for Nim"
  2 +name = "lapp"
3 3 version = "0.1"
4 4 author = "Steven Donovan, Göran Krampe"
5 5 description = "Opt parser using synopsis as specification, ported from Lua."
6 6 license = "MIT"
7 7  
8   -bin = "lapp"
9   -
10 8 [Deps]
11 9 Requires: "nimrod >= 0.10"
... ...