diff options
Diffstat (limited to 'utils.go')
| -rw-r--r-- | utils.go | 308 |
1 files changed, 172 insertions, 136 deletions
@@ -1,180 +1,216 @@ package main import ( - "fmt" - "bufio" - "os" - "os/exec" - "math" - "strings" - "strconv" - "runtime" + "bufio" + "fmt" + "math" + "os" + "os/exec" + "runtime" + "strconv" + "strings" + "unicode/utf8" ) +const ( + framewidth int = 40 + li = "\u2501" + mli = "\u2501\u252f\u2501\u2501" //Masterline -T- + sli = " \u251c\u2500 " //Slave Line L_ + nli = " \u2502 " //noone Line | + fli = " \u2515\u2501\u2501" //Footer Line L +) + +func frame(text string, head bool) (out string) { + if head { + out = mli + text + }else{ + out = fli + text + } + n := utf8.RuneCountInString(out) + r := framewidth - n + if r < 1 { + out = out + li + }else{ + out = out + strings.Repeat(li,r) + } + if head { + out = "\n" + out + }else{ + out = out + "\n" + } + return +} + func getGitTag() string { - var ( - cmdOut []byte - err error - ) - cmd := "git" - args := []string{"tag","--points-at","HEAD"} - if cmdOut,err = exec.Command(cmd,args...).Output(); err != nil { - panic(err) - } - return string(cmdOut) + var ( + cmdOut []byte + err error + ) + cmd := "git" + args := []string{"tag", "--points-at", "HEAD"} + if cmdOut, err = exec.Command(cmd, args...).Output(); err != nil { + panic(err) + } + return string(cmdOut) } //Remove a string from a []string and the int number of strings afterwards -func removeStringFromArray(arr []string,rem string,after int) (out []string) { - found := false - i := 0 - for _,st := range arr { - if found { - if i < after { - i++ - }else{ - found = false - } - }else{ - if st == rem { - found = true - }else{ - out = append(out,st) - } - } - } - return +func removeStringFromArray(arr []string, rem string, after int) (out []string) { + found := false + i := 0 + for _, st := range arr { + if found { + if i < after { + i++ + } else { + found = false + } + } else { + if st == rem { + found = true + } else { + out = append(out, st) + } + } + } + return } +//Ask a Question an read the answer func isSure(quest string) bool { - fmt.Printf("%s (type 'y/Y/yes' to confirm) : ",quest) - in := bufio.NewReader(os.Stdin) - line, err := in.ReadString('\n') - if(runtime.GOOS == "windows"){ - line = strings.TrimSuffix(line, "\r\n") //for Windows - }else{ - line = strings.TrimSuffix(line, "\n") - } - checkErr(err) - - if ( line == "yes" || line == "y" || line == "Y") { - return true - } else { - return false - } + fmt.Printf("%s (type 'y/Y/yes' to confirm) : ", quest) + in := bufio.NewReader(os.Stdin) + line, err := in.ReadString('\n') + if runtime.GOOS == "windows" { + line = strings.TrimSuffix(line, "\r\n") //for Windows + } else { + line = strings.TrimSuffix(line, "\n") + } + checkErr(err) + + if line == "yes" || line == "y" || line == "Y" { + return true + } else { + return false + } } +//Test if error is nil and panic if not +//TODO log seperately func checkErr(err error) { - if err != nil { - panic(err) - } + if err != nil { + panic(err) + } } //make One String with Linebreaks out of an input String Array -func strLines(in []string) (out string){ +func strLines(in []string) (out string) { out = "" - for _,s := range in { - out = fmt.Sprintf("%s%s\n",out,s) + for _, s := range in { + out = fmt.Sprintf("%s%s\n", out, s) } return } +//Ask a question return the Answer func getInput(quest string) string { - fmt.Print(quest) - in := bufio.NewReader(os.Stdin) - line, err := in.ReadString('\n') - if(runtime.GOOS == "windows"){ - line = strings.TrimSuffix(line, "\r\n") //for Windows - }else{ - line = strings.TrimSuffix(line, "\n") - } - checkErr(err) - return line + fmt.Print(quest) + in := bufio.NewReader(os.Stdin) + line, err := in.ReadString('\n') + if runtime.GOOS == "windows" { + line = strings.TrimSuffix(line, "\r\n") //for Windows + } else { + line = strings.TrimSuffix(line, "\n") + } + checkErr(err) + return line } -func getNewInput(quest,old string) string { - if old != "" { - fmt.Println("Current:",old) - } - fmt.Print(quest) - in := bufio.NewReader(os.Stdin) - line, err := in.ReadString('\n') - if(runtime.GOOS == "windows"){ - line = strings.TrimSuffix(line, "\r\n") //for Windows - }else{ - line = strings.TrimSuffix(line, "\n") - } - checkErr(err) - if line == "" { - return old - }else{ - return line - } +//show Old Value, Ask Question and Return answer +func getNewInput(quest, old string) string { + if old != "" { + fmt.Println("Current:", old) + } + fmt.Print(quest) + in := bufio.NewReader(os.Stdin) + line, err := in.ReadString('\n') + if runtime.GOOS == "windows" { + line = strings.TrimSuffix(line, "\r\n") //for Windows + } else { + line = strings.TrimSuffix(line, "\n") + } + checkErr(err) + if line == "" { + return old + } else { + return line + } } -func stringArray2String(in []string, delim string) (string) { - var out string - for i,a := range in { - if i==0 { - out=a - }else{ - out=fmt.Sprintf("%s%s%s",out,delim,a) - } - } - return out +func stringArray2String(in []string, delim string) string { + var out string + for i, a := range in { + if i == 0 { + out = a + } else { + out = fmt.Sprintf("%s%s%s", out, delim, a) + } + } + return out } -func string2FloatArray(in string,delim string)(out []float64) { - read := strings.Split(in,delim) - for _,s := range read{ - fs,err := strconv.ParseFloat(s,64) - checkErr(err) - out = append(out,fs) - } - return +func string2FloatArray(in string, delim string) (out []float64) { + read := strings.Split(in, delim) + for _, s := range read { + fs, err := strconv.ParseFloat(s, 64) + checkErr(err) + out = append(out, fs) + } + return } -func string2StringArray(in string,delim string)(out []string) { - read := strings.Split(in,delim) - for _,s := range read{ - out = append(out,s) - } - return +func string2StringArray(in string, delim string) (out []string) { + read := strings.Split(in, delim) + for _, s := range read { + out = append(out, s) + } + return } func RetardRound(x float64) float64 { - t := math.Trunc(x) - if math.Abs(x-t) >= 0.5 { - return t + math.Copysign(1, x) - } - return t + t := math.Trunc(x) + if math.Abs(x-t) >= 0.5 { + return t + math.Copysign(1, x) + } + return t } -func Round(x, unit float64) (float64) { -// return math.Round(x/unit) * unit - return RetardRound(x/unit) * unit +func Round(x, unit float64) float64 { + // return math.Round(x/unit) * unit + return RetardRound(x/unit) * unit } func cleanString(in string) (out string) { - work := strings.Replace(in,"/","-",-1) - work = strings.Replace(work,"*","-",-1) - work = strings.Replace(work,":","-",-1) - work = strings.Replace(work,"<","-",-1) - work = strings.Replace(work,">","-",-1) - work = strings.Replace(work,"?","-",-1) - work = strings.Replace(work,"|","-",-1) - work = strings.Replace(work,"+","-",-1) - work = strings.Replace(work,",","-",-1) - work = strings.Replace(work,";","-",-1) - work = strings.Replace(work,"=","-",-1) - work = strings.Replace(work,"[","-",-1) - out = strings.Replace(work,"]","-",-1) - return + work := strings.Replace(in, "/", "-", -1) + work = strings.Replace(work, "*", "-", -1) + work = strings.Replace(work, ":", "-", -1) + work = strings.Replace(work, "<", "-", -1) + work = strings.Replace(work, ">", "-", -1) + work = strings.Replace(work, "?", "-", -1) + work = strings.Replace(work, "|", "-", -1) + work = strings.Replace(work, "+", "-", -1) + work = strings.Replace(work, ",", "-", -1) + work = strings.Replace(work, ";", "-", -1) + work = strings.Replace(work, "=", "-", -1) + work = strings.Replace(work, "[", "-", -1) + out = strings.Replace(work, "]", "-", -1) + return } func sumFloatArray(in []float64) (sum float64) { - for _,e := range in{ - sum += e - } - return + for _, e := range in { + sum += e + } + return } |
