# Module parseopt

This module provides the standard Nimrod command line parser. It supports one convenience iterator over all command line options and some lower-level features.

# Imports

os, strutils

# Types

    TCmdLineKind = enum
      cmdEnd,                     ## end of command line reached
      cmdArgument,                ## argument detected
      cmdLongoption,              ## a long option ``--option`` detected
      cmdShortOption              ## a short option ``-c`` detected

  the detected command line token

    TOptParser = object of TObject
      cmd: string
      pos: int
      inShortState: bool
      kind*: TCmdLineKind         ## 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

  this object implements the command line parser

# Procs

    proc initOptParser(cmdline = ""): TOptParser {.raises: [EInvalidIndex],
        tags: [FReadIO].}

  inits the option parser. If `cmdline == ""`, the real command line (as provided by the `OS` module) is taken.

    proc next(p: var TOptParser) {.rtl, extern: "npo$1", raises: [], tags: [].}

  parses the first or next option; `p.kind` describes what token has been parsed. `p.key` and `p.val` are set accordingly.

    proc cmdLineRest(p: TOptParser): TaintedString {.rtl, extern: "npo$1",
        raises: [], tags: [].}

  retrieves the rest of the command line that has not been parsed yet.

# Iterators

    iterator getopt(): tuple[kind: TCmdLineKind, key, val: TaintedString] {.
        raises: [EInvalidIndex], tags: [FReadIO].}

  This is an convenience iterator for iterating over the command line. This uses the TOptParser object. Example:

      var
        filename = ""
      for kind, key, val in 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()

Generated: 2013-05-21 09:55:10 UTC