Blame view

string_util.go 3.08 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"
cacf57bd4   Marko Tikvić   merging with /uti...
8
  )
e95e68362   Marko Tikvić   merged string san...
9
10
11
12
13
14
  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...
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  // 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)
  	if s != "" {
  		parts := strings.Split(s, sep)
  		arr = make([]int64, len(parts))
  		for i, p := range parts {
  			num := StringToInt64(p)
  			arr[i] = num
  		}
  	}
  
  	return arr
  }
  
  // Int64SliceToString ...
  func Int64SliceToString(arr []int64) (s string) {
e95e68362   Marko Tikvić   merged string san...
37
38
39
40
41
42
43
  	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...
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
  	}
  
  	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
71
  // StringToBool ...
cacf57bd4   Marko Tikvić   merging with /uti...
72
  func StringToBool(s string) bool {
70f2e7ead   Marko Tikvić   simplified
73
74
  	res, _ := strconv.ParseBool(s)
  	return res
cacf57bd4   Marko Tikvić   merging with /uti...
75
  }
46b2215eb   Marko Tikvić   lintfix
76
  // BoolToString ...
cacf57bd4   Marko Tikvić   merging with /uti...
77
78
79
  func BoolToString(b bool) string {
  	return fmt.Sprintf("%b", b)
  }
46b2215eb   Marko Tikvić   lintfix
80
  // StringSliceContains ...
cacf57bd4   Marko Tikvić   merging with /uti...
81
82
83
84
85
86
87
88
  func StringSliceContains(slice []string, s string) bool {
  	for i := range slice {
  		if slice[i] == s {
  			return true
  		}
  	}
  	return false
  }
dd72ba20d   Marko Tikvić   CharAt
89

46b2215eb   Marko Tikvić   lintfix
90
  // StringAt ...
dd72ba20d   Marko Tikvić   CharAt
91
92
93
94
95
96
97
  func StringAt(s string, index int) string {
  	if len(s)-1 < index || index < 0 {
  		return ""
  	}
  
  	return string(s[index])
  }
a8f0d5a63   Marko Tikvić   SplitText
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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
  // 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
  }
  
  const threeDots = "\u2056\u2056\u2056"
  
  func LimitTextWithThreeDots(txt string, maxLen int) string {
  	if len(txt) <= maxLen {
  		return txt
  	}
  
  	return txt[:maxLen] + threeDots
  }
46b2215eb   Marko Tikvić   lintfix
145
  // SplitStringAtWholeWords ...
e95e68362   Marko Tikvić   merged string san...
146
147
148
149
  func SplitStringAtWholeWords(s string, maxLen int) (res []string) {
  	parts := strings.Split(s, " ")
  
  	res = append(res, parts[0])
dd72ba20d   Marko Tikvić   CharAt
150
  	i := 0
e95e68362   Marko Tikvić   merged string san...
151
152
153
154
155
156
157
158
159
160
161
162
163
  	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
164
  	}
e95e68362   Marko Tikvić   merged string san...
165
166
  
  	return res
dd72ba20d   Marko Tikvić   CharAt
167
  }