// cli.vr — getopt-style command-line flag parsing for command-line tools. // // import cli // fn main() { // let name = cli.flag("name", "world") // --name bob | --name=bob | -n bob // let verbose = cli.has("v") // -v (boolean flag) // let rest = cli.positional() // non-flag args // println("hi " + name) // } // // Parsing is done by the VM (full string handling); this module exposes it as // namespaced helpers. Supported forms: // // --name value long flag with a space-separated value // --name=value long flag with an inline value // --name long boolean flag // -v short flag, treated as boolean (never swallows a positional) // -n=value short flag with an inline value // // The short alias is the long name's first character (`--verbose` -> `-v`). To // give a value to a short flag, use the inline form `-n=value` (or the long // form `--name value`). `--` stops flag parsing; everything after is // positional. The first occurrence of a flag wins. Negative numbers (-5) are // values, not flags. // flag returns the value of the named flag, or `default` when absent. fn flag(name, default) { let v = flag_val(name) if v == "" { return default } return v } // has returns 1 when the flag was passed (boolean or with a value), else 0. fn has(name) { return flag_has(name) } // positional returns the non-flag arguments in order; `--` ends flag parsing. fn positional() { return flag_positional() }