Initial QSfera import
This commit is contained in:
+67
@@ -0,0 +1,67 @@
|
||||
package cmdline
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/gookit/goutil/internal/comfunc"
|
||||
"github.com/gookit/goutil/strutil"
|
||||
)
|
||||
|
||||
// LineBuilder build command line string.
|
||||
// codes refer from strings.Builder
|
||||
type LineBuilder struct {
|
||||
strings.Builder
|
||||
}
|
||||
|
||||
// NewBuilder create
|
||||
func NewBuilder(binFile string, args ...string) *LineBuilder {
|
||||
b := &LineBuilder{}
|
||||
|
||||
if binFile != "" {
|
||||
b.AddArg(binFile)
|
||||
}
|
||||
|
||||
b.AddArray(args)
|
||||
return b
|
||||
}
|
||||
|
||||
// ResetGet value, will reset after get.
|
||||
func (b *LineBuilder) ResetGet() string {
|
||||
defer b.Reset()
|
||||
return b.String()
|
||||
}
|
||||
|
||||
// AddArg to builder
|
||||
func (b *LineBuilder) AddArg(arg string) {
|
||||
_, _ = b.WriteString(arg)
|
||||
}
|
||||
|
||||
// AddArgs to builder
|
||||
func (b *LineBuilder) AddArgs(args ...string) {
|
||||
b.AddArray(args)
|
||||
}
|
||||
|
||||
// AddArray to builder
|
||||
func (b *LineBuilder) AddArray(args []string) {
|
||||
for _, arg := range args {
|
||||
_, _ = b.WriteString(arg)
|
||||
}
|
||||
}
|
||||
|
||||
// AddAny args to builder
|
||||
func (b *LineBuilder) AddAny(args ...any) {
|
||||
for _, arg := range args {
|
||||
_, _ = b.WriteString(strutil.SafeString(arg))
|
||||
}
|
||||
}
|
||||
|
||||
// WriteString arg string to the builder, will auto quote special string.
|
||||
// refer strconv.Quote()
|
||||
func (b *LineBuilder) WriteString(a string) (int, error) {
|
||||
// add sep on not-first write.
|
||||
if b.Len() != 0 {
|
||||
_ = b.WriteByte(' ')
|
||||
}
|
||||
|
||||
return b.Builder.WriteString(comfunc.ShellQuote(a))
|
||||
}
|
||||
Reference in New Issue
Block a user