"echo:Simplified."
This commit is contained in:
parent
3d0fc73832
commit
1aa0c5d75a
1 changed files with 9 additions and 63 deletions
72
echo/echo.go
72
echo/echo.go
|
@ -2,74 +2,20 @@
|
||||||
package echo
|
package echo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"fmt"
|
||||||
"flag"
|
"flag"
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Echoer struct {
|
|
||||||
out *os.File
|
|
||||||
backslashMap map[string] string
|
|
||||||
}
|
|
||||||
func (e Echoer)BackslashInterpret(str string) string {
|
|
||||||
for k, v := range e.backslashMap {
|
|
||||||
str = strings.ReplaceAll(str, k, v)
|
|
||||||
}
|
|
||||||
return str
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e Echoer)Echo(str string) {
|
|
||||||
e.out.Write( []byte(str[:len(str)]) )
|
|
||||||
}
|
|
||||||
|
|
||||||
func New(out *os.File, backslashMap map[string] string) *Echoer {
|
|
||||||
e := new(Echoer)
|
|
||||||
e.out = out
|
|
||||||
e.backslashMap = backslashMap
|
|
||||||
return e
|
|
||||||
}
|
|
||||||
func Run(args []string) int {
|
func Run(args []string) int {
|
||||||
var(
|
|
||||||
newLineStr string
|
|
||||||
newLineFlag bool
|
|
||||||
joinStr string
|
|
||||||
joinStrsFlag bool
|
|
||||||
backslashSeqFlag bool
|
|
||||||
)
|
|
||||||
seqs := map[string] string {
|
|
||||||
"\\\\" : "\\",
|
|
||||||
"\\a" : "\a",
|
|
||||||
"\\b" : "\b",
|
|
||||||
/*"\\c" : "\c",
|
|
||||||
"\\e" : "\e",*/
|
|
||||||
"\\f" : "\f",
|
|
||||||
"\\n" : "\n",
|
|
||||||
"\\r" : "\r",
|
|
||||||
"\\t" : "\t",
|
|
||||||
"\\v" : "\v",
|
|
||||||
}
|
|
||||||
e := New(os.Stdout, seqs)
|
|
||||||
flagSet := flag.NewFlagSet(args[0], flag.ExitOnError)
|
flagSet := flag.NewFlagSet(args[0], flag.ExitOnError)
|
||||||
flagSet.BoolVar(&newLineFlag, "n", false,
|
|
||||||
"Don't add new line character('-N' is lower priority).")
|
|
||||||
flagSet.StringVar(&newLineStr, "N", "\n", "Use this instead new line character.")
|
|
||||||
flagSet.BoolVar(&joinStrsFlag, "j", false, "Join strings('-J' is lower priority).")
|
|
||||||
flagSet.StringVar(&joinStr, "J", " ", "Use instead of space as separator.")
|
|
||||||
flagSet.BoolVar(&backslashSeqFlag, "e", false, "Interpret backslash special terminal characters(Characters from join options will be interpreted too).")
|
|
||||||
flagSet.Parse(args[1:])
|
flagSet.Parse(args[1:])
|
||||||
|
args = args[1:]
|
||||||
if newLineFlag {
|
status := 0
|
||||||
newLineStr = ""
|
l := len(args) - 1
|
||||||
|
for i, s := range args {
|
||||||
|
fmt.Print(s)
|
||||||
|
if i!=l { fmt.Print(" ") }
|
||||||
}
|
}
|
||||||
if joinStrsFlag {
|
fmt.Print("\n")
|
||||||
joinStr = ""
|
return status
|
||||||
}
|
|
||||||
|
|
||||||
printStr := strings.Join(flagSet.Args(), joinStr) +newLineStr
|
|
||||||
if backslashSeqFlag {
|
|
||||||
printStr = e.BackslashInterpret(printStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
e.Echo(printStr)
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue