2019-10-26 17:30:00 -04:00
|
|
|
package Common
|
2019-10-24 09:31:59 -04:00
|
|
|
|
2019-10-27 17:24:21 -04:00
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"fmt"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
"unicode/utf16"
|
|
|
|
"unicode/utf8"
|
|
|
|
)
|
2019-10-24 09:31:59 -04:00
|
|
|
|
|
|
|
// StringToInt converts a string to an integer
|
|
|
|
func StringToInt(text string) int {
|
|
|
|
result, err := strconv.Atoi(text)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
return result
|
|
|
|
}
|
|
|
|
|
|
|
|
// StringToUint8 converts a string to an uint8
|
|
|
|
func StringToUint8(text string) uint8 {
|
|
|
|
result, err := strconv.Atoi(text)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
if result < 0 || result > 255 {
|
|
|
|
panic("value out of range of byte")
|
|
|
|
}
|
|
|
|
return uint8(result)
|
|
|
|
}
|
|
|
|
|
|
|
|
// StringToInt8 converts a string to an int8
|
|
|
|
func StringToInt8(text string) int8 {
|
|
|
|
result, err := strconv.Atoi(text)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
if result < -128 || result > 122 {
|
|
|
|
panic("value out of range of a signed byte")
|
|
|
|
}
|
|
|
|
return int8(result)
|
|
|
|
}
|
2019-10-27 17:24:21 -04:00
|
|
|
|
|
|
|
func Utf16BytesToString(b []byte) (string, error) {
|
|
|
|
|
|
|
|
if len(b)%2 != 0 {
|
|
|
|
return "", fmt.Errorf("Must have even length byte slice")
|
|
|
|
}
|
|
|
|
|
|
|
|
u16s := make([]uint16, 1)
|
|
|
|
|
|
|
|
ret := &bytes.Buffer{}
|
|
|
|
|
|
|
|
b8buf := make([]byte, 4)
|
|
|
|
|
|
|
|
lb := len(b)
|
|
|
|
for i := 0; i < lb; i += 2 {
|
|
|
|
u16s[0] = uint16(b[i]) + (uint16(b[i+1]) << 8)
|
|
|
|
r := utf16.Decode(u16s)
|
|
|
|
n := utf8.EncodeRune(b8buf, r[0])
|
|
|
|
ret.Write(b8buf[:n])
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret.String(), nil
|
|
|
|
}
|
|
|
|
|
2019-11-01 00:34:23 -04:00
|
|
|
func CombineStrings(input []string) string {
|
|
|
|
return strings.Join(input, "\n")
|
|
|
|
}
|
|
|
|
|
2019-10-27 17:24:21 -04:00
|
|
|
func SplitIntoLinesWithMaxWidth(fullSentence string, maxChars int) []string {
|
|
|
|
lines := make([]string, 0)
|
|
|
|
line := ""
|
|
|
|
totalLength := 0
|
|
|
|
words := strings.Split(fullSentence, " ")
|
|
|
|
for _, word := range words {
|
|
|
|
totalLength += 1 + len(word)
|
|
|
|
if totalLength > maxChars {
|
|
|
|
totalLength = len(word)
|
|
|
|
lines = append(lines, line)
|
|
|
|
line = ""
|
|
|
|
} else {
|
|
|
|
line += " "
|
|
|
|
}
|
|
|
|
line += word
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(line) > 0 {
|
|
|
|
lines = append(lines, line)
|
|
|
|
}
|
|
|
|
|
|
|
|
return lines
|
|
|
|
}
|