Blame view

string_util.go 3.92 KB
18fcd6d6b   Marko Tikvić   merged with util ...
1
  package webutility
cacf57bd4   Marko Tikvić   merging with /uti...
2
3
4
  
  import (
  	"fmt"
70f2e7ead   Marko Tikvić   simplified
5
  	"strconv"
cacf57bd4   Marko Tikvić   merging with /uti...
6
  	"strings"
a8f0d5a63   Marko Tikvić   SplitText
7
  	"unicode"
6cc94a06e   Marko Tikvić   cleanup
8
9
  
  	"golang.org/x/exp/utf8string"
cacf57bd4   Marko Tikvić   merging with /uti...
10
  )
e95e68362   Marko Tikvić   merged string san...
11
12
13
14
15
16
  const sanitisationPatern = "\"';&*<>=\\`:"
  
  // SanitiseString removes characters from s found in patern and returns new modified string.
  func SanitiseString(s string) string {
  	return ReplaceAny(s, sanitisationPatern, "")
  }
cacf57bd4   Marko Tikvić   merging with /uti...
17
18
19
20
21
22
23
24
  // IsWrappedWith ...
  func IsWrappedWith(src, begin, end string) bool {
  	return strings.HasPrefix(src, begin) && strings.HasSuffix(src, end)
  }
  
  // ParseInt64Arr ...
  func ParseInt64Arr(s, sep string) (arr []int64) {
  	s = strings.TrimSpace(s)
b80ee4b2b   Marko Tikvić   new stuff
25
26
27
28
29
30
31
32
  	if s == "" {
  		return
  	}
  	parts := strings.Split(s, sep)
  	arr = make([]int64, len(parts))
  	for i, p := range parts {
  		num := StringToInt64(p)
  		arr[i] = num
cacf57bd4   Marko Tikvić   merging with /uti...
33
34
35
36
37
38
39
  	}
  
  	return arr
  }
  
  // Int64SliceToString ...
  func Int64SliceToString(arr []int64) (s string) {
e95e68362   Marko Tikvić   merged string san...
40
41
42
43
44
45
46
  	if len(arr) == 0 {
  		return ""
  	}
  
  	s += fmt.Sprintf("%d", arr[0])
  	for i := 1; i < len(arr); i++ {
  		s += fmt.Sprintf(",%d", arr[i])
cacf57bd4   Marko Tikvić   merging with /uti...
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
  	}
  
  	return s
  }
  
  // CombineStrings ...
  func CombineStrings(s1, s2, s3 string) string {
  	s1 = strings.TrimSpace(s1)
  	s2 = strings.TrimSpace(s2)
  
  	if s1 != "" && s2 != "" {
  		s1 += s3 + s2
  	} else {
  		s1 += s2
  	}
  
  	return s1
  }
  
  // ReplaceAny replaces any of the characters from patern found in s with r and returns a new resulting string.
  func ReplaceAny(s, patern, r string) (n string) {
  	n = s
  	for _, c := range patern {
  		n = strings.Replace(n, string(c), r, -1)
  	}
  	return n
  }
46b2215eb   Marko Tikvić   lintfix
74
  // StringToBool ...
cacf57bd4   Marko Tikvić   merging with /uti...
75
  func StringToBool(s string) bool {
70f2e7ead   Marko Tikvić   simplified
76
77
  	res, _ := strconv.ParseBool(s)
  	return res
cacf57bd4   Marko Tikvić   merging with /uti...
78
  }
46b2215eb   Marko Tikvić   lintfix
79
  // BoolToString ...
cacf57bd4   Marko Tikvić   merging with /uti...
80
81
82
  func BoolToString(b bool) string {
  	return fmt.Sprintf("%b", b)
  }
46b2215eb   Marko Tikvić   lintfix
83
  // StringSliceContains ...
cacf57bd4   Marko Tikvić   merging with /uti...
84
85
86
87
88
89
90
91
  func StringSliceContains(slice []string, s string) bool {
  	for i := range slice {
  		if slice[i] == s {
  			return true
  		}
  	}
  	return false
  }
dd72ba20d   Marko Tikvić   CharAt
92

3173b06a4   Marko Tikvić   SplitString()
93
94
95
96
97
98
99
100
101
  func SplitString(s, sep string) (res []string) {
  	parts := strings.Split(s, sep)
  	for _, p := range parts {
  		if p != "" {
  			res = append(res, p)
  		}
  	}
  	return res
  }
