// 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) }