1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-11-17 18:06:03 -05:00
OpenDiablo2/Common/StringUtils.go
2019-11-01 00:34:23 -04:00

95 lines
1.7 KiB
Go

package Common
import (
"bytes"
"fmt"
"strconv"
"strings"
"unicode/utf16"
"unicode/utf8"
)
// 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)
}
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
}
func CombineStrings(input []string) string {
return strings.Join(input, "\n")
}
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
}