mirror of
https://github.com/daylinmorgan/hwylterm.git
synced 2024-12-22 11:00:45 -06:00
Compare commits
No commits in common. "94e5b8708819e9a3503bee686b1617912518fccb" and "e8e090c5b76bc555231bda536193df6f92a54db2" have entirely different histories.
94e5b87088
...
e8e090c5b7
4 changed files with 31 additions and 32 deletions
|
@ -381,10 +381,11 @@ when isMainModule:
|
||||||
version bbfmt"[yellow]bbansi version[/][red] ->[/] [bold]{version}[/]"
|
version bbfmt"[yellow]bbansi version[/][red] ->[/] [bold]{version}[/]"
|
||||||
hidden debug, testCard
|
hidden debug, testCard
|
||||||
flags:
|
flags:
|
||||||
debug "show debug"
|
debug:
|
||||||
testCard "show test card"
|
T bool
|
||||||
|
testCard:
|
||||||
|
T bool
|
||||||
style:
|
style:
|
||||||
T string
|
|
||||||
? "set style for string"
|
? "set style for string"
|
||||||
- "s"
|
- "s"
|
||||||
run:
|
run:
|
||||||
|
|
|
@ -140,9 +140,9 @@ when isMainModule:
|
||||||
"""
|
"""
|
||||||
hidden demo
|
hidden demo
|
||||||
flags:
|
flags:
|
||||||
demo "show demo"
|
demo:
|
||||||
|
T bool
|
||||||
separator:
|
separator:
|
||||||
T string
|
|
||||||
help "separator to split items"
|
help "separator to split items"
|
||||||
short "s"
|
short "s"
|
||||||
run:
|
run:
|
||||||
|
|
|
@ -61,14 +61,14 @@ func render*(cli: HwylCliHelp, f: HwylFlagHelp): string =
|
||||||
if f.short != "":
|
if f.short != "":
|
||||||
result.add "[" & cli.styles.flagShort & "]"
|
result.add "[" & cli.styles.flagShort & "]"
|
||||||
result.add "-" & f.short.alignLeft(cli.shortArgLen)
|
result.add "-" & f.short.alignLeft(cli.shortArgLen)
|
||||||
result.add "[/" & cli.styles.flagShort & "]"
|
result.add "[/]"
|
||||||
else:
|
else:
|
||||||
result.add " ".repeat(1 + cli.shortArgLen)
|
result.add " ".repeat(1 + cli.shortArgLen)
|
||||||
result.add " "
|
result.add " "
|
||||||
if f.long != "":
|
if f.long != "":
|
||||||
result.add "[" & cli.styles.flagLong & "]"
|
result.add "[" & cli.styles.flagLong & "]"
|
||||||
result.add "--" & f.long.alignLeft(cli.longArgLen)
|
result.add "--" & f.long.alignLeft(cli.longArgLen)
|
||||||
result.add "[/" & cli.styles.flagLong & "]"
|
result.add "[/]"
|
||||||
else:
|
else:
|
||||||
result.add " ".repeat(2 + cli.longArgLen)
|
result.add " ".repeat(2 + cli.longArgLen)
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ func render*(cli: HwylCliHelp, f: HwylFlagHelp): string =
|
||||||
if f.description != "":
|
if f.description != "":
|
||||||
result.add "[" & cli.styles.flagDesc & "]"
|
result.add "[" & cli.styles.flagDesc & "]"
|
||||||
result.add f.description
|
result.add f.description
|
||||||
result.add "[/" & cli.styles.flagDesc & "]"
|
result.add "[/]"
|
||||||
result.add "\n"
|
result.add "\n"
|
||||||
|
|
||||||
func render*(cli: HwylCliHelp, subcmd: HwylSubCmdHelp): string =
|
func render*(cli: HwylCliHelp, subcmd: HwylSubCmdHelp): string =
|
||||||
|
@ -101,8 +101,8 @@ func render*(cli: HwylCliHelp): string =
|
||||||
result.add "\n"
|
result.add "\n"
|
||||||
result.add cli.desc
|
result.add cli.desc
|
||||||
result.add "\n"
|
result.add "\n"
|
||||||
|
result.add "\n"
|
||||||
if cli.subcmds.len > 0:
|
if cli.subcmds.len > 0:
|
||||||
result.add "\n"
|
|
||||||
result.add "[" & cli.styles.header & "]"
|
result.add "[" & cli.styles.header & "]"
|
||||||
result.add "subcommands[/]:\n"
|
result.add "subcommands[/]:\n"
|
||||||
for s in cli.subcmds:
|
for s in cli.subcmds:
|
||||||
|
@ -126,10 +126,9 @@ type
|
||||||
type
|
type
|
||||||
# ----
|
# ----
|
||||||
CliSetting* = enum
|
CliSetting* = enum
|
||||||
GenerateOnly, ## Don't attach root `runProc()` node
|
NoHelpFlag, ## Remove the builtin help flag
|
||||||
NoHelpFlag, ## Remove the builtin help flag
|
ShowHelp, ## If cmdline empty show help
|
||||||
ShowHelp, ## If cmdline empty show help
|
NoNormalize ## Don't normalize flags and commands
|
||||||
NoNormalize ## Don't normalize flags and commands
|
|
||||||
|
|
||||||
BuiltinFlag = object
|
BuiltinFlag = object
|
||||||
name*: string
|
name*: string
|
||||||
|
@ -245,7 +244,7 @@ func parseCliFlag(n: NimNode): CliFlag =
|
||||||
if result.ident == nil:
|
if result.ident == nil:
|
||||||
result.ident = result.name.ident
|
result.ident = result.name.ident
|
||||||
if result.typeNode == nil:
|
if result.typeNode == nil:
|
||||||
result.typeNode = ident"bool"
|
result.typeNode = ident"string"
|
||||||
|
|
||||||
# TODO: change how this works?
|
# TODO: change how this works?
|
||||||
func parseCliFlags(cfg: var CliCfg, node: NimNode) =
|
func parseCliFlags(cfg: var CliCfg, node: NimNode) =
|
||||||
|
@ -305,21 +304,18 @@ func parseIdentLikeList(node: NimNode): seq[string] =
|
||||||
func parseCliBody(body: NimNode, name: string = "", root: bool= false): CliCfg
|
func parseCliBody(body: NimNode, name: string = "", root: bool= false): CliCfg
|
||||||
|
|
||||||
func isSubMarker(node: NimNode): bool =
|
func isSubMarker(node: NimNode): bool =
|
||||||
if node.kind != nnkBracket: return false
|
if node.kind == nnkPrefix:
|
||||||
if node.len != 1: return false
|
if eqIdent(node[0], "---"):
|
||||||
if node[0].kind notin [nnkIdent, nnkStrLit]:
|
result = true
|
||||||
return false
|
|
||||||
result = true
|
|
||||||
|
|
||||||
func sliceStmts(node: NimNode): seq[
|
func sliceStmts(node: NimNode): seq[
|
||||||
tuple[name: string, slice: Slice[int]]
|
tuple[name: string, slice: Slice[int]]
|
||||||
] =
|
] =
|
||||||
|
|
||||||
if not isSubMarker(node[0]):
|
if not isSubMarker(node[0]):
|
||||||
error "expected a subcommand delimiting line"
|
error "expected a subcommand delimiting line"
|
||||||
|
|
||||||
var
|
var
|
||||||
name: string = node[0][0].strVal
|
name: string = node[0][1].strVal
|
||||||
start = 1
|
start = 1
|
||||||
let nodeLen = node.len()
|
let nodeLen = node.len()
|
||||||
|
|
||||||
|
@ -328,7 +324,7 @@ func sliceStmts(node: NimNode): seq[
|
||||||
result.add (name, start..i)
|
result.add (name, start..i)
|
||||||
elif isSubMarker(node[i]):
|
elif isSubMarker(node[i]):
|
||||||
result.add (name, start..(i - 1))
|
result.add (name, start..(i - 1))
|
||||||
name = node[i][0].strVal
|
name = node[i][1].strVal
|
||||||
start = i + 1
|
start = i + 1
|
||||||
|
|
||||||
|
|
||||||
|
@ -693,7 +689,7 @@ func hwylCliImpl(cfg: CliCfg): NimNode =
|
||||||
|
|
||||||
# should this a CritBitTree?
|
# should this a CritBitTree?
|
||||||
parserBody.add quote do:
|
parserBody.add quote do:
|
||||||
var `flagSet` {.used.}: HashSet[string]
|
var `flagSet`: HashSet[string]
|
||||||
|
|
||||||
parserBody.add(
|
parserBody.add(
|
||||||
quote do:
|
quote do:
|
||||||
|
@ -783,11 +779,9 @@ func hwylCliImpl(cfg: CliCfg): NimNode =
|
||||||
let `args` {.used.} = `parserProcName`(`cmdLine`)
|
let `args` {.used.} = `parserProcName`(`cmdLine`)
|
||||||
`runBody`
|
`runBody`
|
||||||
|
|
||||||
# if cfg.root and (GenerateOnly notin cfg.settings):
|
|
||||||
if cfg.root:
|
if cfg.root:
|
||||||
if GenerateOnly notin cfg.settings:
|
result.add quote do:
|
||||||
result.add quote do:
|
`runProcName`()
|
||||||
`runProcName`()
|
|
||||||
else:
|
else:
|
||||||
result.add quote do:
|
result.add quote do:
|
||||||
`runProcName`(`args`[1..^1])
|
`runProcName`(`args`[1..^1])
|
||||||
|
|
|
@ -26,7 +26,7 @@ hwylCli:
|
||||||
run:
|
run:
|
||||||
echo "this is always run prior to subcommand parsing"
|
echo "this is always run prior to subcommand parsing"
|
||||||
subcommands:
|
subcommands:
|
||||||
[onelonger]
|
--- "onelonger"
|
||||||
... """
|
... """
|
||||||
the first subcommand
|
the first subcommand
|
||||||
|
|
||||||
|
@ -50,16 +50,19 @@ hwylCli:
|
||||||
echo fmt"{verbose=}"
|
echo fmt"{verbose=}"
|
||||||
echo fmt"{config=}"
|
echo fmt"{config=}"
|
||||||
|
|
||||||
["two-longer"]
|
--- "two-longer"
|
||||||
... """
|
... """
|
||||||
some second subcommand
|
some second subcommand
|
||||||
|
|
||||||
a longer mulitline description that will be visible in the subcommand help
|
a longer mulitline description that will be visible in the subcommand help
|
||||||
and it will automatically be "bb"'ed [bold]this is bold text[/]
|
and it will automatically be "bb"'ed [bold]this is bold text[/]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
flags:
|
flags:
|
||||||
auto:
|
a:
|
||||||
- a
|
T bool
|
||||||
? "some help"
|
? "some help"
|
||||||
b:
|
b:
|
||||||
T seq[float]
|
T seq[float]
|
||||||
|
@ -67,5 +70,6 @@ hwylCli:
|
||||||
h "this will override the builtin 'h' for help"
|
h "this will override the builtin 'h' for help"
|
||||||
run:
|
run:
|
||||||
echo "hello from `example b` command"
|
echo "hello from `example b` command"
|
||||||
echo fmt"{auto=}, {b=}"
|
echo fmt"{a=}, {b=}"
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue