mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-05 03:23:49 +08:00
98 lines
1.5 KiB
Go
98 lines
1.5 KiB
Go
// Package cqcode provides CQCode util functions.
|
|
package cqcode
|
|
|
|
import "strings"
|
|
|
|
/*EscapeText 将字符串raw中部分字符转义
|
|
|
|
& -> &
|
|
|
|
[ -> [
|
|
|
|
] -> ]
|
|
|
|
*/
|
|
func EscapeText(s string) string {
|
|
count := strings.Count(s, "&")
|
|
count += strings.Count(s, "[")
|
|
count += strings.Count(s, "]")
|
|
if count == 0 {
|
|
return s
|
|
}
|
|
|
|
// Apply replacements to buffer.
|
|
var b strings.Builder
|
|
b.Grow(len(s) + count*4)
|
|
start := 0
|
|
for i := 0; i < count; i++ {
|
|
j := start
|
|
for index, r := range s[start:] {
|
|
if r == '&' || r == '[' || r == ']' {
|
|
j += index
|
|
break
|
|
}
|
|
}
|
|
b.WriteString(s[start:j])
|
|
switch s[j] {
|
|
case '&':
|
|
b.WriteString("&")
|
|
case '[':
|
|
b.WriteString("[")
|
|
case ']':
|
|
b.WriteString("]")
|
|
}
|
|
start = j + 1
|
|
}
|
|
b.WriteString(s[start:])
|
|
return b.String()
|
|
}
|
|
|
|
/*EscapeValue 将字符串value中部分字符转义
|
|
|
|
, -> ,
|
|
|
|
& -> &
|
|
|
|
[ -> [
|
|
|
|
] -> ]
|
|
|
|
*/
|
|
func EscapeValue(value string) string {
|
|
ret := EscapeText(value)
|
|
return strings.ReplaceAll(ret, ",", ",")
|
|
}
|
|
|
|
/*UnescapeText 将字符串content中部分字符反转义
|
|
|
|
& -> &
|
|
|
|
[ -> [
|
|
|
|
] -> ]
|
|
|
|
*/
|
|
func UnescapeText(content string) string {
|
|
ret := content
|
|
ret = strings.ReplaceAll(ret, "[", "[")
|
|
ret = strings.ReplaceAll(ret, "]", "]")
|
|
ret = strings.ReplaceAll(ret, "&", "&")
|
|
return ret
|
|
}
|
|
|
|
/*UnescapeValue 将字符串content中部分字符反转义
|
|
|
|
, -> ,
|
|
|
|
& -> &
|
|
|
|
[ -> [
|
|
|
|
] -> ]
|
|
|
|
*/
|
|
func UnescapeValue(content string) string {
|
|
ret := strings.ReplaceAll(content, ",", ",")
|
|
return UnescapeText(ret)
|
|
}
|