support old chat format system which based on §
This commit is contained in:
@ -4,6 +4,7 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/Tnze/go-mc/data"
|
||||
@ -48,29 +49,54 @@ func (m *Message) Decode(r pk.DecodeReader) error {
|
||||
return json.NewDecoder(io.LimitReader(r, int64(Len))).Decode(m)
|
||||
}
|
||||
|
||||
var colors = map[string]int{
|
||||
"black": 30,
|
||||
"dark_blue": 34,
|
||||
"dark_green": 32,
|
||||
"dark_aqua": 36,
|
||||
"dark_red": 31,
|
||||
"dark_purple": 35,
|
||||
"gold": 33,
|
||||
"gray": 37,
|
||||
"dark_gray": 90,
|
||||
"blue": 94,
|
||||
"green": 92,
|
||||
"aqua": 96,
|
||||
"red": 91,
|
||||
"light_purple": 95,
|
||||
"yellow": 93,
|
||||
"white": 97,
|
||||
var fmtCode = map[byte]string{
|
||||
'0': "30",
|
||||
'1': "34",
|
||||
'2': "32",
|
||||
'3': "36",
|
||||
'4': "31",
|
||||
'5': "35",
|
||||
'6': "33",
|
||||
'7': "37",
|
||||
'8': "90",
|
||||
'9': "94",
|
||||
'a': "92",
|
||||
'b': "96",
|
||||
'c': "91",
|
||||
'd': "95",
|
||||
'e': "93",
|
||||
'f': "97",
|
||||
|
||||
// 'k':"", //random
|
||||
'l': "1",
|
||||
'm': "9",
|
||||
'n': "4",
|
||||
'o': "3",
|
||||
'r': "0",
|
||||
}
|
||||
var colors = map[string]string{
|
||||
"black": "30",
|
||||
"dark_blue": "34",
|
||||
"dark_green": "32",
|
||||
"dark_aqua": "36",
|
||||
"dark_red": "31",
|
||||
"dark_purple": "35",
|
||||
"gold": "33",
|
||||
"gray": "37",
|
||||
"dark_gray": "90",
|
||||
"blue": "94",
|
||||
"green": "92",
|
||||
"aqua": "96",
|
||||
"red": "91",
|
||||
"light_purple": "95",
|
||||
"yellow": "93",
|
||||
"white": "97",
|
||||
}
|
||||
|
||||
// ClearString return the message without escape sequence for ansi color.
|
||||
func (m Message) ClearString() string {
|
||||
var msg strings.Builder
|
||||
msg.WriteString(m.Text)
|
||||
msg.WriteString(transf(m.Text, false))
|
||||
|
||||
//handle translate
|
||||
if m.Translate != "" {
|
||||
@ -110,12 +136,12 @@ func (m Message) String() string {
|
||||
format.WriteString("9;")
|
||||
}
|
||||
if m.Color != "" {
|
||||
fmt.Fprintf(&format, "%d;", colors[m.Color])
|
||||
format.WriteString(colors[m.Color] + ";")
|
||||
}
|
||||
if format.Len() > 0 {
|
||||
msg.WriteString("\033[" + format.String()[:format.Len()-1] + "m")
|
||||
}
|
||||
msg.WriteString(m.Text)
|
||||
msg.WriteString(transf(m.Text, true))
|
||||
|
||||
//handle translate
|
||||
if m.Translate != "" {
|
||||
@ -140,3 +166,21 @@ func (m Message) String() string {
|
||||
}
|
||||
return msg.String()
|
||||
}
|
||||
|
||||
var fmtPat = regexp.MustCompile("§[0-9A-FK-OR]")
|
||||
|
||||
func transf(str string, ansi bool) string {
|
||||
return fmtPat.ReplaceAllStringFunc(
|
||||
str,
|
||||
func(str string) string {
|
||||
f, ok := fmtCode[str[2]]
|
||||
if ok {
|
||||
if ansi {
|
||||
return "\033[" + f + "m" // enable, add ANSI code
|
||||
}
|
||||
return "" //disable, remove the § code
|
||||
}
|
||||
return str //not a § code
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@ -26,6 +26,9 @@ var jsons = []string{
|
||||
`{"translate":"translation.test.escape","with":["str1","str2"]}`,
|
||||
`{"translate":"translation.test.args","with":["str1","str2"]}`,
|
||||
`{"translate":"translation.test.world"}`,
|
||||
|
||||
`"Tnze"`,
|
||||
`"§0Tnze"`,
|
||||
}
|
||||
|
||||
var texts = []string{
|
||||
@ -37,6 +40,9 @@ var texts = []string{
|
||||
"%s %str1 %%s %%str2",
|
||||
"str1 str2",
|
||||
"world",
|
||||
|
||||
"Tnze",
|
||||
"\033[30mTnze",
|
||||
}
|
||||
|
||||
var ctexts = []string{
|
||||
@ -48,6 +54,9 @@ var ctexts = []string{
|
||||
"%s %str1 %%s %%str2",
|
||||
"str1 str2",
|
||||
"world",
|
||||
|
||||
"Tnze",
|
||||
"Tnze",
|
||||
}
|
||||
|
||||
func TestChatMsgFormatString(t *testing.T) {
|
||||
|
Reference in New Issue
Block a user