-
Notifications
You must be signed in to change notification settings - Fork 0
/
strings.go
106 lines (95 loc) · 2.57 KB
/
strings.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Copyright 2018, Jon Hadfield <jon@lessknown.co.uk>
// This file is part of ape.
// ape is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// ape is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with ape. If not, see <http://www.gnu.org/licenses/>.
package helpers
import (
"fmt"
"strings"
"golang.org/x/crypto/ssh/terminal"
)
func StringInSlice(a string, list []string) bool {
for _, b := range list {
if b == a {
return true
}
}
return false
}
func StringSliceToLower(input []string) (output []string) {
output = Map(input, strings.ToLower)
return
}
func StringInSliceContents(a string, list []string) bool {
for _, b := range list {
if strings.Contains(a, b) {
return true
}
}
return false
}
func PadToWidth(input, char string, inputLengthOverride int, trimToWidth bool) (output string) {
// Split string into lines
var lines []string
var newLines []string
if strings.Contains(input, "\n") {
lines = strings.Split(input, "\n")
} else {
lines = []string{input}
}
var paddingSize int
for i, line := range lines {
width, _, _ := terminal.GetSize(0)
if width == -1 {
width = 80
}
// No padding for a line that already meets or exceeds console width
var length int
if inputLengthOverride > 0 {
length = inputLengthOverride
} else {
length = len(line)
}
if length >= width {
if trimToWidth {
output = line[0:width]
} else {
output = input
}
return
} else if i == len(lines)-1 {
if inputLengthOverride != 0 {
paddingSize = width - inputLengthOverride
} else {
paddingSize = width - len(line)
}
if paddingSize >= 1 {
newLines = append(newLines, fmt.Sprintf("%s%s\r", line, strings.Repeat(char, paddingSize)))
} else {
newLines = append(newLines, fmt.Sprintf("%s\r", line))
}
} else {
var suffix string
newLines = append(newLines, fmt.Sprintf("%s%s%s\n", line, strings.Repeat(char, paddingSize), suffix))
}
}
output = strings.Join(newLines, "")
return
}
func GetStringInBetween(str, start, end string) (result string) {
s := strings.Index(str, start)
if s == -1 {
return
}
s += len(start)
e := strings.Index(str, end)
return str[s:e]
}