# Unquoted strings can be numeric.
0: 1 2 3=4
01: 23 45 67=89
---
0: Command { name: "1", args: [Argument { key: None, value: "2" }, Argument { key: Some("3"), value: "4" }], prefix: Some("0"), silent: false, line_number: 2 }
01: Command { name: "23", args: [Argument { key: None, value: "45" }, Argument { key: Some("67"), value: "89" }], prefix: Some("01"), silent: false, line_number: 3 }

# Unquoted strings can start with _.
_prefix: _command _arg _key=_value
---
_prefix: Command { name: "_command", args: [Argument { key: None, value: "_arg" }, Argument { key: Some("_key"), value: "_value" }], prefix: Some("_prefix"), silent: false, line_number: 9 }

# Unquoted strings can contain -_.
prefix-_.: command-_. arg-_. key-_.=value-_.
---
prefix-_.: Command { name: "command-_.", args: [Argument { key: None, value: "arg-_." }, Argument { key: Some("key-_."), value: "value-_." }], prefix: Some("prefix-_."), silent: false, line_number: 14 }

# Single-quoted strings can contain any character, including newlines.
'➡️': '😀' '"👋"' '\t'='\0' '

  🚀

'
---
➡️: Command { name: "😀", args: [Argument { key: None, value: "\"👋\"" }, Argument { key: Some("\t"), value: "\0" }, Argument { key: None, value: "\n\n  🚀\n\n" }], prefix: Some("➡\u{fe0f}"), silent: false, line_number: 19 }

# Double-quoted strings can too.
"➡️": "😀" "'👋'" "\t"="\0" "

  🚀

"
---
➡️: Command { name: "😀", args: [Argument { key: None, value: "'👋'" }, Argument { key: Some("\t"), value: "\0" }, Argument { key: None, value: "\n\n  🚀\n\n" }], prefix: Some("➡\u{fe0f}"), silent: false, line_number: 28 }

# Single- and double-quoted strings can also be empty, but is not allowed in
# identifiers (prefixes, commands, and argument names). It is allowed as
# argument values.
command foo="" bar=''
---
Command { name: "command", args: [Argument { key: Some("foo"), value: "" }, Argument { key: Some("bar"), value: "" }], prefix: None, silent: false, line_number: 39 }

# Single- and double-quoted strings respect all of the same escape sequences,
# including both quote types.
'\\ \' \" \0 \n \r \t \\'
"\\ \' \" \0 \n \r \t \\"
---
Command { name: "\\ ' \" \0 \n \r \t \\", args: [], prefix: None, silent: false, line_number: 45 }
Command { name: "\\ ' \" \0 \n \r \t \\", args: [], prefix: None, silent: false, line_number: 46 }

# Quoted strings can contain the other, unescaped quote kind.
'"'
"'"
---
Command { name: "\"", args: [], prefix: None, silent: false, line_number: 52 }
Command { name: "'", args: [], prefix: None, silent: false, line_number: 53 }

# Quoted strings can also contain special characters like silencing ( and prefix
# : without them being interpreted as such.
'(command:' arg
---
Command { name: "(command:", args: [Argument { key: None, value: "arg" }], prefix: None, silent: false, line_number: 60 }

# They can also contain comments.
'command # with comment'
---
Command { name: "command # with comment", args: [], prefix: None, silent: false, line_number: 65 }