46b2215eb   Marko Tikvić   lintfix
102
  // StringAt ...
dd72ba20d   Marko Tikvić   CharAt
103
104
105
106
107
108
109
  func StringAt(s string, index int) string {
  	if len(s)-1 < index || index < 0 {
  		return ""
  	}
  
  	return string(s[index])
  }
6cc94a06e   Marko Tikvić   cleanup
110
111
112
113
114
115
116
117
  func StringAtRune(s string, index int) string {
  	str := utf8string.NewString(s)
  	max := str.RuneCount()
  	if index < max {
  		return string(str.At(index))
  	}
  	return ""
  }
a8f0d5a63   Marko Tikvić   SplitText
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
  // SplitText ...
  func SplitText(s string, maxLen int) (lines []string) {
  	runes := []rune(s)
  
  	i, start, sep, l := 0, 0, 0, 0
  	for i = 0; i < len(runes); i++ {
  		c := runes[i]
  
  		if unicode.IsSpace(c) {
  			sep = i
  		}
  
  		if c == '
  ' {
  			if start != sep {
  				lines = append(lines, string(runes[start:sep]))
  			}
  			start = i
  			sep = i
  			l = 0
  		} else if l >= maxLen {
  			if start != sep {
  				lines = append(lines, string(runes[start:sep]))
  				sep = i
  				start = i - 1
  				l = 0
  			}
  		} else {
  			l++
  		}
  	}
  	if start != i-1 {
  		lines = append(lines, string(runes[start:i-1]))
  	}
  
  	return lines
  }
6cc94a06e   Marko Tikvić   cleanup
155
156
  func CutTextWith(txt string, maxLen int, tail string) string {
  	if len(txt) < maxLen || len(txt) <= len(tail) {
1c83dc241   Marko Tikvić   GUID and timer
157
158
  		return txt
  	}
6cc94a06e   Marko Tikvić   cleanup
159
  	return txt[:maxLen-3] + tail
1c83dc241   Marko Tikvić   GUID and timer
160
  }
6cc94a06e   Marko Tikvić   cleanup
161
  func LimitTextWith(txt string, maxLen int, tail string) string {
b80ee4b2b   Marko Tikvić   new stuff
162
163
164
  	if len(txt) <= maxLen {
  		return txt
  	}
6cc94a06e   Marko Tikvić   cleanup
165
  	return txt[:maxLen] + tail
b80ee4b2b   Marko Tikvić   new stuff
166
  }
46b2215eb   Marko Tikvić   lintfix
167
  // SplitStringAtWholeWords ...
e95e68362   Marko Tikvić   merged string san...
168
169
170
171
  func SplitStringAtWholeWords(s string, maxLen int) (res []string) {
  	parts := strings.Split(s, " ")
  
  	res = append(res, parts[0])
dd72ba20d   Marko Tikvić   CharAt
172
  	i := 0
e95e68362   Marko Tikvić   merged string san...
173
174
175
176
177
178
179
180
181
182
183
184
185
  	for j := 1; j < len(parts); j++ {
  		p := strings.TrimSpace(parts[j])
  		if len(p) > maxLen {
  			// TODO(marko): check if maxLen is >= 3
  			p = p[0 : maxLen-3]
  			p += "..."
  		}
  		if len(res[i])+len(p)+1 <= maxLen {
  			res[i] += " " + p
  		} else {
  			res = append(res, p)
  			i++
  		}
dd72ba20d   Marko Tikvić   CharAt
186
  	}
e95e68362   Marko Tikvić   merged string san...
187
188
  
  	return res
dd72ba20d   Marko Tikvić   CharAt
189
  }
b80ee4b2b   Marko Tikvić   new stuff
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
  
  // StringToInt64 ...
  func StringToInt64(s string) int64 {
  	i, _ := strconv.ParseInt(s, 10, 64)
  	return i
  }
  
  // StringToFloat64 ...
  func StringToFloat64(s string) float64 {
  	f, _ := strconv.ParseFloat(s, 64)
  	return f
  }
  
  func StringToValidInt64(s string) (int64, bool) {
  	i, err := strconv.ParseInt(s, 10, 64)
  	if err != nil {
  		return i, false
  	}
  	return i, true
  }