This module provides the standard Nim command line parser. It supports one convenience iterator over all command line options and some lower-level features.
Supported syntax:
-abcd
, where a, b, c, d are names--foo:bar
, --foo=bar
or --foo
CmdLineKind = enum cmdEnd, ## end of command line reached cmdArgument, ## argument detected cmdLongOption, ## a long option ``--option`` detected cmdShortOption ## a short option ``-c`` detected
OptParser = object of RootObj cmd: string pos: int inShortState: bool kind*: CmdLineKind ## the dected command line token key*, val*: TaintedString ## key and value pair; ``key`` is the option ## or the argument, ``value`` is not "" if ## the option was given a value
proc initOptParser(cmdline = ""): OptParser {.raises: [], tags: [ReadIOEffect].}
cmdline == ""
, the real command line (as provided by the OS
module) is taken. proc next(p: var OptParser) {.gcsafe, extern: "npo$1", raises: [], tags: [].}
p.kind
describes what token has been parsed. p.key
and p.val
are set accordingly. proc cmdLineRest(p: OptParser): TaintedString {.gcsafe, extern: "npo$1", raises: [], tags: [].}
iterator getopt(p: var OptParser): tuple[kind: CmdLineKind, key, val: TaintedString] {. raises: [], tags: [].}
var p = initOptParser("--left --debug:3 -l=4 -r:2") for kind, key, val in p.getopt(): case kind of cmdArgument: filename = key of cmdLongOption, cmdShortOption: case key of "help", "h": writeHelp() of "version", "v": writeVersion() of cmdEnd: assert(false) # cannot happen if filename == "": # no filename has been given, so we show the help: writeHelp()
iterator getopt(): tuple[kind: CmdLineKind, key, val: TaintedString] {.raises: [], tags: [ReadIOEffect].}
for kind, key, val in getopt(): # this will iterate over all arguments passed to the cmdline. continue
© 2006–2017 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/parseopt.html