Compare commits

..

No commits in common. "main" and "v1.0.1" have entirely different histories.
main ... v1.0.1

4 changed files with 27 additions and 57 deletions

View File

@ -313,7 +313,7 @@ Content:
#!/usr/bin/env sh
if [ "$3" = "exec" ]; then
command ls | format -0 -i "$1" -o "mv \"{0}\" \"$2\"" | xargs -0 -P 4 -I {} sh -c "{}"
command ls | format -i "$1" -o "mv \"{0}\" \"$2\"" | xargs -0 -P 4 sh -c
else
command ls | format -i "$1" -o "mv \"{0}\" \"$2\""
echo

8
go.mod
View File

@ -1,13 +1,9 @@
module git.tordarus.net/tordarus/format
module git.milar.in/milarin/format
go 1.18
require (
git.milar.in/milarin/buildinfo v1.0.0
github.com/fatih/color v1.13.0
)
require (
github.com/fatih/color v1.13.0 // indirect
github.com/mattn/go-colorable v0.1.12 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e // indirect

2
go.sum
View File

@ -1,5 +1,3 @@
git.milar.in/milarin/buildinfo v1.0.0 h1:tw98GupUYl/0a/3aPGuezhE4wseycOSsbcLp70hy60U=
git.milar.in/milarin/buildinfo v1.0.0/go.mod h1:arI9ZoENOgcZcanv25k9y4dKDUhPp0buJrlVerGruas=
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=

64
main.go
View File

@ -10,11 +10,9 @@ import (
"strconv"
"strings"
"unicode/utf8"
"git.milar.in/milarin/buildinfo"
)
var ( //flags
var (
// regex with sub groups
input = flag.String("i", `^(.|\n)*?$`, "input pattern")
@ -47,14 +45,6 @@ var ( //flags
// it may be useful to have a boolean flag for this behavior
lineParseAmount = flag.Int("n", 1, "amount of lines to feed into input pattern")
showVersion = flag.Bool("v", false, "show version and exit")
OutputNullByte = flag.Bool("0", false, "use nullbyte instead of newline as line separator for printing output")
)
var ( // globals
LineSeparator string = "\n"
replacePattern = regexp.MustCompile(`\{(\d+)(?::(.*?))?(?::(.*?))?(?::(.*?))?\}`)
numMutationPattern = regexp.MustCompile(`([+\-*/])(\d+|\((\d+)\))`)
)
@ -62,15 +52,6 @@ var ( // globals
func main() {
flag.Parse()
if *showVersion {
buildinfo.Print(buildinfo.Options{})
return
}
if *OutputNullByte {
LineSeparator = string(rune(0))
}
pattern, err := regexp.Compile(*input)
if err != nil {
panic(err)
@ -83,12 +64,12 @@ func main() {
if len(matches) == 0 {
if *keepUnmatched {
fmt.Print(line, LineSeparator)
fmt.Println(line)
}
continue
}
fmt.Print(replaceVars(escapedOutput, matches...), LineSeparator)
fmt.Println(replaceVars(escapedOutput, matches...))
}
}
@ -97,31 +78,13 @@ func readLines(r io.Reader) <-chan string {
go func(out chan<- string, source io.Reader) {
defer close(out)
r := bufio.NewReader(source)
for {
line, err := ReadLine(r)
// use data as line if reading was successfull or EOF has been reached
// in the latter case: only use data if something could be read until EOF
if err == nil || err == io.EOF && line != "" {
out <- line
}
if err != nil {
return
}
}
}(ch, r)
return ch
}
func ReadLine(r *bufio.Reader) (string, error) {
lines := make([]string, 0, *lineParseAmount)
var line string
var err error
lines := make([]string, 0, *lineParseAmount)
for line, err = r.ReadString('\n'); ; line, err = r.ReadString('\n') {
if rn, size := utf8.DecodeLastRuneInString(line); rn == '\n' {
line = line[:len(line)-size]
@ -136,11 +99,24 @@ func ReadLine(r *bufio.Reader) (string, error) {
}
linesCombined := strings.Join(lines, "\n")
return linesCombined, err
// use data as line if reading was successfull or EOF has been reached
// in the latter case: only use data if something could be read until EOF
if err == nil || err == io.EOF && linesCombined != "" {
out <- linesCombined
}
if err != nil {
return
}
}
}(ch, r)
return ch
}
func replaceVars(format string, vars ...string) string {
replacements := replacePattern.FindAllStringSubmatch(format, -1) // TODO arguments do not change in outer loop (can be moved to main method)
replacements := replacePattern.FindAllStringSubmatch(format, -1)
for _, replacement := range replacements {
rplStr := replacement[0]