61 lines
1.1 KiB
Go
61 lines
1.1 KiB
Go
package commands
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// Command represents a parsed or built TS3 command line.
|
|
type Command struct {
|
|
Params map[string]string
|
|
Name string
|
|
}
|
|
|
|
// Build returns the string representation of the command.
|
|
func (c *Command) Build() string {
|
|
return BuildCommand(c.Name, c.Params)
|
|
}
|
|
|
|
var escaper = strings.NewReplacer(
|
|
"\\", "\\\\",
|
|
"/", "\\/",
|
|
" ", "\\s",
|
|
"|", "\\p",
|
|
"\a", "\\a",
|
|
"\b", "\\b",
|
|
"\f", "\\f",
|
|
"\n", "\\n",
|
|
"\r", "\\r",
|
|
"\t", "\\t",
|
|
"\v", "\\v",
|
|
)
|
|
|
|
func Escape(s string) string {
|
|
return escaper.Replace(s)
|
|
}
|
|
|
|
func BuildCommand(cmd string, params map[string]string) string {
|
|
var res strings.Builder
|
|
res.WriteString(Escape(cmd))
|
|
for k, v := range params {
|
|
res.WriteByte(' ')
|
|
res.WriteString(k)
|
|
res.WriteByte('=')
|
|
res.WriteString(Escape(v))
|
|
}
|
|
|
|
return res.String()
|
|
}
|
|
|
|
func BuildCommandOrdered(cmd string, params [][2]string) string {
|
|
var res strings.Builder
|
|
res.WriteString(Escape(cmd))
|
|
for _, kv := range params {
|
|
res.WriteByte(' ')
|
|
res.WriteString(kv[0])
|
|
res.WriteByte('=')
|
|
res.WriteString(Escape(kv[1]))
|
|
}
|
|
|
|
return res.String()
|
|
}
|