diff --git a/src/utils/textstyleparser.go b/src/utils/textstyleparser.go index e640fae..f732dc7 100644 --- a/src/utils/textstyleparser.go +++ b/src/utils/textstyleparser.go @@ -11,18 +11,19 @@ const ( ) const ( - None int = 0 - BoldBegin = 1 - BoldEnd = 2 - ItalicBegin = 3 - ItalicEnd1 = 4 - ItalicEnd2 = 5 + None int = 0 + ItalicBegin = 1 + ItalicEnd = 2 + BoldBegin = 3 + BoldEnd1 = 4 + BoldEnd2 = 5 ) func ParseMarkdownMessage(message string) (string, []string) { textFormat := Normal textFormatBegin := 0 - textFormatEnd := 0 + textFormatLength := 0 + numOfAsterisks := 0 state := None signalCliFormatStrings := []string{} fullString := "" @@ -31,34 +32,36 @@ func ParseMarkdownMessage(message string) (string, []string) { for i, v := range runes { //iterate through rune if v == '*' { - if state == BoldBegin { + if state == ItalicBegin { if i-1 == textFormatBegin { - state = ItalicBegin - textFormat = Italic - textFormatBegin = i + state = BoldBegin + textFormat = Bold + textFormatBegin = i - numOfAsterisks + textFormatLength = 0 } else { - state = BoldEnd - textFormatEnd = i - 1 + state = ItalicEnd } } else if state == None { - state = BoldBegin - textFormat = Bold - textFormatBegin = i - } else if state == ItalicBegin { - state = ItalicEnd1 - textFormatEnd = i - 1 - } else if state == ItalicEnd1 { - state = ItalicEnd2 + state = ItalicBegin + textFormat = Italic + textFormatBegin = i - numOfAsterisks + textFormatLength = 0 + } else if state == BoldBegin { + state = BoldEnd1 + } else if state == BoldEnd1 { + state = BoldEnd2 } + numOfAsterisks += 1 } else { + textFormatLength += 1 fullString += string(v) } - if state == BoldEnd || state == ItalicEnd2 { - signalCliFormatStrings = append(signalCliFormatStrings, strconv.Itoa(textFormatBegin)+":"+strconv.Itoa(textFormatEnd-textFormatBegin)+":"+textFormat) + if state == ItalicEnd || state == BoldEnd2 { + signalCliFormatStrings = append(signalCliFormatStrings, strconv.Itoa(textFormatBegin)+":"+strconv.Itoa(textFormatLength)+":"+textFormat) state = None textFormatBegin = 0 - textFormatEnd = 0 + textFormatLength = 0 textFormat = Normal } } diff --git a/src/utils/textstyleparser_test.go b/src/utils/textstyleparser_test.go new file mode 100644 index 0000000..e109aee --- /dev/null +++ b/src/utils/textstyleparser_test.go @@ -0,0 +1,34 @@ +package utils + +import "testing" +import "reflect" + +func expectMessageEqual(t *testing.T, message1 string, message2 string) { + if message1 != message2 { + t.Errorf("got %q, wanted %q", message1, message2) + } +} + +func expectFormatStringsEqual(t *testing.T, formatStrings1 []string, formatStrings2 []string) { + if !reflect.DeepEqual(formatStrings1, formatStrings2) { + t.Errorf("got %q, wanted %q", formatStrings1, formatStrings2) + } +} + +func TestSimpleMessage1(t *testing.T) { + message, signalCliFormatStrings := ParseMarkdownMessage("*italic*") + expectMessageEqual(t, message, "italic") + expectFormatStringsEqual(t, signalCliFormatStrings, []string{"0:6:ITALIC"}) +} + +func TestSimpleMessage(t *testing.T) { + message, signalCliFormatStrings := ParseMarkdownMessage("*This is a italic message*") + expectMessageEqual(t, message, "This is a italic message") + expectFormatStringsEqual(t, signalCliFormatStrings, []string{"0:24:ITALIC"}) +} + +func TestBoldAndItalicMessage(t *testing.T) { + message, signalCliFormatStrings := ParseMarkdownMessage("This is a **bold** and *italic* message") + expectMessageEqual(t, message, "This is a bold and italic message") + expectFormatStringsEqual(t, signalCliFormatStrings, []string{"10:4:BOLD", "19:6:ITALIC"}) +}